Linux kernel bpf_printk()的输出

Linux kernel bpf_printk()的输出,linux-kernel,llvm-clang,bpf,ebpf,Linux Kernel,Llvm Clang,Bpf,Ebpf,在运行samples/bpf中的一些示例时,我注意到bpf_printk输出前面有一些额外的信息,例如: telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2 BPF命令:2是在BPF程序中传递给BPF_printk的实际字符串,但其余的是什么?我想这是来自内核的JIT 我在哪里可以看得更近些这些是什么意思? 谢谢。在您的示例中: telnet-470 [001] .N.. 419421.045894: 0x00

在运行
samples/bpf
中的一些示例时,我注意到
bpf_printk
输出前面有一些额外的信息,例如:

telnet-470   [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF命令:2
是在BPF程序中传递给
BPF_printk
的实际字符串,但其余的是什么?我想这是来自内核的JIT

我在哪里可以看得更近些这些是什么意思? 谢谢。

在您的示例中:

telnet-470   [001] .N.. 419421.045894: 0x00000001: BPF command: 2
  • telnet
    是当前任务的名称
  • 470
    是当前任务的PID
  • 001
    是运行任务的CPU号
  • .N..
    中,每个字符都表示一组选项(是否启用IRQ、调度选项、是否运行硬/软IRQ、是否禁用了
    抢占级别)
    N
    表示设置了
    TIF\u NEED\u RESCHED
    PREEMPT\u NEED\u RESCHED
  • 419421.045894
    是一个时间戳
  • 0x00000001
    是一个
  • BPF命令:2
    是您的消息

来源
bpf\u trace\u printk
helper,其格式详见(
Output format
部分)。在中对假ip值进行了注释


正如下面提到的Qeole,这种格式与JIT编译器(或eBPF基础设施)无关,eBPF助手不需要进行JIT编译,因为它们已经作为内核源代码的一部分进行了编译。

回答得很好!关于这个问题,我只想澄清一下,JIT与此无关
bpf\u trace\u printk()
是一个帮助程序,因此它无论如何都不会进行JIT(而是作为内核的一部分进行编译,并从eBPF程序调用,无论是解释的还是JIT的)@pchaignon你介意我重复使用你为文档提供的关于我正在工作的助手的详细信息吗?@Qeole当然!没问题。谢谢您的详细解释。是否可以全局禁用
ftrace
?此外,我还了解到
bpf_trace_printk()
/sys/kernel/
中生成输出,我在控制台上以及
/sys/kernel/debug/tracing/trace_pipe
中看到了的输出,但我也在控制台上看到了它。如何仅在sysfs中限制它?