You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何启用BPF_PROG_TYPE_TRACING?环境检测异常问题求助

如何启用BPF_PROG_TYPE_TRACING?

问题背景

内核版本:Linux iZufxxxxxZ 5.10.134-14.1.al8.x86_64 #1 SMP Thu May 25 18:05:52 CST 2023 x86_64 x86_64 x86_64 GNU/Linux
已开启基础BPF配置(CONFIG_BPF=y等),bpftool feature probe full显示相关配置已设置,但bpftool feature probe提示eBPF program_type tracing is NOT available,strace加载BPF_PROG_TYPE_TRACING程序时返回-1 EINVAL (Invalid argument)。

排查与解决步骤

1. 检查内核跟踪相关的具体配置项

仅开启CONFIG_BPF=y不足以支持BPF_PROG_TYPE_TRACING,需确保以下关键配置已启用:

  • CONFIG_BPF_SYSCALL=y:BPF系统调用的基础依赖
  • CONFIG_BPF_EVENTS=y:启用BPF跟踪事件支持
  • CONFIG_FTRACE=y:BPF_TRACING依赖的内核跟踪框架
  • CONFIG_BPF_KPROBE_OVERRIDE=y:kprobe类跟踪程序的必要配置
  • CONFIG_DEBUG_INFO_BTF=y:BTF信息支持,部分BPF程序加载必需

执行以下命令检查当前内核配置(需系统存在/boot/config-$(uname -r)文件):

grep -E 'CONFIG_BPF_SYSCALL|CONFIG_BPF_EVENTS|CONFIG_FTRACE|CONFIG_BPF_KPROBE_OVERRIDE|CONFIG_DEBUG_INFO_BTF' /boot/config-$(uname -r)

2. 直接测试BPF跟踪程序加载

用最小化示例验证内核是否真正支持:

from bcc import BPF
BPF(text='int kprobe__sys_clone(void *ctx) { bpf_trace_printk("clone called\\n"); return 0; }').trace_print()

若加载失败,根据具体错误信息定位问题。

3. 重新编译内核的场景

如果上述配置项存在未开启的,且发行版未提供带完整BPF跟踪配置的内核包,则需要重新编译内核:

  1. 获取对应版本的内核源码(如5.10.134)
  2. 复制当前内核配置到源码目录:cp /boot/config-$(uname -r) .config
  3. 打开配置界面:make menuconfig,启用所有缺失的BPF跟踪相关选项
  4. 编译并安装内核:make -j$(nproc) && make modules_install && make install
  5. 重启系统后验证

4. 其他排查点

  • 安全模块限制:临时关闭SELinux(setenforce 0)或AppArmor,测试是否是安全策略阻止了BPF程序加载
  • bpftool版本:确保bpftool版本与内核版本匹配,旧版本可能无法正确识别内核特性

内容的提问来源于stack exchange,提问作者zmhuang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:59:57