qemu本身对动态迁移有丰富的优化项,通过qemu monitor可以查看
(qemu) info migrate_capabilities
xbzrle: off
rdma-pin-all: off
auto-converge: off
zero-blocks: off
compress: off
events: off
postcopy-ram: off
x-colo: off
release-ram: off
block: off
return-path: off
pause-before-switchover: off
x-multifd: off
dirty-bitmaps: off
postcopy-blocktime: off
late-block-activate: off
有部分优化选项比较常见,比如postcopy-ram, compress。查询了一下这些优化项,有些优化项完全没有资料,看来只能看源码来了解它的作用了。接下来会尝试这些优化项并学习其原理,看看它们对于迁移优化的程度。
1. compress
打开compress的选项后,服务器会在迁移前对ram中的数据做压缩,在测试中,压缩的比率差异很大,从10%到80%,对于带宽不足的虚拟机迁移效率提升有所帮助。但是做压缩的时候会对cpu有额外的消耗,并且压缩也会耗时,所以在带宽足够大的情况下,迁移前进行压缩反而会导致动态迁移时间变长。
可以开启压缩和解压的多线程,可以加速压缩的速率,默认情况下配置的是compress 8 threads, decompress 2 threads,由于用的压缩算法是zlib,压缩和解压的速率差4倍,所以配置多线程时建议压缩线程数是解压线程数的四倍。
此外,可以对压缩的比率和压缩速度进行调节。level 0代表不压缩,level 1代表压缩速度最快但是压缩比率最低,level 9代表压缩比率最高,但是相应压缩速度也最慢。
虚拟机中模拟内存占用,脚本
[root@localhost ~]# cat make_cache_2.2G.sh
#!/bin/bash -x
mount -t ramfs ramfs z/
cp 800m_file z/1
cp 800m_file z/2
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 4.9G 180M 2.5G 11M 2.2G 4.0G
Swap: 4.0G 0B 4.0G
把两个800m的文件放到ramfs中,可以看到memory中buff/cache已经上升到了2.2G
在qemu monitor 中配置
源端服务器