我想在我的 gem5 模拟器中使用缓存大小,看看它如何影响程序的性能,并可能在运行时调整程序。
作为健全性检查,我尝试检查我使用的命令行参数是否正常工作,因此我尝试了以下建议的各种方法:https ://superuser.com/questions/55776/finding-l2-cache-size-in -linux/1298808#1298808
cat /sys/devices/system/cpu/cpu0/cache/index2/size
getconf LEVEL2_CACHE_SIZE
但我观察到:
- 该文件
/sys/devices/system/cpu/cpu0/cache/index2/size
不存在 getconf
是空的
这是为什么?
但是我确信缓存是存在的,因为我已经对简单程序进行了基准测试,并且当我减少缓存时循环计数会增加。
例如,我的基本命令是:
M5_PATH='/data/git/linux-kernel-module-cheat/gem5/gem5-system' '/data/git/linux-kernel-module-cheat/gem5/gem5/build/ARM/gem5.opt' '/data/git/linux-kernel-module-cheat/gem5/gem5/configs/example/fs.py' --command-line='earlyprintk=pl011,0x1c090000 console=ttyAMA0 lpj=19988480 rw loglevel=8 mem=512MB root=/dev/sda nokaslr norandmaps printk.devkmsg=on printk.time=y' --disk-image='/data/git/linux-kernel-module-cheat/buildroot/output.arm-gem5~/images/rootfs.ext2' --dtb-file='/data/git/linux-kernel-module-cheat/gem5/gem5/system/arm/dt/armv7_gem5_v1_1cpu.dtb' --kernel='/data/git/linux-kernel-module-cheat/buildroot/output.arm-gem5~/build/linux-custom/vmlinux' --machine-type=VExpress_GEM5_V1 --num-cpus=1 --caches --l1d_size=1024 --l1i_size=1024 --l2cache --l2_size=1024 --l3_size=1024 --cpu-type=HPI
使用这些微小的缓存,运行以下命令:
m5 resetstats && dhrystone 10000 && m5 dumpstats
需要 175M 周期,如果我使用完全相同的命令但具有大量大小的缓存,则只需 16M 周期1024MB
。
我观察到 x86 的类似行为。
我正在使用这个测试基础设施:https ://github.com/cirosantilli/linux-kernel-module-cheat/tree/05d8a324f74849f03404eb847f8da748e2e4502c#gem5-change-system-parameters这意味着:
- gem5 提交:fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4
- Linux 内核 v4.15 配置:https ://github.com/cirosantilli/linux-kernel-module-cheat/blob/05d8a324f74849f03404eb847f8da748e2e4502c/kernel_config_arm-gem5
邮件列表上的相关线程:http: //gem5-users.gem5.narkive.com/4xVBlf3c/verify-cache-configuration
作为比较,QEMU v2.11.0 x86 确实显示了缓存大小,但没有显示 ARM 的。
也许对于 ARM,我们需要修改引导加载程序以将其告知内核?但我不知道这些东西如何运作得很好: