我正在尝试对我的流程进行一些性能分析。该进程有许多忙于循环/忙于等待事件的线程。看起来perf正在把忙碌的循环当作最高级别的犯罪者(正如预期的那样),但是有什么样的魔法能够以某种方式忽略这些无操作旋转吗?
答案 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
可以直接使用。
通常情况下,被动地等待事件而不是忙碌等待通常会更好。