Linux perf:有可能以某种方式忽略繁忙的等待线程吗?

时间:2017-12-05 20:26:00

标签: linux multithreading perf

我正在尝试对我的流程进行一些性能分析。该进程有许多忙于循环/忙于等待事件的线程。看起来perf正在把忙碌的循环当作最高级别的犯罪者(正如预期的那样),但是有什么样的魔法能够以某种方式忽略这些无操作旋转吗?

2 个答案:

答案 0 :(得分:0)

一般方法是控制进程的“niceness” - 优先级的nix名称。你可以使用

top

查看进程和nice值。找到你的违规线程然后你可以使用:

renice 19 -p <pid of offending process>

19是从-20(最高优先级)到19(最差)的任何值。找到了一个很好的教程here。请注意,pid实际上是一个tid(线程ID)。

所有这一切都假设您无法控制生成这些进程的可执行文件的来源。如果这样,您需要转到等待/中断方案而不是忙等待,例如Efficient way to wait for an interrupt in C。它适用于rasberry-PI,但我认为pthread逻辑应该是有用的。 boost::pthread还有其他好东西。

如果你正在俯视完全暂停这些线程kill可能是服务的,按照https://unix.stackexchange.com/questions/2107/how-to-suspend-and-resume-processes#2112,但我不确定这是否适用于线程(如果它适用,它会不会只停止线程而不是进程。)

答案 1 :(得分:0)

perf report可以按符号或DSO过滤,但无法使用黑名单。

我认为可能有一种使用组合-p -x的方法,但POSIX正则表达式似乎不支持负向前瞻,所以黑名单似乎也不可行。

在一天结束时,您可能需要一些名为根本原因分析责备转移的内容,以便将等待时间归因于导致事件本身延迟的任何原因。我不认为perf可以直接使用。

通常情况下,被动地等待事件而不是忙碌等待通常会更好。