我知道perf可以使用perf stat -p tid/pid
或perf top -p tid/pid
来分析单个进度或单线程。
但是我想分析每个线程的进度,并比较事件,获取高消耗的线程,然后进行优化。可以这样做吗?如果没有,哪些工具可以做到这一点?
感谢。
答案 0 :(得分:1)
建议将补丁添加到perf stat
的--per-thread选项(并且使用间隔模式-I 1000
,可以每秒查看每个线程的当前计数器):https://lwn.net/Articles/649001/ “perf stat:Introduce --per-thread option”来自:Jiri Olsa,日期:星期二,2015年6月23日
添加显示每个线程的统计数据的可能性。
允许以下命令和输出:
$ perf stat -e cycles,instructions --per-thread -p 30190,30242 ^ C. 流程ID'30190,30242'的性能计数器统计信息:
cat-30190 0 cycles yes-30242 3,842,525,421 cycles cat-30190 0 instructions yes-30242 10,370,817,010 instructions 1.143155657 seconds time elapsed
也可以在间隔模式下工作:
$ perf stat -e cycles,instructions --per-thread -p 30190,30242 -I 1000
# time comm-pid counts unit events 1.000073435 cat-30190 89,058 cycles 1.000073435 yes-30242 3,360,786,902 cycles (100.00%) 1.000073435 cat-30190 14,066 instructions 1.000073435 yes-30242 9,069,937,462 instructions 2.000204830 cat-30190 0 cycles 2.000204830 yes-30242 3,351,667,626 cycles 2.000204830 cat-30190 0 instructions 2.000204830 yes-30242 9,045,796,885 instructions ^C 2.771286639 cat-30190 0 cycles 2.771286639 yes-30242 2,593,884,166 cycles 2.771286639 cat-30190 0 instructions 2.771286639 yes-30242 7,001,171,191 instructions
此处可用:
混帐://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
PERF / per_thread
答案 1 :(得分:-1)