繁体   English   中英

Linux Performance Monitoring,有什么方法可以监视每个线程?

[英]Linux Performance Monitoring, any way to monitor per-thread?

我正在使用Linux Ubuntu,并使用C ++进行编程。 我已经能够使用perf_event(实际上使用此链接中的程序: https : //github.com/castl/easyperf )访问性能计数器(指令计数,高速缓存未命中等)。

但是,现在我正在使用pthreads运行多线程应用程序,并且需要单独的指令计数和周期来完成每个线程。 关于如何解决这个问题的任何想法?

谢谢!

perf是您可以使用的系统配置工具。 它不像https://github.com/castl/easyperf ),它是一个库,您可以在代码中使用它。 按照以下步骤并使用它来配置您的程序:

  1. 在Ubuntu上安装perf 在不同的Linux发行版中,安装可能会完全不同。 您可以找到安装教程行。

  2. 只需运行您的程序并获取程序的所有线程ID:

    ps -eLf | grep [application name]

  3. 打开单独的终端,并根据手册页以perf stat -t [threadid]身份运行perf:

    usage: perf stat [<options>] [<command>]

     -e, --event <event> event selector. use 'perf list' to list available events -i, --no-inherit child tasks do not inherit counters -p, --pid <n> stat events on existing process id -t, --tid <n> stat events on existing thread id -a, --all-cpus system-wide collection from all CPUs -c, --scale scale/normalize counters -v, --verbose be more verbose (show counter open errors, etc) -r, --repeat <n> repeat command and print average + stddev (max: 100) -n, --null null run - dont start any counters -B, --big-num print large numbers with thousands' separators 

一篇关于perf分析文章 ,您可以对此有所了解。

请在此处查看perf工具文档,它支持您要分析的一些事件(例如: instructionscache-misses )。 从上面链接的Wiki页面中提取:

perf工具可用于在每个线程,每个进程,每个cpu或系统范围内对事件进行计数。 在单线程模式下,计数器仅监视指定线程的执行。 线程被调度后,监视将停止。 当线程从一个处理器迁移到另一个处理器时,计数器将保存在当前处理器上,并在新的处理器上恢复。

您可以使用标准工具访问perf_event - perf (来自linux-tools)。 它可以与程序的所有线程一起使用,并可以报告摘要概要文件和每个线程(每个pid /每个tid)概要文件。

此配置文件不是精确的硬件计数器,而是每N个事件采样的结果,其中N调整为达到99 Hz(每秒的次数)左右。 您也可以尝试使用-c 2000000选项来获取每2百万个硬件事件的样本。 例如,cycles事件(完整列表perf stat ./program perf list或尝试一些perf stat ./program列出的perf stat ./program

perf record -e cycles -F 99 ./program
perf record -e cycles -c 2000000 ./program

所有线程的摘要。 -n将显示样本总数

perf report -n

每个pid(实际上在这里使用了tid,因此您可以选择任何线程)。

文本变体将列出记录了摘要样本计数的所有线程(使用-c 2000000您可以将样本计数乘以-c 2000000万来估算该线程的硬件事件计数)

perf report -n -s pid | cat

或类似ncurses的交互式变量,您可以在其中选择任何线程并查看其自己的配置文件:

perf report -n -s pid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM