【研究任務】熱遷移方式——pre-copy、post-copy和x-multifd

Postcopy


先把虛擬機現有的CPU state, registers and, optionally, non-pageable memory(內存中不會進行交換或者移動的內存)等信息傳輸到目的服務器,不管dirty page,並迅速把虛擬機在目的服務器啓動起來。同時,源服務器也會動態的把剩餘的memory推送到目的服務器上。但是當虛擬機運行調用到還沒傳輸過來的memory時,會觸發page-fault.

postcopy基於userfault機制,可以在用戶空間中通過文件描述符fd獲得page fault信息。當虛擬機在目的服務器上調用到這些還未傳輸完成的內存時,userfaultfd可以到源服務器上把這些內存信息取出,並傳輸到目的服務器上,讓虛擬機繼續運行。

圖片.png

使用postcopy不會受虛機對內存io的壓力影響,但遷移完成後如果內存io壓力大,會頻繁調用userfault,這就會對服務器帶寬帶來壓力,造成虛機性能下降。


x-multifd


x-multifd就是使用多個fd來傳輸文件

x-multifd-channels:在遷移時,使用多少個channels進行並行傳輸,也是用於遷移的sockets的數量,默認爲2.

x-multifd-page-count:會將多少張pages一併發給一個thread,默認值爲16.


Pre-copy


預拷貝內存(Pre-copy)通過一個循環,將內存數據發送至目的主機VM,循環第一輪發送所有內存數據,接下來每一輪發送上一輪預拷貝過程中的髒頁。最後一輪是停機拷貝階段,源主機被掛起,停止內存更新,將髒頁整體拷貝到目的主機vm上。

對於更新速度非常快的內存部分,每次循環過程都會變髒,需要重複 pre-copy,同時也導致循環次數非常多,遷移的時間變長。針對這種情況,KVM 虛擬機建立了三個原則:集中原則,一個循環內的 dirty pages 小於等於 50;不擴散原則, 一個循環內傳輸的 dirty pages 少於新產生的;有限循環原則,循環次數必須少於 30。在實現上,就是採取了以下措施:

  • 有限循環:循環次數和效果受到控制,對每輪 pre-copy 的效果進行計算,若 pre-copy 對於減少不一致內存數量的效果不顯著,或者循環次數超過了上限,循環將中止,進入停機拷貝階段。

  • 在被遷移 VM 的內核設置一個內存訪問的監控模塊。在內存 pre-copy 過程中,VM 的一個進程在一個被調度運行的期間,被限制最多執行 40 次內存寫操作。這個措施直接限制了 pre-copy 過程中內存變髒的速度,其代價是對 VM 上的進程運行進行了一定的限制。

KVM 的預拷貝在線遷移過程詳解:

系統驗證目標服務器的存儲器和網絡設置是否正確,並預保留目標服務器虛擬機的資源。

1. 源服務器和目標服務器簡圖

圖片.png

當虛擬機還在源服務器上運轉時,第一個循環內將全部內存鏡像複製到目標服務器上。在這個過程中,KVM 依然會監視內存的任何變化。

2. 內存鏡像複製示意圖

圖片.png

以後的循環中,檢查上一個循環中內存是否發生了變化。 假如發生了變化,那麼 VMM 會將發生變化的內存頁即 dirty pages 重新複製到目標服務器中,並覆蓋掉先前的內存頁。在這個階段,VMM 依然會繼續監視內存的變化情況。

3. 進行有變化的內存複製

圖片.png

VMM 會持續這樣的內存複製循環。隨着循環次數的增加,所需要複製的 dirty pages 就會明顯減少,而複製所耗費的時間就會逐漸變短,那麼內存就有可能沒有足夠的時間發生變化。最後,當源服務器與目標服務器之間的差異達到一定標準時,內存複製操作纔會結束,同時暫停源系統。

 4. 所需複製的數據在減少

圖片.png

在源系統和目標系統都停機的情況下,將最後一個循環的 dirty-pages 和源系統設備的工作狀態複製到目標服務器。

 5. 狀態信息的複製

圖片.png

然後,將存儲從源系統上解鎖,並鎖定在目標系統上。啓動目標服務器,並與存儲資源和網絡資源相連接。

 6. 停止源服務器,啓動目標服務器

圖片.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章