「KVM」- 在休眠恢复时,出现极高的CPU占用

问题描述

在笔记本运行KVM虚拟机,然后休眠,在恢复时,出现CPU占用极高的现象。
在笔记本睡眠恢复时,在KVM中虚拟机出现CPU使用极高的现象。

原因分析

在休眠唤醒时,客户机的虚拟CPU认为自己错过了一些时间。然后,它会读取很多的数据到内存中,并将“内存”映射到“虚拟机的页偏移”将带来CPU与磁盘错误负载。

虚拟机的“暂停”与“恢复”需要“读取”与“重新映射”整个“内存转储”到“内存”中。

解决办法

所有问题都在于CPU时间上。

在Launchpad的「Bug #1174654」中有人给出了解决方案,但是没有经过严格验证,我也没有测试:

<clock offset='localtime'>
  <timer name='rtc' track='guest'/>
</clock>

!!!我们没有深入研究,这是以个解决方向。

附加说明

回到需求当中,用Docker也可以解决问题(虽然用Linux发行版,但是我不是在Linux中运行Windows虚拟机),只需要在容器中运行systemd进程,然后将容器当作“虚拟机”使用即可。还没有到必须使用虚拟机的地步。

相关链接

!!! Live snapshot revert times increases linearly with snapshot age

参考文献

Why Linux inside KVM gets busy after I put the host to suspend-to-ram?
qemu-system-x86_64 takes 100% CPU after host machine resumed from suspend to ram