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

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

我正在尝试监视正在运行的系统的各种硬件性能计数器,但是似乎当前的 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

我发现特区是满足我监控 Linux 系统需求的一种简单方法。它会定期收集许多事物的统计数据,您可以让 cron 定期向您发送电子邮件,其中包含您可以处理的结果表。

如果你需要监控更多系统,或者想要精美的图表或警报,你可能会看到类似仙人掌或者纳吉奥斯

答案3

不要忘记 collectl。它收集了更多的数据,而且它的输出比 sar 更容易读取。如果你使用 sar,请帮自己一个大忙,将监控间隔设置为 10 秒而不是 10 分钟 - 只有真正的严重问题才会以 10 分钟的粗略速度出现。-mark

答案4

如果您想要记录真正全面的数据,请使用 Performance Co-Pilot。它还有一个不错的 GUI。

相关内容