为什么Linux内核在完整系统模式下没有看到gem5仿真器中的缓存大小?

时间:2018-02-27 12:31:40

标签: linux-kernel gem5

我想在我的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个周期,如果我使用完全相同的命令但是使用大小为1024MB的巨大缓存,则只需要16M周期。

我观察到x86的类似行为。

我正在使用此测试基础架构:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/05d8a324f74849f03404eb847f8da748e2e4502c#gem5-change-system-parameters这意味着:

邮件列表上的相关主题:http://gem5-users.gem5.narkive.com/4xVBlf3c/verify-cache-configuration

为了进行比较,QEMU v2.11.0 x86确实显示了缓存大小,但没有显示ARM大小。

也许对于ARM,我们需要修改引导加载程序以告诉内核?但我不知道这些事情是如何运作的:

1 个答案:

答案 0 :(得分:0)

我被告知:

  

gem5没有实现缓存大小发现寄存器。

     

问题是在一般情况下很难配置它们,它们甚至可能无法表示gem5中的层次结构。