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

  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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值