我正在尝试监视正在运行的系统的各种硬件性能计数器,但是似乎当前的 PMC 工具(例如 oprofile 或 perf 工具)只能在程序完成后记录计数器,例如
~>perf record <command>;
~>perf report
仅在目标程序终止后才返回性能记录,我想定期收集这些计数器,就像 vmstat 所做的那样。
编辑:我想收藏硬件性能计数器,例如缓存未命中、指令、分支未命中,这些计数器在现代过程中可用。
答案1
目前看来性能不支持 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
乍一看,sleep 命令的用法有点违反直觉。在这里,perf stat 不会收集特定于 sleep 命令的计数器,相反,sleep 命令只是作为一种方式来告诉 perf stat 收集的持续时间(我从示例中意识到这一点perf 维基) 注意,要收集系统计数器,需要管理权限,因此 perf stat 之前的 sudo 是必要的。
如果你只需要收集特定于正在运行的进程的计数器(例如,pid 2785),那么示例命令是
watch -n 60 perf stat -p 2785 sleep 60
请注意,这次不需要 sudo。
答案2
答案3
不要忘记 collectl。它收集了更多的数据,而且它的输出比 sar 更容易读取。如果你使用 sar,请帮自己一个大忙,将监控间隔设置为 10 秒而不是 10 分钟 - 只有真正的严重问题才会以 10 分钟的粗略速度出现。-mark
答案4
如果您想要记录真正全面的数据,请使用 Performance Co-Pilot。它还有一个不错的 GUI。