Linux perf 可以比较每线程性能吗?

问题描述 投票:0回答:4

我知道 perf 可以分析单个进度或单线程使用

perf stat -p tid/pid
perf top -p tid/pid

但是我想逐步分析每个线程,并比较事件,获取哪个线程消耗较高,然后对其进行优化。 perf 可以做到这一点吗?如果不能,哪些工具可以做到这一点?

谢谢。

performance perf
4个回答
3
投票

有人提议在

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
性能/每个线程


1
投票

是的。当然。

您可以使用

perf_event_open()
系统调用来打开性能计数器。 然后使用
proctl/ioctl
读取计数器。

您可以查看 linux 手册页以获取所有详细信息。


0
投票

使用'-t'选项指定线程ID。例如:

perf stat -t 11111

-2
投票

你看到这个问题了吗?

如何在 Linux 上分析多线程 C++ 应用程序?

我认为你可以从 valgrind 开始:

http://valgrind.org/docs/manual/cl-manual.html

© www.soinside.com 2019 - 2024. All rights reserved.