5

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

telnet-470   [001] .N.. 419421.045894: 0x00000001: BPF command: 2

BPF command: 2是传递给bpf_printkbpf 程序的实际字符串,但其余的是什么?我假设这来自内核的 JIT ?

我在哪里可以更仔细地查看这些位的含义?谢谢。

4

1 回答 1

5

在您的示例中:

telnet-470   [001] .N.. 419421.045894: 0x00000001: BPF command: 2
  • telnet是您当前任务的名称。
  • 470是您当前任务的 PID。
  • 001是运行任务的 CPU 编号。
  • .N..中,每个字符指的是一组选项(是否启用 irq、调度选项、是否正在运行硬/软中断、级别preempt_disabled)。N表示TIF_NEED_RESCHEDPREEMPT_NEED_RESCHED设置。
  • 419421.045894是一个时间戳。
  • 0x00000001BPF 用于 ip register 的假值
  • BPF command: 2是你的信息。

来源

bpf_trace_printk助手调用trace_printk,其格式在ftrace (Output format部分) 的文档中有详细说明。假 ip 值在helper的原始提交中bpf_trace_printk注释。

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

于 2017-12-20T21:28:04.520 回答