CPU/内存监视器

因为最近要做实验实时监测CPU还有内存的性能,找了非常久才找到符合我要求的工具,特此记录。

perf

这个应该是应用最为广泛的Linux内核下的性能监测器,测的内容很多,官方文档也很详实,但是其生成的数据比较难以使用。

一般Linux内核都会内置,不用安装。 通过perf list获取可用指令。

使用方法:

perf stat -e L1-dcache-loads <command>

同时支持C++及可视化FlameGraph

Processor Counter Monitor (PCM)

Intel家的东西,但是现在似乎已经不作为Intel管辖的软件,只是在Github上偶尔还有更新。 PCM自称操作比perf的操作更加底层,所以能获得更精确的性能监测*

虽然几乎没有文档,但是实际上操作非常简易,且能够完全满足我的需求。

操作方法如下

  • git clone一下
  • Linux环境直接make
  • 编译完后在项目根目录会产生几个.x后缀的文件,这几个就是可执行文件了
  • 运行--help即可获得命令行指令说明

比较常用的几个设施(都可以在它们Github首页上找到):

  • pcm:CPU、cache
  • pcm-memory:内存带宽(每频道及每个DRAM DIMM槽)
  • pcm-latency:L1 cahce
  • pcm-pcie:PCIe
  • pcm-numa:NUMA架构
  • pcm-power:能耗

使用实例:0.1秒监测一次,结果输出为test.csv文件

sudo ./pcm.x 0.1 -csv=test.csv --external-program Test

可能遇到的问题

  • 没有权限:注意每句指令都要加sudo以及见Intel PCM in userspace Linux
    Try to execute 'modprobe msr' as root user and then
    you also must have read and write permissions for /dev/cpu/*/msr devices (/dev/msr* for Android). The 'chown' command can help.
    Access to Intel(r) Performance Counter Monitor has denied (no MSR or PCI CFG space access).
    
  • API文档

VTune

这个也是Intel家的东西,有GUI,比较麻烦就是还要安装,并且对输出数据似乎也不是很友好。

Non-real-time

Achieving maximum memory bandwidth