【问题标题】:Can't get ebpf program jitted output using bpftool无法使用 bpftool 获得 ebpf 程序的 jitted 输出
【发布时间】: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 和内核,所以我需要更多数据来排除故障:/.

标签: bpf ebpf


【解决方案1】:

您肯定会使用从 Linux 4.20 或更早版本编译的 bpftool 版本,但遇到了一个错误,即 fixed in version 5.0。更新bpftool,标签转储程序应该可以再次工作了。

作为旁注,我通常使用程序 ID 或固定路径,因为我发现检索我想要的程序更有用。根据您的用例,标签可能是有意义的,特别是如果您经常加载相同的程序而不做任何更改(因此您一定要保留相同的标签)并且没有固定它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2021-03-26
    • 1970-01-01
    • 2017-06-04
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多