在运行一些示例时,samples/bpf我注意到bpf_printk输出前面带有一些额外的信息,例如:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF command: 2是传递给bpf_printkbpf 程序的实际字符串,但其余的是什么?我假设这来自内核的 JIT ?
我在哪里可以更仔细地查看这些位的含义?谢谢。
在运行一些示例时,samples/bpf我注意到bpf_printk输出前面带有一些额外的信息,例如:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF command: 2是传递给bpf_printkbpf 程序的实际字符串,但其余的是什么?我假设这来自内核的 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 编译,因为它们已经作为内核源代码的一部分进行了编译。