我知道 perf 可以分析单个进度或单线程使用
perf stat -p tid/pid
或 perf top -p tid/pid
。
但是我想逐步分析每个线程,并比较事件,获取哪个线程消耗较高,然后对其进行优化。 perf 可以做到这一点吗?如果不能,哪些工具可以做到这一点?
谢谢。
有人提议在
perf stat
中添加 --per-thread 选项(并且使用间隔模式 -I 1000
可以每秒查看每个线程的当前计数器):https://lwn.net/Articles/ 649001/“性能统计:引入 --per-thread 选项”来自:Jiri Olsa,日期:2015 年 6 月 23 日星期二
添加了显示每个线程统计数据的可能性。
允许以下命令和输出:
$ perf stat -e 周期,指令 --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 周期,指令 --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://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
性能/每个线程
是的。当然。
您可以使用
perf_event_open()
系统调用来打开性能计数器。
然后使用 proctl/ioctl
读取计数器。
您可以查看 linux 手册页以获取所有详细信息。
使用'-t'选项指定线程ID。例如:
perf stat -t 11111
你看到这个问题了吗?
我认为你可以从 valgrind 开始: