几种方法可以查看缓存命中率统计

  1. 使用现有的 cache-stat 工具

你的配置中已经使用了 /usr/local/bin/cache-stat 工具,它会输出到 CSV 文件:

查看测试CPU(CPU7)的缓存统计

cat /tmp/aggr_strong_n2_c0/perf-iso.csv

查看压力CPU(CPU0-6)的缓存统计

cat /tmp/aggr_strong_n2_c0/perf-hk.csv

这个工具通常会输出以下指标:

• LLC(最后一级缓存)命中率

• L1/L2 缓存命中率

• 缓存未命中率

• 内存带宽使用情况

  1. 使用 perf 工具(最常用)

Linux 自带的 perf 工具可以详细监控缓存事件:

基本缓存统计

监控CPU7的缓存事件

perf stat -e cache-references,cache-misses -C 7 sleep 10

监控所有CPU的缓存事件

perf stat -e cache-references,cache-misses -a sleep 10

详细缓存事件监控

监控LLC(L3缓存)事件

perf stat -e LLC-loads,LLC-load-misses,LLC-stores,LLC-store-misses -C 7 sleep 10

监控L1和L2缓存事件

perf stat -e L1-dcache-loads,L1-dcache-load-misses,L1-dcache-stores

-e L1-icache-load-misses

-e dTLB-loads,dTLB-load-misses

-C 7 sleep 10

实时监控你的测试程序

方法1:监控整个进程

perf stat -e cache-references,cache-misses

taskset -c 7 /usr/local/bin/l3-victim-chase --size-bytes 393216 --duration 120 --stride 64 --mlock

方法2:附加到运行中的进程

perf stat -e cache-references,cache-misses -p

  1. 使用 perf record 进行详细分析

记录缓存事件

perf record -e cache-misses -C 7 -o perf.data sleep 120

分析记录的数据

perf report -i perf.data

查看函数级别的缓存未命中

perf annotate -i perf.data

  1. 使用 Intel PCM 工具(针对Intel CPU)

如果你的系统是Intel CPU,可以使用 Intel Performance Counter Monitor:

安装(如果可用)

sudo apt-get install pcm

监控所有CPU的缓存

sudo pcm -csv=output.csv

只监控CPU7

sudo pcm -core=7

  1. 使用 likwid 工具

安装

sudo apt-get install likwid

监控缓存命中率

likwid-perfctr -C 7 -g CACHE -m ./l3-victim-chase 参数

  1. 直接读取内核性能计数器

查看可用的性能事件

perf list | grep cache

查看特定事件的计数器

sudo perf stat -e r412e -C 7 sleep 1 # L1-dcache-load-misses

针对你的测试配置的建议监控脚本

创建一个监控脚本 monitor_cache.sh:

#!/bin/bash

监控CPU7的缓存统计

echo "=== 监控测试CPU (CPU7) ==="

perf stat -e cache-references,cache-misses,LLC-loads,LLC-load-misses

-e L1-dcache-loads,L1-dcache-load-misses

-C 7 sleep 120 2>&1 | tee /tmp/cpu7_cache_stats.txt

监控压力CPU (CPU0-6) 的缓存统计

echo -e "\n=== 监控压力CPU (CPU0-6) ==="

perf stat -e cache-references,cache-misses,LLC-loads,LLC-load-misses

-e L1-dcache-loads,L1-dcache-load-misses

-C 0-6 sleep 120 2>&1 | tee /tmp/cpu0-6_cache_stats.txt

计算命中率

echo -e "\n=== 缓存命中率统计 ==="

awk '/cache-references/ {ref=1} /cache-misses/ {miss=1} END {

if(ref>0) printf("总体缓存命中率: %.2f%%\n", (1-miss/ref)*100)}'

/tmp/cpu7_cache_stats.txt

awk '/LLC-loads/ {loads=1} /LLC-load-misses/ {miss=1} END {

if(loads>0) printf("LLC加载命中率: %.2f%%\n", (1-miss/loads)*100)}'

/tmp/cpu7_cache_stats.txt

  1. 使用可视化工具

使用 perf 和 flamegraph

记录缓存未命中

perf record -e cache-misses -g -C 7 -o cache_misses.data sleep 120

生成火焰图

perf script -i cache_misses.data | stackcollapse-perf.pl | flamegraph.pl > cache_misses.svg

使用 sar 监控系统缓存

安装sysstat

sudo apt-get install sysstat

监控缓存使用

sar -r 1 120 # 监控内存和缓存使用

sar -B 1 120 # 监控页面交换和缓存效率

关键指标解释

  1. 缓存命中率计算公式:

    命中率 = (1 - 未命中次数 / 总访问次数) × 100%

  2. 重要指标:

    • cache-references:缓存总访问次数

    • cache-misses:缓存未命中次数

    • LLC-loads:最后一级缓存加载次数

    • LLC-load-misses:LLC加载未命中次数

  3. 典型值:

    • L1缓存命中率:通常 > 95%

    • L2缓存命中率:通常 > 90%

    • LLC命中率:通常 > 80%

    • 低于这些值可能表示缓存竞争严重

建议的完整监控命令

对于你的测试场景,建议运行:

在测试开始前运行这个监控

perf stat -e cache-references,cache-misses

-e LLC-loads,LLC-load-misses

-e L1-dcache-loads,L1-dcache-load-misses

-C 7,0-6 --interval-print 1000

taskset -c 7 /usr/local/bin/l3-victim-chase --size-bytes 393216 --duration 120 --stride 64 --mlock

这样你可以实时看到每秒的缓存统计变化,更好地分析缓存竞争情况。