今天介绍一个比较小众的优化项,auto-converge。
通过上面两节优化可以了解到,对于动态迁移来说,dirty page的生成速度影响了动态迁移的速度,如果dirty page生成速度过快,带宽又不够大,动态迁移就会处在一直无法完成的状态。
为了克服这个问题,有两个角度,第一是尽快把新产生的dirty page 传输到目的服务器,让传输速度大于dirty page生成速度,从而让动态迁移顺利完成;第二是让dirty page生成速度变慢,这样也能够使得动态迁移完成。auto-converge就是用了第二种方法帮助完成动态迁移。
把auto-converge打开后,当进行动态迁移时,qemu会降低虚拟机的运行速度,从而减少写内存的操作,这样使得dirty page生成速度降低。auto-converage会不断增加vcpu的限制(最多到99%),直到迁移成功。
auto-converage 包含两个可调参量:
cpu-throttle-initial: 初始降低vcpu性能的百分比,默认值是20%。
cpu-throttle-increment:如果迁移不成功,每次增加对vcpu性能的限制百分比,默认值是10%。
setting
r/w load 2G
#########################################################################################
1g | downtime default | auto-converge on | completed
-----------------------------------------------------------------------------------------
Migration status: active
total time: 219188 milliseconds
expected downtime: 9998 milliseconds
setup: 7 milliseconds
transferred ram: 24759143 kbytes
throughput: 973.26 mbps
remaining ram: 1105408 kbytes
total ram: 5374400 kbytes
duplicate: 58527 pages
skipped: 0 pages
normal: 386806 pages
normal bytes: 24755584 kbytes
dirty sync count: 14
page size: 64 kbytes
multifd bytes: 0 kbytes
dirty pages rate: 2219 pages
cpu throttle percentage: 99
从上面可以看到info migrate多了一个参数 cpu throttle percentage,这就是现在vcpu被限制的性能百分比。
开启这个功能后,成功把进行2g高速内存读写的虚拟机动态迁移到另外一台服务器上了。
当然这个功能的缺点也很明显,限制了虚拟机的性能,尤其是当cpu throttle percentage达到99%,基本和死机差不多,这对于用户体验的影响很大。但是也可以考虑和别的动态迁移优化手段一同使用,开源的同时节流,无疑能让动态迁移更快的完成。