最近和行业大佬探讨关于Linux内核中kprobe、ftrace、ebpf关系的一些,特此记录:
- ftrace提供了每个函数调用前添加nop的空指令
- kprobe利用这nop替换,挂hooks进行调用
- ebpf基于kprobe把hooks换成ebpf的入口函数,然后ebpf入口函数经过处理调用ebpf的程序(ebpf字节码)
- ebpf字节码在运行时有ebpf引擎校验解析,然后编译成二进制进行运行
- 2种代码执行策略:jit和aot:Just-In-Time运行时将字节码转换机器码,然后运行编译后的机器码,Ahead-Of-Time程序运行之前就编译丞机器码了。(比如gcc的程序)