BPF_PROG_RUN 是否实现了后备 ebpf 解释器?
Does BPF_PROG_RUN implements the fallback ebpf interpreter?
https://github.com/torvalds/linux/blob/33920f1ec5bf47c5c0a1d2113989bdd9dfb3fae9/include/linux/filter.h#L556-L571
这是 ebpf 后备解释器的实现吗?
不,BPF_PROG_RUN
根据 prog->bpf_func
指向的内容调用解释器或 JITed 程序。如果用户启用了 bpf stats,它还会更新统计信息(运行时和 BPF 执行次数)。
要完成 pchaigno 的回答:prog->bpf_func
的选择由 kernel/bpf/core.c
中定义的 bpf_prog_select_runtime()
完成,并在 bpf_prog_load()
中调用 kernel/bpf/syscall.c
,即当 bpf()
系统调用与 BPF_PROG_LOAD
命令一起使用时。
选定的运行时可以是内核解释器、JIT 编译的函数(如果正在使用 JIT),或者是在硬件卸载的情况下由 NIC 驱动程序 JIT 编译的函数。
https://github.com/torvalds/linux/blob/33920f1ec5bf47c5c0a1d2113989bdd9dfb3fae9/include/linux/filter.h#L556-L571 这是 ebpf 后备解释器的实现吗?
不,BPF_PROG_RUN
根据 prog->bpf_func
指向的内容调用解释器或 JITed 程序。如果用户启用了 bpf stats,它还会更新统计信息(运行时和 BPF 执行次数)。
要完成 pchaigno 的回答:prog->bpf_func
的选择由 kernel/bpf/core.c
中定义的 bpf_prog_select_runtime()
完成,并在 bpf_prog_load()
中调用 kernel/bpf/syscall.c
,即当 bpf()
系统调用与 BPF_PROG_LOAD
命令一起使用时。
选定的运行时可以是内核解释器、JIT 编译的函数(如果正在使用 JIT),或者是在硬件卸载的情况下由 NIC 驱动程序 JIT 编译的函数。