【问题标题】:Monitoring performance counters during execution of a specific function在执行特定功能期间监视性能计数器
【发布时间】:2019-07-18 09:51:12
【问题描述】:

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

我的问题是:

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

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

有什么建议吗?

【问题讨论】:

    标签: c linux memcached perf


    【解决方案1】:

    我只能在 /perf/core_toggle 存储库中找到切换事件功能的实现,该存储库由该功能的开发人员维护。您可能可以编译该代码并自己使用该功能。您可以找到有关如何使用它的示例here。但是,我认为它尚未在任何版本的内核的主要 Linux 存储库中被接受。

    如果您想衡量一个或多个事件的数量,那么有一些易于使用的替代方案,但需要在您的代码库中添加几行代码。您可以通过编程方式使用perf interface 或其他提供此类API 的第三方工具,例如PAPILIKWID

    【讨论】:

    • 是的,perf_toggle_events 在最近的 linux 内核版本中已停止使用。我设法联系了该功能的作者,他确认了这一点。现在我正在使用 perf_event_open 系统调用来检测我的代码。一旦我让它正常工作,我会发布这篇文章的更新。
    • @shreyas42 停产是指它在某个时候受到支持,但后来该功能被删除?切换事件功能听起来非常有用。你知道它支持哪些内核版本以及它被删除的原因吗?
    • 因此,Jiri Olsa(toggle_events 的作者)在他的邮件中提到,关于切换事件功能的工作已被放弃,目前没有人真正关注它。我不确定他们为什么会这样决定。我实际上克隆了 perf/core_toggle 存储库并构建了 linux 内核。如果我没记错的话,它的 linux 内核版本是 3.12.x。这有点麻烦,有很多问题,比如不受支持的 gcc-5 等等。最后,我决定不使用它,因为此时内核已经使用了大约 6 年。
    • @shreyas42 但是perf/core_toggle 分支从未在任何时候合并到主内核存储库中,对吧?顺便说一句,如果这回答了您的问题,您可以点击投票按钮下方的复选标记。
    猜你喜欢
    • 2014-04-19
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多