QEMU-KVM中的多线程压缩迁移技术
| 導讀 | 目前的遷移技術,都是通過向QEMUFILE中直接寫入裸內(nèi)存數(shù)據(jù)來達到傳送虛擬機的目的端,這種情況下,發(fā)送的數(shù)據(jù)量大,從而會導致更高的遷移時間(total time)和黑宕時間(downtime)。本文介紹的方法,在發(fā)送前對客戶機內(nèi)存進行壓縮,在目的端接收到內(nèi)存后,進行對數(shù)據(jù)進行解壓縮,從而恢復客戶機的內(nèi)存。 |
使用帶壓縮技術的遷移后,傳輸?shù)臄?shù)據(jù)總量會減少60%,總遷移時間減少70%+,同時宕機時間減少50%以上。一方面,壓縮/解壓縮的過程會消耗CPU周期而加大了遷移的時間;另一方面,總傳輸數(shù)據(jù)量的銳減,又會減少遷移時間。為了能夠進行高速的壓縮,本技術中使用了多線程并發(fā)的方式,提高壓縮的目前虛擬機中,使用ZLIB完成壓縮/解壓縮的工作。
在CPU相同的情況下,ZLIB官方給出,解壓縮的速度是壓縮速度的4倍。也就是說,如果遷移的源端和目的端處理器相同的情況下,使得壓縮線程數(shù)量是解壓縮線程數(shù)量的4倍就可以在資源消耗最小的情況下,取得最優(yōu)的壓縮為了更多的適應網(wǎng)絡狀況,虛擬機中引入了壓縮級別 -- Compression level。Compression level可以用來控制壓縮速率和壓縮比例。高的壓縮比率會消耗更多的時間,level 0就代表不進行壓縮, 1級代表最優(yōu)的壓縮速率, 9級代表了最好的壓縮比率(最多的壓縮時間)。我們可以選擇從0級到9級中的任意一個級別。
2. 多線程壓縮動態(tài)遷移技術的應用場景壓縮/解壓縮時間將會消耗CPU周期。所以,如果整個系統(tǒng)CPU都被壓得非常滿的情況下,避免使用這個特性。當網(wǎng)絡帶寬有限,CPU資源又足夠充足的情況下,使用多線程壓縮動態(tài)遷移技術會帶來比較好的效果。當網(wǎng)絡充足且CPU資源充足的情況下,使用本技術也將會減少總遷移時間。
3. 多線程壓縮遷移技術使能方法 源端:1. 啟動虛擬機
/home/liufeng/qemu-system-x86_64 -machine accel=kvm -hda ./disk0.img -m 2048 -vnc 192.168.2.106:0 -monitor stdio2. 使能源端多線程壓縮動態(tài)遷移技術
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:66662. 使能目的端多線程壓縮動態(tài)遷移技術
a.) migrate_set_capabilitycompress on b.) migrate_set_parametercompress-level 1 c.) migrate_set_parameterdecompress-threads 3 //3個壓縮線程3. 等待遷移完成
4. 效果驗證 運行環(huán)境: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
| ? | 原動態(tài)遷移 | 多線程壓縮技術動態(tài)遷移 壓縮級別: 1 壓縮線程數(shù): 12 解壓縮線程數(shù):3 |
| 遷移總時間(msec): | 9536 | 4466 |
| Downtime時間(msec): | 34 | 22 |
| 傳輸數(shù)據(jù)量(KB) | 307783 | 140445 |
效果:總的遷移時間減少50%;downtime時間減少35%
b. 情況二:帶寬有限制情況,CPU充足| ? | 原動態(tài)遷移 | 多線程壓縮技術動態(tài)遷移 壓縮級別: 1 壓縮線程數(shù): 12 解壓縮線程數(shù):3 |
| 遷移總時間(msec): | 11720 | 5652 |
| Downtime時間(msec): | 169 | 21 |
| 傳輸數(shù)據(jù)量(KB) | 311554 | 140189 |
效果:總遷移時間減少了200%,downtime時間減少了800%
5. 代碼實現(xiàn)分析虛擬機實現(xiàn)代碼分析如下(本分析基于:QEMU 2.5):
1. 在啟動migration過程中,如果發(fā)現(xiàn)使能了多線程壓縮技術,則創(chuàng)建壓縮線程 2. 遷移開始后,使用多線程壓縮技術有migration_thread()進行遷移工作,在iterator和complete階段,如果發(fā)現(xiàn)使能了多線程壓縮技術,則通過compress_page_with_multi_thread()完成數(shù)據(jù)的壓縮和發(fā)送
最終在compress_page_with_multi_thread()中激活壓縮線程,通過zlib的compress2()函數(shù)完成數(shù)據(jù)的壓縮,并通過QEMU-FILE發(fā)送
1. 壓縮算法
a. 目前使用的是開源zlib庫完成壓縮,還有其他壓縮庫的壓縮方式可以提供,以便適應更多的場景
b. 商業(yè)壓縮庫有著更好的效率
c. 通過FPGA進行硬件輔助壓縮
2. 壓縮策略
a. 虛擬機遷移算法自適應所有網(wǎng)絡,對網(wǎng)絡進行測試(是否滿足上面的公式),然后形成反饋因子輸入到遷移算法中,遷移算法根據(jù)反饋因子決定使用的壓縮算法、壓縮級別或者根本不壓縮,達到在所有網(wǎng)絡狀況下而縮短downtime的目的。
轉載于:https://www.cnblogs.com/linux130/p/5501368.html
總結
以上是生活随笔為你收集整理的QEMU-KVM中的多线程压缩迁移技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统编程9:进程入门之操作系统
- 下一篇: golang错误处理(实验楼)