【发布时间】:2019-09-08 12:43:31
【问题描述】:
当我运行 sudo bpftool prog show 时,我得到以下输出
39: socket_filter name bpfprog1 tag e29cda32ba011d7f gpl
loaded_at 2019-09-08T14:21:57+0200 uid 1000
xlated 248B jited 169B memlock 4096B map_ids 30
但如果我尝试使用以下命令获取程序的 jitted 输出
sudo bpftool prog dump jited tag e29cda32ba011d7f
我收到一条错误消息,报告如下:
错误:无法获取 prog 信息 (3):错误地址
问题:我做错了什么?呵呵
【问题讨论】:
-
有趣。可能是一个错误。我不认为很多人实际上在命令中使用标签,也许它在某个时候坏了。如果您尝试使用其 id 转储程序,它是否有效?它会为其他程序重现吗?
-
是的,经过一些尝试后,我发现在其他示例中 id 用于指代程序和地图,因此我尝试使用 id 并且效果很好。我想看看内核重写的版本(正如您在推文中的描述中所说的它们不同)和原始版本(_kern.o)之间的区别。我尝试了 sudo echo 2 > /proc/sys/net/core/bpf_jit_enable 以使用 bpf_jit_asm 但我无法在该文件中回显。我得到 bash: echo: write error: Invalid argument
-
你能告诉你你的内核版本是什么吗?如果可以的话,我明天试试看。
-
Documentation/networking/filter.txt说:“当CONFIG_BPF_JIT_ALWAYS_ON被启用时,bpf_jit_enable被永久设置为 1 并且设置任何其他值都将返回失败。甚至将bpf_jit_enable设置为 2 也是如此,因为不鼓励将最终的 JIT 映像转储到内核日志中,并且通常推荐通过 bpftool(在tools/bpf/bpftool/下)进行自省。” 关于访问按标签进行程序,它适用于我最近的 bpftool 和内核,所以我需要更多数据来排除故障:/.