我希望使用轻量级CPU以完整系统(FS)模式启动Linux内核以节省时间,在启动完成后创建检查点,然后使用更详细的CPU恢复检查点以研究基准测试,如上所述:http://gem5.org/Checkpoints
但是,当我尝试使用-r 1 --restore-with-cpu=
时,我无法观察到新旧CPU之间的周期差异。
我正在考虑的措施是缓存大小如何影响基准运行所需的周期数。
我正在使用的设置详见:Why doesn't the Linux kernel see the cache sizes in the gem5 emulator in full system mode?我正在查看循环计数,因为我目前无法直接使用Linux内核查看缓存大小。< / p>
例如,如果我使用带有命令的详细而缓慢的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
然后我用./build/ARM/gem5.opt --restore-with-cpu=HPI -r 1 --caches --l1d_size=1024 --l1i_size=1024 --l2cache --l2_size=1024 --l3_size=1024
创建检查点并尝试恢复更快的CPU:
AtomicSimpleCPU
然后更改缓存大小没有区别:我总是得到与AtomicSimpleCPU
相同的循环计数,表明修改后的恢复不成功。
如果我尝试从DerivO3CPU
切换到update(hospital: Hospital): Promise<Hospital> {
hospital.name=‘’;
const url =`${this.hospitalsUrl}/${hospital.id}`;
return this.http.put(url, JSON.stringify(hospital), {headers: this.headers})
.toPromise()
.then(() => hospital);
,则类似于x86。
邮件列表中的相关旧帖子:http://thread.gmane.org/gmane.comp.emulators.m5.users/14395
测试时间:fbe63074e3a8128bdbe1a5e8f6509c565a3abbd4
答案 0 :(得分:1)
通过阅读一些代码我相信--restore-with-cpu特别适用于使用不是AtomicCPU的CPU模型创建检查点的情况。脚本假定AtomicCPU用于创建检查点。我认为在恢复时重要的是拥有与系统检查点相同的cpu模型,如果你给另一个带有--cpu-type的模型,那么它在恢复操作完成后切换到该模型。
http://gem5.org/Checkpoints#Sampling有关于切换cpu模型的一些(小)细节
答案 1 :(得分:0)
--cpu-type=
影响了恢复,但--restore-with-cpu=
没有
我不确定为什么会这样,但我有empirically verified如果我这样做:
-r 1 --cpu-type=HPI
然后正如预期的那样,缓存大小选项开始影响循环计数:更大的缓存会导致更少的循环。
另请注意,缓存不会对AtomicSimpleCPU
造成太大影响,并且没有太多意义。
TODO那么--restore-with-cpu=
vs --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
循环计数完全不同,所以它不能再落后于它。
答案 2 :(得分:0)
首先,对于您的问题,我不认为周期计数如何指示恢复结果。无论您要切换哪个CPU,要恢复的周期都应该相同。切换不会改变过去的周期。创建检查点时,基本上可以将模拟冻结在该状态。切换CPU只需更改CPU的所有参数,同时保持刻度不变。就像热插拔CPU。
要正确地验证还原,您应在还原前保留一份config.json
的副本,并将其与还原后的新副本进行比较。对于X86情况,我只能在还原之前在此找到字符串AtomicSimpleCPU
。
此外,只有--cpu-type
将确定要切换的CPU。但这不会使--restore-with-cpu
变得无用。实际上,--restore-with-cpu
仅应在使用AtomicSimpleCPU
以外的CPU引导系统时使用。大多数人都希望使用AtomicSimpleCPU
来启动系统并进行检查,因为它更快。但是,如果您错误地使用DerivO3CPU
进行启动以还原此特定检查点,则必须将--restore-with-cpu
配置为DerivO3CPU
。否则,它将失败。