標(biāo)準(zhǔn)vMotion的底層運(yùn)行原理(虛擬機(jī)的熱遷移原理)

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

多年來,vMotion內(nèi)部開發(fā)了很多技術(shù)來支持新技術(shù)。

此博本文章將重點(diǎn)介紹標(biāo)準(zhǔn)vMotion,這是將活動(dòng)計(jì)算狀態(tài)從源遷移到目標(biāo)ESXi主機(jī)的標(biāo)準(zhǔn)vMotion。我們還可以執(zhí)行Storage vMotion,當(dāng)與標(biāo)準(zhǔn)vMotion結(jié)合使用時(shí),它被認(rèn)為是增強(qiáng)vMotion。其他類型的是長距離vMotion和跨集群vMotion,它們主要是vMotion進(jìn)程的ESXi端之上的vCenter Server操作。

vMotion流程

啟動(dòng)虛擬機(jī)遷移后,vCenter Server實(shí)例將執(zhí)行所謂的長時(shí)間運(yùn)行的遷移任務(wù)以處理遷移。第一步是執(zhí)行兼容性檢查。是否可以在目標(biāo)主機(jī)上運(yùn)行虛擬機(jī)?考慮可能阻礙實(shí)時(shí)遷移的可能約束。接下來是告訴源和目標(biāo)ESXi主機(jī)發(fā)生了什么。創(chuàng)建包含以下信息的遷移任務(wù):

是否是正在遷移的虛擬機(jī)

是否在配置該虛擬機(jī)(虛擬硬件,VM選項(xiàng)等)

源ESXi主機(jī)是否符合要求

目標(biāo)ESXi主機(jī)是否符合要求

vMotion網(wǎng)絡(luò)相關(guān)問題

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

虛擬機(jī)監(jiān)視器(VMM)進(jìn)程負(fù)責(zé)管理虛擬機(jī)內(nèi)存并將虛擬機(jī)存儲(chǔ)和網(wǎng)IO請求傳輸?shù)絍Mkernel。所有其他對性能無關(guān)的IO請求都由VMM轉(zhuǎn)發(fā)到VMX。虛擬機(jī)擴(kuò)展(VMX)進(jìn)程在VMkernel中運(yùn)行,負(fù)責(zé)處理對性能不重要的設(shè)備的IO。?請注意,VMM僅在遷移期間在源ESXi主機(jī)上使用,因?yàn)檫@是虛擬機(jī)的活動(dòng)內(nèi)存所在的位置。

完成此操作后,源ESXi上的VMkernel遷移模塊將打開啟用vMotion的網(wǎng)絡(luò)上的套接字,以設(shè)置與目標(biāo)ESXi主機(jī)的通信。

準(zhǔn)備階段到預(yù)復(fù)制階段

到目前為止,所有流程和通信路徑都已準(zhǔn)備好飛機(jī)票行實(shí)時(shí)遷移。準(zhǔn)備階段的目的是確保目標(biāo)ESXi主機(jī)為要遷移的虛擬機(jī)預(yù)先分配計(jì)算資源。此外,虛擬機(jī)已經(jīng)在目標(biāo)主機(jī)上被創(chuàng)建了,但它處于被屏蔽狀態(tài)。

完成準(zhǔn)備階段后,該過程將進(jìn)入預(yù)復(fù)制階段,在此階段將內(nèi)存從源傳輸?shù)侥繕?biāo)ESXi主機(jī)。需要跟蹤源ESXi主機(jī)上的所有虛擬機(jī)內(nèi)存頁面。通過這樣,vMotion進(jìn)程知道源虛擬機(jī)的哪些內(nèi)存頁面在遷移期間被覆蓋或修改(稱為臟頁面),因?yàn)樗枰獙⑦@些內(nèi)存頁面重新發(fā)送到目標(biāo)主機(jī)。

頁面追蹤

在預(yù)復(fù)制階段,虛擬機(jī)正在使用的vCPU會(huì)被短暫停頓,以安裝頁面跟蹤器。VMkernel遷移模塊現(xiàn)在要求VMM啟動(dòng)頁面跟蹤,因?yàn)閂MM擁有虛擬機(jī)的內(nèi)存頁表狀態(tài)。下圖顯示了guest虛擬機(jī)操作系統(tǒng)在vMotion期間將數(shù)據(jù)寫入內(nèi)存時(shí)發(fā)生的情況:

迭代內(nèi)存預(yù)復(fù)制

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

階段-1:復(fù)制24GB的虛擬機(jī)內(nèi)存和跟蹤頁面。當(dāng)我們發(fā)送內(nèi)存時(shí),它會(huì)帶來8GB的污染。

階段0:重新傳輸臟污的8GB。在這個(gè)過程中,內(nèi)存污染另外3GB。

階段1:發(fā)送3GB。當(dāng)轉(zhuǎn)移發(fā)生時(shí),虛擬機(jī)又會(huì)污染1GB。

階段2:發(fā)送剩余的1GB。

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

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

遷移傳輸速率;?以什么速度(GbE)我們在主機(jī)之間復(fù)制內(nèi)存數(shù)據(jù)?

臟頁率(GB / s);?客戶操作系統(tǒng)覆蓋了多少內(nèi)存頁面?

我們還有多少頁要傳輸?shù)侥繕?biāo)主機(jī)?

如果不是,則發(fā)生下一次迭代。如果結(jié)果為是,則VMkernel遷移模塊將終止預(yù)復(fù)制過程。

現(xiàn)在,如果臟頁率高于遷移傳輸速率會(huì)發(fā)生什么?如果是這種情況,那么進(jìn)行另一次迭代是沒有意義的,因?yàn)槲覀冇肋h(yuǎn)無法實(shí)現(xiàn)內(nèi)存預(yù)復(fù)制的收斂,并且遷移將停止。這就是我們在vSphere 5.0中引入Stun頁面發(fā)送(SDPS)的原因?;旧?,SDPS是VMkernel告訴VMM不運(yùn)行預(yù)定指令但是引入非常短的“睡眠”的一種方式。這可能聽起來像是對工作負(fù)載性能的影響,但這種情況發(fā)生在細(xì)粒度級別。正是由于這些非常小的微秒級別的時(shí)間窗口,我們可以將vMotion預(yù)復(fù)制收斂,并完成vMotion工作。

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

切換

由VMM終止內(nèi)存預(yù)復(fù)制后,所有內(nèi)存頁都駐留在目標(biāo)ESXi主機(jī)上。VMM現(xiàn)在向VMX發(fā)送遠(yuǎn)程過程調(diào)用(RPC),它可以掛起源虛擬機(jī)。VMX將進(jìn)入檢查點(diǎn)階段,暫停虛擬機(jī)并將檢查點(diǎn)數(shù)據(jù)發(fā)送到目標(biāo)ESXi主機(jī)。

在此過程中,目標(biāo)ESXi主機(jī)上的虛擬機(jī)將被解除屏蔽,并使用源虛擬機(jī)的檢查點(diǎn)數(shù)據(jù)恢復(fù)狀態(tài)?;玖鞒淌牵簡?dòng)目標(biāo)虛擬機(jī)、中斷啟動(dòng)過程、再把狀態(tài)指向遷移過來的源虛擬機(jī)內(nèi)存頁,完成啟動(dòng)。所有這些通常發(fā)生在100-200ms,這是虛擬機(jī)處于不可訪問的一個(gè)時(shí)間,這取決于主機(jī)硬件性能、動(dòng)態(tài)的訪問負(fù)載等各種因素。

到此,虛擬機(jī)的vMotion完成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容