eBPF 已成为轻松快速地监控流程的重要工具。然而,我无法找到如何计算探针本身对性能的影响。我确信如果我挂钩每个系统调用并在地图中推送一些信息,一定会产生一些影响,没有什么是免费的,但是我将如何正确计算这种增加的延迟?
我想到的唯一解决方案是在探测器处于活动状态和未活动状态的情况下多次运行相同的程序,并检查系统执行时间差异,但在我看来,这会受到各种因素的影响,这些因素可能会增加很多方差,因此不会给出非常可靠的结果。
Bryce Kahle 在eBPF 峰会上就该主题进行了演讲。这是我所知道的这个问题最完整的答案。
总而言之,您有多种选择:
kernel.bpf_stats_enabled
统计数据。bpftool prog profile
。BPF_PROG_TEST_RUN
钩子,例如通过 bpftool prog run
。演讲没有提到最后一个选项:您现在可以使用 BPF Tampoline 在其他 BPF 程序的入口和出口处附加 BPF 程序。