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 编译的函数。