bpf_printk() 的输出
Output from bpf_printk()
虽然 运行 来自 samples/bpf
的一些例子,但我注意到 bpf_printk
输出前面有一些额外的信息,例如:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF command: 2
是 bpf 程序中传递给 bpf_printk
的实际字符串,但其余部分是什么?我假设这来自内核的 JIT ?
我在哪里可以更仔细地了解这些位的含义?
谢谢。
在你的例子中:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
telnet
是您当前的任务名称。
470
是您当前任务的 PID。
001
是 CPU 号,任务是 运行。
- 在
.N..
中,每个字符分别指代一组选项(是否启用irq,调度选项,hard/softirqs是否为运行,preempt_disabled
的级别分别). N
表示设置了TIF_NEED_RESCHED
和PREEMPT_NEED_RESCHED
。
419421.045894
是时间戳。
0x00000001
是一个 fake value used by BPF for the ip register.
BPF command: 2
是您的留言。
来源
bpf_trace_printk
助手 calls trace_printk
, whose format is detailed in the documentation for ftrace (Output format
section). The fake ip value is commented in the original commit for the bpf_trace_printk
helper。
正如 Qeole 在下面提到的,这种格式与 JIT 编译器(或与此相关的 eBPF 基础设施)无关,并且 eBPF 助手不需要进行 JIT 编译,因为它们已经作为内核的源代码。
虽然 运行 来自 samples/bpf
的一些例子,但我注意到 bpf_printk
输出前面有一些额外的信息,例如:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
BPF command: 2
是 bpf 程序中传递给 bpf_printk
的实际字符串,但其余部分是什么?我假设这来自内核的 JIT ?
我在哪里可以更仔细地了解这些位的含义? 谢谢。
在你的例子中:
telnet-470 [001] .N.. 419421.045894: 0x00000001: BPF command: 2
telnet
是您当前的任务名称。470
是您当前任务的 PID。001
是 CPU 号,任务是 运行。- 在
.N..
中,每个字符分别指代一组选项(是否启用irq,调度选项,hard/softirqs是否为运行,preempt_disabled
的级别分别).N
表示设置了TIF_NEED_RESCHED
和PREEMPT_NEED_RESCHED
。 419421.045894
是时间戳。0x00000001
是一个 fake value used by BPF for the ip register.BPF command: 2
是您的留言。
来源
bpf_trace_printk
助手 calls trace_printk
, whose format is detailed in the documentation for ftrace (Output format
section). The fake ip value is commented in the original commit for the bpf_trace_printk
helper。
正如 Qeole 在下面提到的,这种格式与 JIT 编译器(或与此相关的 eBPF 基础设施)无关,并且 eBPF 助手不需要进行 JIT 编译,因为它们已经作为内核的源代码。