微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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秒,然后在循环中运行它.

原文地址:https://www.jb51.cc/linux/393347.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐