在运行一些示例时,samples/bpf
我注意到bpf_printk
输出前面带有一些额外的信息,例如:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF command: 2
是传递给bpf_printk
bpf 程序的实际字符串,但其余的是什么?我假设这来自内核的 JIT ?
我在哪里可以更仔细地查看这些位的含义?谢谢。
在运行一些示例时,samples/bpf
我注意到bpf_printk
输出前面带有一些额外的信息,例如:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF command: 2
是传递给bpf_printk
bpf 程序的实际字符串,但其余的是什么?我假设这来自内核的 JIT ?
我在哪里可以更仔细地查看这些位的含义?谢谢。
在您的示例中:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
telnet
是您当前任务的名称。470
是您当前任务的 PID。001
是运行任务的 CPU 编号。.N..
中,每个字符指的是一组选项(是否启用 irq、调度选项、是否正在运行硬/软中断、级别preempt_disabled
)。N
表示TIF_NEED_RESCHED
和PREEMPT_NEED_RESCHED
设置。419421.045894
是一个时间戳。0x00000001
是BPF 用于 ip register 的假值。BPF command: 2
是你的信息。bpf_trace_printk
助手调用trace_printk
,其格式在ftrace (Output format
部分) 的文档中有详细说明。假 ip 值在helper的原始提交中bpf_trace_printk
注释。
正如下面 Qeole 所提到的,这种格式与 JIT 编译器(或与此相关的 eBPF 基础设施)无关,并且 eBPF 助手不需要进行 JIT 编译,因为它们已经作为内核源代码的一部分进行了编译。