在执行特定功能期间监视性能计数器

Monitoring performance counters during execution of a specific function

对于某些上下文,我正在分析 Memcached 的执行情况,并且我想在执行特定函数期间监视 dTLB 未命中。假设 Memcached 生成多个线程,每个线程都可能并行执行该函数。我发现的一个特定解决方案,Perf 具有切换事件 (Using perf probe to monitor performance stats during a particular function),应该让我通过在函数进入和退出时设置探测器并分别在每个探测器上切换事件计数器 on/off 来实现这一点。

我的问题是:

(a) 据我了解,perf 切换事件作为 Linux 内核 3.x 分支的一部分包含在内。 Linux 内核 4.x 最近的 LTS 版本中是否包含此内容?如果没有,还有其他选择吗?

(b) 此处描述了我发现的另一种解决方法:performance monitoring for subset of process execution。但是我不太确定这是否能正确解决手头的问题。我很担心,因为 Memcached 是多线程的,让每个线程生成一个新的子进程可能会导致过多的开销。

有什么建议吗?

我只能在 /perf/core_toggle repo, which is maintained by the developer of the feature. You can probably compile that code and play with the feature yourself. You can find examples on how to use it here 中找到切换事件功能的实现。但是,我认为它还没有在任何版本的内核的主要 Linux 存储库中被接受。

如果您想测量一个或多个事件的数量,则有一些易于使用的替代方法,但需要在您的代码库中添加几行代码。您可以以编程方式使用 perf interface or other third-party tools that offer such APIs such as PAPI and LIKWID.