呈现为 qemu-kvm 进程的 KVM 虚拟机。在某些情况下,如果我们想克隆虚拟机,为什么不使用 fork?如我所见,至少有两个优点:
- sub VM 将与copy-on-write共享内存,减少内存消耗。
- 使用写时复制即时克隆虚拟机
当然,还有一些问题需要解决,比如
- 设计磁盘写入时复制以共享主 VM 映像文件。
- 重定向子虚拟机 IO。
呈现为 qemu-kvm 进程的 KVM 虚拟机。在某些情况下,如果我们想克隆虚拟机,为什么不使用 fork?如我所见,至少有两个优点:
当然,还有一些问题需要解决,比如
如果您在没有内核级虚拟化的情况下运行 VM(换句话说,您正在使用 QEMU 仿真),那么这可能只是工作,除了您提到的重复 I/O 的所有问题。您可以通过在“-snapshot”模式下运行 VM 来解决磁盘问题。同样,如果您的虚拟机是无头的(没有视频仿真),那也没关系。唯一剩下的问题是重复的网络。
如果您希望这可以与真正的 KVM 虚拟机一起使用,那么我认为您会很不幸。
即使你能做到,我也不确定你会得到你想象的优势。如果您独立启动两个 VM(或任何其他应用程序),那么它们将已经为它们打开的任何文件共享内存(显然它们只能真正共享只读文件)。这包括只读磁盘安装、KVM/QEMU 可执行文件和库本身,以及他们需要的任何其他内容。您将在您的方案中获得的唯一额外共享是数据表,然后只有在您的分叉之前使用的那些,并且这种共享将相对较短,因为对该数据的任何更新都会导致写入时复制。(实际上,这可能是 QEMU 在外国架构中的胜利,其中有大量缓存的 JIT 生成的可执行代码,但我认为这不是您所指的。)