如何在Linux中定期收集硬件性能计数器?

我试图监视正在运行的系统的各种硬件性能计数器,但是似乎当前的PMC工具,例如oprofile或perf工具只能在程序结束后logging计数器,例如~>perf record <command>;

~>perf report

只有在目标程序终止之后,perflogging才会返回,我想定期收集这些计数器,比如vmstat。

编辑:我想收集硬件性能计数器 ,例如caching未命中,指令,分支未命中,这些计数器在现代stream程中可用。

目前的perf似乎不支持Sar风格的输出。 但是在watch命令的帮助下,可以进行非常接近的仿真。

要定期为整个系统收集计数器,请使用'-a'选项。 以下是每60秒报告一般硬件性能计数器的示例

 watch -n 60 sudo perf stat -a sleep 60 

它给出了输出

 Every 10.0s: sudo perf stat -a sleep 10 Wed May 11 11:19:36 2011 Performance counter stats for 'sleep 10': 19956.091380 task-clock-msecs # 1.995 CPUs 26802 context-switches # 0.001 M/sec 1871 CPU-migrations # 0.000 M/sec 951 page-faults # 0.000 M/sec 4582605668 cycles # 229.634 M/sec (scaled from 69.93%) 1993617795 instructions # 0.435 IPC (scaled from 81.07%) 374028141 branches # 18.743 M/sec (scaled from 81.34%) 19071123 branch-misses # 5.099 % (scaled from 79.77%) 100724660 cache-references # 5.047 M/sec (scaled from 18.66%) 5461106 cache-misses # 0.274 M/sec (scaled from 20.23%) 10.001116547 seconds time elapsed 

乍一看,睡眠指令的使用有点直观。 这里的perf stat不会收集特定于睡眠命令的计数器,而是sleep命令只是作为一种方式来告诉perf stat收集的持续时间(我知道从perf wiki的例子中)注意到收集系统明智的计数器,pipe理特权是必需的,所以sudo stat之前的sudo是必要的。

如果您只需要收集特定于正在运行的进程的计数器(例如,用pid 2785),那么就是一个示例命令

 watch -n 60 perf stat -p 2785 sleep 60 

注意这一次,sudo不是必需的。

我发现sar是监视一个linux系统的一个简单的方法。 它会定期收集许多事情的统计信息,并且可以让cron定期向您发送电子邮件,其中包含可以处理的结果表格。

如果你需要监视更多的系统,或者想要花哨的图表或警报,你可以看看像仙人掌或喜怒无常的东西。

别忘了collectl。 收集更多的数据,它的输出比sar更难读。 如果你确实使用sar,那么你自己会有一个很大的好处,把监控时间间隔设置为10秒而不是10分钟 – 只有真正的问题会以10分钟的速度出现。 -标记

如果你想logging非常全面的数据使用Performance Co-Pilot。 还有一个很好的GUI。