在linux中定期读取性能计数器

有没有办法在 Linux中定期读取性能计数器?

像perf stat这样能够对每个X周期进行采样的东西就是我正在寻找的东西.

基本上我希望能够为某些程序每X量的cpu周期读取指令计数器(执行的指令数).

解决方法

似乎Linux中的perf工具通过在计数器达到特定值时记录事件而不是定期采样来工作.

命令perf记录-e周期,指令-c 10000每10000个周期和每10000个指令存储一个事件.它可以针对新命令或现有pid运行.它记录到当前目录中的perf.data.

分析数据是另一回事.使用perf脚本让你非常接近:

ls 16040 2152149.005813: cycles:          c113a068  ([kernel.kallsyms])
ls 16040 2152149.005820: cycles:          c1576af0  ([kernel.kallsyms])
ls 16040 2152149.005827: cycles:          c10ed6aa  ([kernel.kallsyms])
ls 16040 2152149.005831: instructions:          c1104b30  ([kernel.kallsyms])
ls 16040 2152149.005835: cycles:          c11777c1  ([kernel.kallsyms])
ls 16040 2152149.005842: cycles:          c10702a8  ([kernel.kallsyms])
...

您需要编写一个脚本,该脚本从该输出获取一串行,并计算该集合中“周期”和“指令”事件的数量.您可以通过更改录制命令中的参数-c 10000来调整分辨率.

我通过针对ls /运行perf stat和perf记录来验证分析. Stat报告了2 634 205个周期,1 725 255个指令,而脚本输出具有410个周期事件和189个指令事件. -c值越小,循环读取中的开销就越大.

还有一个-F选项来执行记录,定期采样.但是,在使用此选项时,我找不到检索计数器值的方法.

编辑:perf stat显然也适用于pids,并捕获数据直到按下ctrl-c.修改源应该非常容易,因此它总是捕获N秒,然后在循环中运行它.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...