Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在执行特定函数期间监视性能计数器_C_Linux_Memcached_Perf - Fatal编程技术网

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

C 在执行特定函数期间监视性能计数器,c,linux,memcached,perf,C,Linux,Memcached,Perf,对于某些上下文,我正在分析Memcached的执行,并且我希望在执行特定函数期间监视dTLB未命中。假设Memcached生成多个线程,则每个线程都可能并行执行该函数。我发现了一个特殊的解决方案,Perf features toggle events(),通过在函数入口和出口上设置探测,并分别在每个探测上打开/关闭事件计数器,应该可以实现这一点 我的问题是: (a) 据我所知,perf-toggle事件是作为Linux内核3.x分支的一部分包含的。Linux内核4.x的最新LTS版本中是否包含了

对于某些上下文,我正在分析Memcached的执行,并且我希望在执行特定函数期间监视dTLB未命中。假设Memcached生成多个线程,则每个线程都可能并行执行该函数。我发现了一个特殊的解决方案,Perf features toggle events(),通过在函数入口和出口上设置探测,并分别在每个探测上打开/关闭事件计数器,应该可以实现这一点

我的问题是:

(a) 据我所知,perf-toggle事件是作为Linux内核3.x分支的一部分包含的。Linux内核4.x的最新LTS版本中是否包含了这一点?如果没有,还有其他选择吗

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


有什么建议吗?

我只能在repo中找到切换事件功能的实现,该功能由该功能的开发人员维护。您可以自己编译代码并使用该特性。你可以找到如何使用它的例子。然而,我认为它还没有被任何版本的内核的主Linux repo所接受


如果您想测量一个或多个事件的数量,那么有一些替代方法很容易使用,但需要向代码库中添加几行代码。您可以通过编程方式使用或其他提供和等API的第三方工具。

是的,在最近的linux内核版本中,perf_toggle_事件已经停止。我设法联系了这篇专题文章的作者,他也证实了这一点。现在我正在使用perf\u event\u开放系统调用检测代码。一旦我让它正常工作,我会发布一个更新到这篇文章。@shreyas42“停止”你的意思是说它在某个时候受到支持,但后来该功能被删除了?切换事件功能听起来非常有用。您知道它支持哪些内核版本以及为什么被删除吗?因此,Jiri Olsa(toggle_events的作者)在他的邮件中提到,toggle_events功能的工作已经放弃,现在没有人真正关注它。我不太清楚他们为什么这样决定。我实际上克隆了perf/core\u toggle repo并构建了linux内核。如果我没记错的话,它的linux内核版本是3.12.x。这是一个有点讨厌的tbh,像不受支持的gcc-5等很多问题。最后,我决定不使用它,因为此时内核已经有6年的历史了。@shreyas42但是
perf/core\u toggle
分支从未在任何时候合并到主内核repo中,对吗?顺便说一句,如果这回答了你的问题,你可以点击投票按钮下面的复选标记。提到明显使用ptrace和
perf\u event\u open的。