您如何计算 eBPF 探针的性能影响?

How do you compute the performance impact of a eBPF probe?

eBPF 已成为轻松快速地监控流程的重要工具。但是,我无法找到如何计算探测器本身对性能的影响。我确定如果我挂钩每个系统调用并在映射中推送一些信息,肯定会有一些影响,没有什么是免费的,但我如何正确计算这个增加的延迟?

我想到的唯一解决办法是运行多次使用相同的程序,同时激活和不激活两个探测器,并检查系统执行时间差异,但在我看来这会受到以下因素的影响各种因素可能会增加很多差异,因此不会给出非常可靠的结果。

a talk on this topic by Bryce Kahle at the eBPF Summit。这是我所知道的对这个问题最完整的回答。

总而言之,您有几种选择:

  • 依靠 kernel.bpf_stats_enabled 内核收集的统计信息。
  • 使用bpftool prog profile.
  • 使用 BPF_PROG_TEST_RUN 挂钩,例如,通过 bpftool prog run.

演讲中没有提到最后一个选项:您现在可以使用 BPF trampoline 在其他 BPF 程序的入口和出口附加 BPF 程序。