0

我想用轻量级 CPU 以全系统 (FS) 模式启动 Linux 内核以节省时间,在启动完成后创建一个检查点,然后用更详细的 CPU 恢复检查点以研究基准,如:http: //gem5.org/Checkpoints

但是,当我尝试使用时,-r 1 --restore-with-cpu=我无法观察到新旧 CPU 之间的周期差异。

我正在研究的衡量标准是缓存大小如何影响基准运行所需的周期数。

我正在使用的设置在以下位置进行了详细描述:为什么 Linux 内核在完整系统模式下看不到 gem5 模拟器中的缓存大小?我正在查看循环计数,因为目前我无法直接使用 Linux 内核查看缓存大小。

例如,如果我使用HPI带有命令(摘录)的详细而缓慢的模型从头开始启动 Linux 内核:

./build/ARM/gem5.opt --cpu-type=HPI --caches --l1d_size=1024 --l1i_size=1024 --l2cache --l2_size=1024 --l3_size=1024 

然后更改缓存大小,随着缓存大小按预期变好,基准测试确实变得更快。

但是,如果我第一次启动时不--cpu-type=HPI使用 ,它使用更快的AtomicSimpleCPU模型:

./build/ARM/gem5.opt --caches --l1d_size=1024 --l1i_size=1024 --l2cache --l2_size=1024 --l3_size=1024

然后我创建检查点m5 checkpoint并尝试恢复更快的 CPU:

./build/ARM/gem5.opt --restore-with-cpu=HPI -r 1  --caches --l1d_size=1024 --l1i_size=1024 --l2cache --l2_size=1024 --l3_size=1024

然后更改缓存大小没有区别:我总是得到与 相同的循环计数AtomicSimpleCPU,表明修改后的还原不成功。

如果我尝试从 x86 切换AtomicSimpleCPUDerivO3CPU.

邮件列表中相关的旧线程:http: //thread.gmane.org/gmane.comp.emulators.m5.users/14395

测试于:fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4

4

3 回答 3

1

--cpu-type=影响恢复,但--restore-with-cpu=没有

我不确定为什么会这样,但我已经凭经验验证了如果我这样做:

-r 1 --cpu-type=HPI

然后正如预期的那样,缓存大小选项开始影响周期计数:更大的缓存导致更少的周期。

还要记住,缓存影响AtomicSimpleCPU不大,拥有它们也没有多大意义。

--restore-with-cpu=TODO那么--cpu-type如果它在我的测试中似乎没有做任何事情有什么意义呢?

除非让我感到困惑,因为如果--cpu-type != --restore-with-cpu,那么循环计数出现在system.switch_cpus.numCycles而不是system.cpu.numCycles

我相信这是正在发生的事情(但未经测试):

  • switch_cpu包含您切换到的 CPU 的统计信息
  • 当你设置时--restore-with-cpu= != --cpu-type,它认为你已经从一开始就切换了 CPU
  • --restore-with-cpu对初始 CPU 没有影响。它只对在运行期间切换 CPU 的选项很重要,例如 --fast-forward--repeat_switch。这是您将看到 cpu 和 switch_cpu 数据都被填满的地方。

TODO:另外,如果我使用或删除--restore-with-cpu=,会有 1% 的小循环差异。但为什么有区别呢?AtomicSimpleCPU周期计数是完全不同的,所以它一定不能回落到它。

--cpu-type=vs--restore-with-cpu=出现在fs.py --fast-forwardhttps ://www.mail-archive.com/gem5-users@gem5.org/msg17418.html

确认日志记录发生了什么

正在使用 CPU 想要的一种良好的理智是启用一些日志记录,如下所示:https ://github.com/cirosantilli/linux-kernel-module-cheat/tree/bab029f60656913b5dea629a220ae593cc16147d#gem5-restore-checkpoint-with -a-different-cpu例如:

--debug-flags ExecAll,FmtFlag,O3CPU,SimpleCPU

看看你是否开始收到O3消息而不是消息SimpleCPU

于 2018-04-05T13:11:08.283 回答
1

通过阅读一些代码,我相信 --restore-with-cpu 专门用于使用不是 AtomicCPU 的 CPU 模型创建检查点的情况。脚本假定 AtomicCPU 用于创建检查点。我认为在恢复时,具有与检查点系统相同的 cpu 模型很重要,如果您使用 --cpu-type 提供另一个模型,那么它会在恢复操作完成后切换到该模型。

http://gem5.org/Checkpoints#Sampling有一些关于切换 CPU 型号的(小)细节

于 2018-05-24T14:13:19.490 回答
1

首先,对于您的问题,我看不出循环计数如何指示恢复结果。无论您要切换哪个 CPU,恢复的周期都应该相同。切换不会改变过去的周期。创建检查点时,您基本上将模拟冻结在该状态。切换 CPU 只是更改 CPU 的所有参数,同时保持刻度不变。这就像热交换 CPU。

要正确验证还原,您应该保留还原前的副本,config.json并将其与还原后的新副本进行比较。AtomicSimpleCPU对于 X86 情况,我只能在还原之前在那里找到字符串。

此外,只有--cpu-type将确定正在切换的 CPU。但它并没有变得--restore-with-cpu无用。事实上,--restore-with-cpu应该只在您使用非AtomicSimpleCPU. 大多数人希望启动系统AtomicSimpleCPU并设置检查点,因为它更快。但是如果你错误地使用DerivO3CPU, 来恢复这个特定的检查点,你必须配置--restore-with-cpuDerivO3CPU. 否则,它将失败。

于 2018-08-29T00:59:44.133 回答