perf stat 无法直接画图,但可通过 -i 间隔模式导出时间序列数据;cachestat 统计 page cache 而非 cpu cache;likwid-perfctr 支持原生周期采样导出 csv;perf record 则用于函数级归因分析。

perf stat 无法直接画图,但能导出数据点
Linux 内核没有内置的「缓存命中率走势图」功能,perf stat 本身只输出单次采样汇总值,不带时间轴。想得到走势图,本质是「按固定间隔反复采集 + 后续绘图」。最轻量的做法是用 perf stat -I(interval 模式):它会在每个间隔结束时输出一行统计,天然适配时间序列。
-
perf stat -I 1000 -e LLC-load-misses,LLC-loads -C 7:每 1000ms 输出一次 CPU7 的 LLC 加载未命中/总加载数,持续运行直到 Ctrl+C - 输出形如
1.000000000 123456 789012(时间戳、misses、loads),可直接重定向到 CSV 文件 - 注意:
-I模式下cache-references/cache-misses这类通用事件可能不准,优先用具体层级事件如LLC-loads - 如果目标进程生命周期短,改用
perf stat -I 1000 -e ... -- <command></command>,避免采样窗口错位
cachestat 输出的是 page cache,不是 CPU cache
很多人误以为 cachestat 能看 L1/L2/L3 命中率,其实它统计的是内核 page cache(即文件系统缓存)的读写命中,和 CPU 缓存完全无关。它的 HITS/MISSES 来自 page-fault 和 page-reclaim 路径,对 CPU 缓存优化没参考价值。
- 运行
cachestat 1 5看到的是每秒 page cache 命中次数,单位是「次」,不是百分比 - 要算 page cache 命中率,得自己用
HITS / (HITS + MISSES),且仅反映文件 I/O 层面效率 - 如果你关注的是
l3-victim-chase这类微基准测试的缓存行为,cachestat完全不适用
用 likwid-perfctr 实时抓取并导出 CSV
likwid-perfctr 是少数能原生支持周期性采样并输出结构化数据的工具,比手写 perf 循环脚本更稳,尤其适合长时间监控 CPU 缓存指标。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
likwid-perfctr -C 7 -g CACHE -csv -o cache.csv -d 1000 ./l3-victim-chase --size-bytes 393216:每 1000ms 记录一次 CPU7 的 CACHE 组事件(含 L1/L2/L3 各项 load/store 及 miss),结果直接存为 CSV -
-g CACHE包含的事件组已预设合理组合,无需手动拼-e参数;不同 CPU 架构(Intel/AMD)事件名自动适配 - 生成的
cache.csv第一列是毫秒级时间戳,后续各列对应事件计数,用 Python 或 gnuplot 可直接绘图 - 注意:必须用
-d(delay)而非-t(time),否则只采样一次就退出
别忽略 perf record 的函数级归因价值
单纯看「整体命中率走势图」容易掩盖热点位置——比如命中率稳定在 85%,但某几个函数贡献了 90% 的 LLC-load-misses。这时候 perf record + perf report 比走势图更有诊断意义。
-
perf record -e LLC-load-misses -C 7 -g -- sleep 60:采集 60 秒调用栈级别的 LLC 未命中事件 -
perf report --no-children -n | head -20:列出未命中次数最多的前 20 个函数(-n显示次数,--no-children避免内联函数干扰) - 如果发现某个循环里
array[i * stride]频繁 miss,走势图再平滑也没用——得改访存模式 - 走势图适合看趋势异常(如某时刻命中率骤降),但根因定位必须回到函数/指令粒度
真正难的不是画出那条线,而是确认横轴时间单位是否对齐你的 workload 周期,以及纵轴用的是 raw count 还是归一化后的 % —— 同一组数据,用 LLC-load-misses / LLC-loads 算出的比率,和用 LLC-load-misses / (LLC-loads + LLC-stores) 算出的,物理含义完全不同。










