[翻譯]標准vMotion的底層運行原理(虛擬機的熱遷移原理)


VMware vSphere vMotion功能是當今虛擬基礎架構中最重要的功能之一。自2002年成立以及2003年發布以來,它允許我們將虛擬機的活動狀態從一個物理ESXi主機遷移到另一個主機。如今,無縫遷移虛擬機的能力幾乎是每個虛擬化部署的重要組成部分。工作負載的可移植性是真正的混合雲體驗的基礎,能夠使用VMware混合雲擴展(HCX)在內部雲和公共雲之間移動它們。vSphere vMotion仍然是IT行業中最重要的游戲改變者之一。

多年來,vMotion內部開發了很多技術來支持新技術。

此博本文章將重點介紹標准vMotion,這是將活動計算狀態從源遷移到目標ESXi主機的標准vMotion。我們還可以執行Storage vMotion,當與標准vMotion結合使用時,它被認為是增強vMotion。其他類型的是長距離vMotion和跨集群vMotion,它們主要是vMotion進程的ESXi端之上的vCenter Server操作。

vMotion流程

啟動虛擬機遷移后,vCenter Server實例將執行所謂的長時間運行的遷移任務以處理遷移。第一步是執行兼容性檢查。是否可以在目標主機上運行虛擬機?考慮可能阻礙實時遷移的可能約束。接下來是告訴源和目標ESXi主機發生了什么。創建包含以下信息的遷移任務:

  • 是否是正在遷移的虛擬機
  • 是否在配置該虛擬機(虛擬硬件,VM選項等)
  • 源ESXi主機是否符合要求
  • 目標ESXi主機是否符合要求
  • vMotion網絡相關問題

vCenter Server實例與源ESXi主機和目標ESXi主機共享遷移規范,確保交換所有必需信息以啟動遷移過程。vCenter Server使用Virtual Provisioning X Daemon(VPXD)與ESXi主機進行通信,后者調用ESXi主機上運行的Virtual Provisioning X Agent(VPXA)。VPXA偵聽來自VPXD的消息,它接收遷移規范並通過hostd將其傳遞給VMX進程。主機守護程序(hostd)維護特定於主機的信息和管理訪問,包括VMstate等虛擬機遙測。啟動遷移時,hostd會將虛擬機置於中間狀態,以便在遷移期間無法更改其配置的虛擬機。

虛擬機監視器(VMM)進程負責管理虛擬機內存並將虛擬機存儲和網IO請求傳輸到VMkernel。所有其他對性能無關的IO請求都由VMM轉發到VMX。虛擬機擴展(VMX)進程在VMkernel中運行,負責處理對性能不重要的設備的IO。 請注意,VMM僅在遷移期間在源ESXi主機上使用,因為這是虛擬機的活動內存所在的位置。

完成此操作后,源ESXi上的VMkernel遷移模塊將打開啟用vMotion的網絡上的套接字,以設置與目標ESXi主機的通信。

准備階段到預復制階段

到目前為止,所有流程和通信路徑都已准備好飛機票行實時遷移。准備階段的目的是確保目標ESXi主機為要遷移的虛擬機預先分配計算資源。此外,虛擬機已經在目標主機上被創建了,但它處於被屏蔽狀態。

完成准備階段后,該過程將進入預復制階段,在此階段將內存從源傳輸到目標ESXi主機。需要跟蹤源ESXi主機上的所有虛擬機內存頁面。通過這樣,vMotion進程知道源虛擬機的哪些內存頁面在遷移期間被覆蓋或修改(稱為臟頁面),因為它需要將這些內存頁面重新發送到目標主機。

頁面追蹤

在預復制階段,虛擬機正在使用的vCPU會被短暫停頓,以安裝頁面跟蹤器。VMkernel遷移模塊現在要求VMM啟動頁面跟蹤,因為VMM擁有虛擬機的內存頁表狀態。下圖顯示了guest虛擬機操作系統在vMotion期間將數據寫入內存時發生的情況:

迭代內存預復制

頁面跟蹤是一個連續的循環。它將通過使用多次迭代來實現內存預復制收斂。第一次迭代(預拷貝階段-1)復制虛擬機內存。以下迭代(預拷貝階段0到n)用於復制臟內存頁面。舉個例子,這就是我們實時遷移具有24GB內存的虛擬機時迭代的樣子:

階段-1:復制24GB的虛擬機內存和跟蹤頁面。當我們發送內存時,它會帶來8GB的污染。
階段0:重新傳輸臟污的8GB。在這個過程中,內存污染另外3GB。
階段1:發送3GB。當轉移發生時,虛擬機又會污染1GB。
階段2:發送剩余的1GB。

當內存頁面從源復制到目標ESXi主機時,我們需要確定何時能夠完成預復制,所以VMM會在每次迭代復制后詢問VMkernel是否已完成預復制。當只有將所有內存更改(臟頁)復制到目標主機時,才可以執行后續操作。迭代內存預拷貝算法的一部分是將所有目標內存頁面與其源匹配。從第0頁開始一直到最大或最后一個內存頁碼,依次檢查所有內存頁以查看目標頁是否與源頁同步。

要確定我們是否可以終止預復制,我們需要驗證是否可以在<500ms的窗口中完成最后一次內存頁面復制。我們可以使用遷移開銷中的信息來計算:

  • 遷移傳輸速率; 以什么速度(GbE)我們在主機之間復制內存數據?
  • 臟頁率(GB / s); 客戶操作系統覆蓋了多少內存頁面?
  • 我們還有多少頁要傳輸到目標主機?

如果不是,則發生下一次迭代。如果結果為是,則VMkernel遷移模塊將終止預復制過程。

現在,如果臟頁率高於遷移傳輸速率會發生什么?如果是這種情況,那么進行另一次迭代是沒有意義的,因為我們永遠無法實現內存預復制的收斂,並且遷移將停止。這就是我們在vSphere 5.0中引入Stun頁面發送(SDPS)的原因。基本上,SDPS是VMkernel告訴VMM不運行預定指令但是引入非常短的“睡眠”的一種方式。這可能聽起來像是對工作負載性能的影響,但這種情況發生在細粒度級別。正是由於這些非常小的微秒級別的時間窗口,我們可以將vMotion預復制收斂,並完成vMotion工作。

如果臟頁面速率>傳輸速率,則每次迭代執行SDPS。后續迭代僅復制在上一次迭代期間修改的臟內存頁。迭代的持續時間越短,客戶OS就越不能修改或弄臟其存儲頁面,從而縮短了下一次預復制迭代。雖然產生一些性能開銷,但SDPS通常不會對工作負載造成影響。這些開銷對客戶操作系統來說是可以忽略不計的。

切換

由VMM終止內存預復制后,所有內存頁都駐留在目標ESXi主機上。VMM現在向VMX發送遠程過程調用(RPC),它可以掛起源虛擬機。VMX將進入檢查點階段,暫停虛擬機並將檢查點數據發送到目標ESXi主機。

在此過程中,目標ESXi主機上的虛擬機將被解除屏蔽,並使用源虛擬機的檢查點數據恢復狀態。基本流程是:啟動目標虛擬機、中斷啟動過程、再把狀態指向遷移過來的源虛擬機內存頁,完成啟動。所有這些通常發生在100-200ms,這是虛擬機處於不可訪問的一個時間,這取決於主機硬件性能、動態的訪問負載等各種因素。

到此,虛擬機的vMotion完成。

原文:https://blogs.vmware.com/vsphere/2019/07/the-vmotion-process-under-the-hood.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM