AI 时代的一些个人想法

最近用 AI 比较多,也有一些自己的感受,零散记一下。

1. 大模型、Agent 和平台

大模型就像发动机,Token 是汽油,Agent 智能体相当于汽车,各种 CI/CD 平台就是路和基础设施,OpenClaw 这类工具大概是汽车的智驾。不一定非常准确,大概这么个意思。

2. AI 写代码这件事,现在到底到哪了

春节前,AI 辅助写单元测试,能完成大概六七十。春节后,用上 plan 模式 + Claude Opus/Sonnet 4.6 之类,至少 80%,部分场景 85% 以上。

对于初中级程序员能干的事,AI 基本已经碾压了。简单的功能、函数、小模块,没什么问题。

但是,遇到复杂项目,多模块互相关联、调用链条复杂的那种,目前国内国际顶级模型都还不太行。这块儿目前是高级程序员最后的阵地。但以 AI 目前的迭代速度,这个阵地估计也撑不了太久。

下一个真正的护城河,可能是:对现网复杂问题的经验判断,行业 context 的深度积累。这些东西 AI 目前基本还是胡说八道的多。

3. 真正的护城河在哪

不是什么人文关怀、情感这些,这些 AI 是可以模拟的,而且会越来越好,对这方面的护城河持悲观态度。

真正难被替代的是:私有数据、行业经验、关系网络、运营资源、信息差。这些才是门槛,其他的比如做个 to-do list 应用、学英语 app 之类,基本没有任何护城河,扯淡。

4. 技术跟进节奏

不必追 .0 版本,等到 .1、.2,大版本相对稳定了再跟进。但也不能隔三五个大版本才去关注,那就太晚了。这个思路对 AI 新技术和传统开源软件都一样。

5. 关于 OpenClaw 的实际使用体验

用了一段时间,整体来说,选对模型 + 配好 skills,效果还不错。我这边主要用来:定时提醒股票、花粉等信息、处理 F-Stack 开源项目的 issue,效率比较好。

后续计划用来给 F-Stack 生成架构文档、规范文档,以及尝试用 SDD(Spec-Driven Development)模式开发或优化一些新功能,具体效果后续再看,有些功能对 Claude Code 来说确实也有点吃力。

对其他人的建议:任务复杂但选了弱模型,效果就很差,基本不可用。如果平台只能用自动分配的国产模型,建议换个可以手选模型的,至少选 GLM5、Kimi、MiniMax 这类相对好的。有条件的话还是上海外顶级模型,效果差距很明显。

Token 消耗大的话,可以按任务分级:简单任务用国产模型,复杂的工程化连续任务建议用海外顶级模型;定期做记忆压缩也有帮助;尽量使用Coding Plan。

当然,小龙虾目前这么火,肯定也少不了各种宣传导致的全民焦虑,以及卖铲子和盒饭的推波助澜。

就这些,比较零散,凑合看。


本文是个人提供零散信息后,由 OpenClaw + Claude Code Sonnet-4.6 模拟个人风格整理生成。

F-Stack “No probed ethernet devices” 问题分析与解决指南

整理自 GitHub F-Stack/f-stack 仓库 issue 及 DPDK 官方文档

涉及 issue:#1035、#837、#693、#663、#583、#581、#531、#386、#379 等

最后更新:2026-03-09


一、问题概述

在运行 F-Stack(helloworld、nginx、自定义应用等)时,常见以下报错:

EAL: Error - exiting with code: 1

Cause: No probed ethernet devices

或:

ff_init failed with error "No probed ethernet devices"

该错误的根本原因是 DPDK 无法检测到可用的以太网设备,即 rte_eth_dev_count_avail() 返回 0。

这是 F-Stack 社区中出现频率最高的问题之一,历史上超过 10 个相关 issue,跨越 2019~2025 年,具有高度重复性。


二、根因分类

“No probed ethernet devices” 错误通常由以下几类原因导致,需按顺序逐一排查。


原因 1:网卡未绑定到 DPDK 兼容驱动

最常见原因。 DPDK 需要网卡从内核驱动(如 ixgbevirtio)解绑,并重新绑定到 DPDK 专用驱动(igb_uiovfio-pci)。

诊断命令:

cd /data/f-stack/dpdk

python3 usertools/dpdk-devbind.py --status

如果网卡显示在 Network devices using kernel driver 而不是 Network devices using DPDK-compatible driver,则需要绑定驱动。

解决方案:使用 igb_uio 绑定

# 1. 加载 igb_uio 模块

modprobe uio

insmod /data/f-stack/dpdk/build/kernel/linux/igb_uio/igb_uio.ko

2. 查看网卡 PCI 地址

python3 usertools/dpdk-devbind.py --status

3. 绑定网卡(替换 0000:00:03.0 为你的 PCI 地址)

python3 usertools/dpdk-devbind.py --bind=igb_uio 0000:00:03.0

4. 验证绑定成功

python3 usertools/dpdk-devbind.py --status

应看到网卡出现在 "Network devices using DPDK-compatible driver" 下

解决方案:使用 vfio-pci 绑定(推荐用于现代系统/虚拟机)

# 1. 加载 vfio-pci 模块

modprobe vfio-pci

2. 绑定网卡

python3 usertools/dpdk-devbind.py --bind=vfio-pci 0000:00:03.0

3. 如需在非 IOMMU 环境使用

echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode


原因 2:config.ini 中 port_list 未正确配置

config.ini[dpdk] 段中必须配置 port_list,且其编号要与实际绑定的 DPDK 端口对应。

错误示例:

[dpdk]

port_list=0

配置了 port 0,但网卡未绑定或 PCI 白名单不匹配。

排查方法:

# 查看当前绑定的 DPDK 端口

python3 usertools/dpdk-devbind.py --status

运行 testpmd 验证 DPDK 可以看到设备

dpdk-testpmd -l 0-1 -n 4 -- -i

解决方案:

确认 pci_whitelist(旧版)或 allow(新版)参数与实际网卡 PCI 地址匹配:

[dpdk]

lcore_mask=1

channel=4

port_list=0

旧版 DPDK

pci_whitelist=0000:00:03.0

新版 DPDK (21.11+)

allow=0000:00:03.0


原因 3:Makefile 链接参数缺少 --whole-archive

在自定义应用中链接 F-Stack 时,如果没有使用 --whole-archive 标志,DPDK 的 NIC PMD(Poll Mode Driver)驱动库不会被完整链接进来,导致运行时找不到网卡。

错误写法(不完整):

LIBS += -lfstack -ldpdk

正确写法:

DPDK 19.11 及以下:

LIBS += -L${FF_PATH}/lib -Wl,--whole-archive,-lfstack,--no-whole-archive

LIBS += -L${FF_DPDK}/lib -Wl,--whole-archive,-ldpdk,--no-whole-archive

DPDK 20.11 / 21.11 及以上(使用 pkg-config):

CFLAGS  += $(shell pkg-config --cflags libdpdk)

LDFLAGS += $(shell pkg-config --libs libdpdk)

LDFLAGS += -Wl,--whole-archive,-lfstack,--no-whole-archive

参考 f-stack/example/Makefile 作为标准模板


原因 4:pkg-config 版本过低

pkg-config 版本低于 0.28 时,无法正确解析 DPDK 的 .pc 文件,导致驱动库链接不完整,运行时检测不到网卡。

诊断命令:

pkg-config --version

解决方案:升级 pkg-config 到 0.28+

cd /data

wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz

tar xzvf pkg-config-0.29.2.tar.gz

cd pkg-config-0.29.2

./configure --with-internal-glib

make && make install

mv /usr/bin/pkg-config /usr/bin/pkg-config.bak

ln -s /usr/local/bin/pkg-config /usr/bin/pkg-config

验证版本

pkg-config --version # 应显示 0.29.2


原因 5:Mellanox(MLX5)网卡缺少 glue 库

使用 Mellanox ConnectX 系列网卡时,DPDK 的 MLX5 PMD 需要额外的动态链接库支持。

错误日志:

net_mlx5: cannot load glue library: librte_pmd_mlx5_glue.so.xx.xx.x:

cannot open shared object file: No such file or directory

net_mlx5: cannot initialize PMD due to missing run-time dependency

on rdma-core libraries (libibverbs, libmlx5)

解决方案:

# 1. 安装 rdma-core 依赖

apt-get install rdma-core libibverbs-dev libmlx5-1 # Ubuntu

yum install rdma-core libibverbs libmlx5 # CentOS

2. 复制 glue 库到系统路径

cp /data/f-stack/dpdk/build/lib/librte_pmd_mlx5_glue.so.* /lib64/

ldconfig

3. 编译 DPDK 时启用 MLX5 支持

cd /data/f-stack/dpdk

make config T=x86_64-native-linuxapp-gcc

sed 's/CONFIG_RTE_LIBRTE_MLX5_PMD=n/CONFIG_RTE_LIBRTE_MLX5_PMD=y/g' \

-i build/.config

make clean && make && make install

4. 修改 config.ini 指定 PCI 地址

[dpdk]

pci_whitelist=0000:03:00.0


原因 6:在虚拟机中运行 / 无物理网卡

在笔记本、虚拟机或容器中没有 DPDK 兼容物理网卡时,需使用虚拟设备(vdev)。

使用 net_ring(内存环回设备):

[dpdk]

lcore_mask=1

channel=4

vdev=net_ring0

port_list=0

[port0]

addr=10.0.0.2

netmask=255.255.255.0

broadcast=10.0.0.255

gateway=10.0.0.1

注意: net_ring 仅用于测试/开发,不适用于生产环境。

在虚拟机中修复 igb_uio:

虚拟机中 pci_intx_mask_supported() 可能返回 false,需修改内核模块代码:

// 文件:f-stack/dpdk/kernel/linux/igb_uio/igb_uio.c 第 274 行

// 修改前:

if (pci_intx_mask_supported(udev->pdev)) {

// 修改后:

if (true || pci_intx_mask_supported(udev->pdev)) {

修改后重新编译 DPDK:

cd /data/f-stack/dpdk

meson -Denable_kmods=true build

ninja -C build && ninja -C build install


原因 7:使用 DPDK 共享库(.so)时驱动未加载

当使用 DPDK 动态库(CONFIG_RTE_BUILD_SHARED_LIB=y)时,PMD 驱动不会自动加载。

解决方案:

  • 切换到 dev 分支代码(已修复此问题)
  • 或改用静态库链接方式

原因 8:Rust binding 链接问题

在 Rust 项目中使用 F-Stack 绑定时,需要在构建脚本中明确链接 NIC 驱动库:

// build.rs

println!("cargo:rustc-link-lib=fstack");

println!("cargo:rustc-link-lib=rte_net_bond"); // 需要显式添加驱动库

// 使用 pkg-config 链接 DPDK

pkg_config::Config::new()

.print_system_libs(false)

.probe("libdpdk")

.unwrap();

注意: 确保 pkg-config 版本 ≥ 0.28,否则驱动库无法被正确识别。


三、快速排查流程

遇到 “No probed ethernet devices” 时,按以下步骤逐一排查:

Step 1: 检查网卡是否绑定 DPDK 驱动

└─ dpdk-devbind.py --status

├─ 未绑定 → 绑定 igb_uio 或 vfio-pci(见原因1)

└─ 已绑定 → 继续 Step 2

Step 2: 检查 config.ini 的 pci_whitelist/allow 是否正确

└─ 与 PCI 地址不匹配 → 修正 config.ini(见原因2)

└─ 匹配 → 继续 Step 3

Step 3: 检查是否自定义 Makefile / 应用

└─ 自定义 → 检查 --whole-archive 链接参数(见原因3)

└─ 使用示例 → 继续 Step 4

Step 4: 检查 pkg-config 版本

└─ < 0.28 → 升级 pkg-config(见原因4)

└─ ≥ 0.28 → 继续 Step 5

Step 5: 检查网卡类型

├─ Mellanox → 安装 rdma-core / 复制 glue 库(见原因5)

├─ 无物理网卡/虚拟机 → 使用 vdev 或修复 igb_uio(见原因6)

└─ 其他 → 确认网卡在 DPDK 支持列表中


四、验证步骤

修复后,按以下步骤验证:

# 1. 验证网卡绑定状态

python3 /data/f-stack/dpdk/usertools/dpdk-devbind.py --status

2. 用 testpmd 验证 DPDK 可以检测到设备

dpdk-testpmd -l 0-1 -n 4 -a 0000:00:03.0 -- -i

若看到 "Found 1 port(s)" 则正常

3. 运行 helloworld 验证 F-Stack 正常启动

cd /data/f-stack/example

./helloworld --conf /etc/f-stack.conf --proc-type=primary --proc-id=0

正常应显示 port 初始化信息,不出现 "No probed ethernet devices"


五、相关 issue 汇总

Issue 状态 关键场景 解决方案
#1035 Open 使用 vdev=net_ring0 但无效 检查 vdev 配置格式
#837 Open 阿里云服务器,eth0 仍使用内核驱动 绑定网卡到 DPDK 驱动
#693 Open 自定义应用中 ff_init 失败 Makefile 添加 –whole-archive
#663 Open Rust binding 运行失败 显式链接 PMD 驱动库
#583 Closed 使用 DPDK .so 动态库 切换到 dev 分支
#581 Closed helloworld 运行失败 升级 pkg-config ≥ 0.28
#531 Closed Mellanox MLX5 网卡 复制 glue 库到 /lib64
#386 Closed ixgbe 网卡,驱动未绑定 绑定 igb_uio 驱动
#379 Closed 自定义 PMD 驱动未链接 在 Makefile 中链接 .a 文件

六、参考资料


*本文档由 OpenClaw 自动整理,基于 F-Stack GitHub issue 历史数据和 DPDK 官方文档。*