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