QEMU-KVM中的多線程壓縮遷移技術

導讀 目前的遷移技術,都是經過向QEMUFILE中直接寫入裸內存數據來達到傳送虛擬機的目的端,這種狀況下,發送的數據量大,從而會致使更高的遷移時間(total time)和黑宕時間(downtime)。本文介紹的方法,在發送前對客戶機內存進行壓縮,在目的端接收到內存後,進行對數據進行解壓縮,從而恢復客戶機的內存。

1.技術原理linux

使用帶壓縮技術的遷移後,傳輸的數據總量會減小60%,總遷移時間減小70%+,同時宕機時間減小50%以上。一方面,壓縮/解壓縮的過程會消耗CPU週期而加大了遷移的時間;另外一方面,總傳輸數據量的銳減,又會減小遷移時間。爲了可以進行高速的壓縮,本技術中使用了多線程併發的方式,提升壓縮的目前虛擬機中,使用ZLIB完成壓縮/解壓縮的工做。算法

在CPU相同的狀況下,ZLIB官方給出,解壓縮的速度是壓縮速度的4倍。也就是說,若是遷移的源端和目的端處理器相同的狀況下,使得壓縮線程數量是解壓縮線程數量的4倍就能夠在資源消耗最小的狀況下,取得最優的壓縮爲了更多的適應網絡情況,虛擬機中引入了壓縮級別 -- Compression level。Compression level能夠用來控制壓縮速率和壓縮比例。高的壓縮比率會消耗更多的時間,level 0就表明不進行壓縮, 1級表明最優的壓縮速率, 9級表明了最好的壓縮比率(最多的壓縮時間)。咱們能夠選擇從0級到9級中的任意一個級別。網絡

2. 多線程壓縮動態遷移技術的應用場景多線程

壓縮/解壓縮時間將會消耗CPU週期。因此,若是整個系統CPU都被壓得很是滿的狀況下,避免使用這個特性。當網絡帶寬有限,CPU資源又足夠充足的狀況下,使用多線程壓縮動態遷移技術會帶來比較好的效果。當網絡充足且CPU資源充足的狀況下,使用本技術也將會減小總遷移時間。併發

3. 多線程壓縮遷移技術使能方法tcp

源端:ide

1. 啓動虛擬機函數

/home/liufeng/qemu-system-x86_64 -machine accel=kvm -hda ./disk0.img -m 2048 -vnc 192.168.2.106:0 -monitor stdio

2. 使能源端多線程壓縮動態遷移技術測試

a.) migrate_set_capabilitycompress on //使能壓縮
b.) migrate_set_parametercompress-threads 12 //12個壓縮線程
c.) migrate_set_parametercompress-level 1 //壓縮級別爲1級

3. 開始遷移優化

migrate -d tcp:192.168.2.105:6666

目的端:

1. 啓動虛擬機

/home/liufeng/qemu-system-x86_64 -machine accel=kvm -hda /home/kvm/vm/disk/disk0.img -m 2048 -vnc 192.168.2.105:0 -monitor stdio -incoming tcp:192.168.2.105:6666

2. 使能目的端多線程壓縮動態遷移技術

a.) migrate_set_capabilitycompress on
b.) migrate_set_parametercompress-level 1
c.) migrate_set_parameterdecompress-threads 3 //3個壓縮線程

3. 等待遷移完成

4. 效果驗證

運行環境:

CPU: Intel(R) Xeon(R) CPU E5-2650 v3 @2.30GHz
Logic core: 40
Socket : 2
RAM: 128G
NIC: 1000baseT/Full
Host OS: CentOSLinux release 7.2.1511 (Core) 64-bit
Guest OS: CentOS Linux release 7.2.1511 (Core) 64-bit

a. 狀況一:帶寬無限制,CPU充足


原動態遷移 多線程壓縮技術動態遷移


壓縮級別:    1

壓縮線程數:  12

解壓縮線程數:3

遷移總時間(msec): 9536 4466
Downtime時間(msec): 34 22
傳輸數據量(KB) 307783 140445

效果:總的遷移時間減小50%;downtime時間減小35%

b. 狀況二:帶寬有限制狀況,CPU充足


原動態遷移 多線程壓縮技術動態遷移


壓縮級別:    1

壓縮線程數:  12

解壓縮線程數:3

遷移總時間(msec): 11720 5652
Downtime時間(msec): 169 21
傳輸數據量(KB) 311554 140189

效果:總遷移時間減小了200%,downtime時間減小了800%

5. 代碼實現分析

虛擬機實現代碼分析以下(本分析基於:QEMU 2.5):

1. 在啓動migration過程當中,若是發現使能了多線程壓縮技術,則建立壓縮線程

migration,壓縮1

2. 遷移開始後,使用多線程壓縮技術

有migration_thread()進行遷移工做,在iterator和complete階段,若是發現使能了多線程壓縮技術,則經過compress_page_with_multi_thread()完成數據的壓縮和發送
migration-thread1

3. 經過zlib的compress2()函數完成數據的壓縮,並經過QEMU-FILE發送

最終在compress_page_with_multi_thread()中激活壓縮線程,經過zlib的compress2()函數完成數據的壓縮,並經過QEMU-FILE發送
thread qemu1

6. 可優化點

1. 壓縮算法

a. 目前使用的是開源zlib庫完成壓縮,還有其餘壓縮庫的壓縮方式能夠提供,以便適應更多的場景

b. 商業壓縮庫有着更好的效率

c. 經過FPGA進行硬件輔助壓縮

2. 壓縮策略

a. 虛擬機遷移算法自適應全部網絡,對網絡進行測試(是否知足上面的公式),而後造成反饋因子輸入到遷移算法中,遷移算法根據反饋因子決定使用的壓縮算法、壓縮級別或者根本不壓縮,達到在全部網絡情況下而縮短downtime的目的。

本文轉載自:http://www.linuxprobe.com/qemu-kvm-migration
免費提供最新Linux技術教程書籍,爲開源技術愛好者努力作得更多更好:spacer.gifhttp://www.linuxprobe.com/

相關文章
相關標籤/搜索