使用系统调用fork克隆kvm-vm



KVM虚拟机呈现为qemu-KVM进程。在某些情况下,如果我们想克隆虚拟机,为什么不使用fork呢?正如我所见,至少有两个优点:

  1. 子虚拟机将与写时复制共享内存,减少内存消耗
  2. 使用写入时的副本动态克隆VM

当然,还有一些问题需要解决,比如

  1. 设计一个写时磁盘副本以共享主VM映像文件
  2. 重定向子虚拟机IO

如果您在没有内核级虚拟化的情况下运行VM(换句话说,您使用的是QEMU模拟),那么除了您提到的所有重复I/O问题之外,这可能只是工作。您可能可以通过在"-快照"模式下运行VM来解决磁盘问题。同样,如果你的虚拟机是无头的(没有视频模拟),那也没关系。唯一剩下的问题是重复的网络。

如果你期望这能在真正的KVM虚拟机上工作,那么我认为你会很不幸。

即使你能做到,我也不确定你会得到你想象中的优势。如果您独立启动两个虚拟机(或任何其他应用程序),那么它们将已经为打开的任何文件共享内存(显然它们只能真正共享只读文件)。这包括只读磁盘装载、KVM/QEMU可执行文件和库本身,以及它们所需要的任何其他内容。在你的方案中,你唯一能得到的额外共享是数据表,然后只有在你的分叉之前使用的数据表,这种共享相对来说是短暂的,因为对这些数据的任何更新都会导致写时复制。(事实上,这可能是一个外国架构的QEMU的胜利,那里有大量缓存的JIT生成的可执行代码,但我不认为这是你所指的。)

最新更新