Postcopy


先把虚拟机现有的CPU state, registers and, optionally, non-pageable memory(内存中不会进行交换或者移动的内存)等信息传输到目的服务器,不管dirty page,并迅速把虚拟机在目的服务器启动起来。同时,源服务器也会动态的把剩余的memory推送到目的服务器上。但是当虚拟机运行调用到还没传输过来的memory时,会触发page-fault.

postcopy基于userfault机制,可以在用户空间中通过文件描述符fd获得page fault信息。当虚拟机在目的服务器上调用到这些还未传输完成的内存时,userfaultfd可以到源服务器上把这些内存信息取出,并传输到目的服务器上,让虚拟机继续运行。

spacer.gif图片.png

使用postcopy不会受虚机对内存io的压力影响,但迁移完成后如果内存io压力大,会频繁调用userfault,这就会对服务器带宽带来压力,造成虚机性能下降。