T級內(nèi)存,t級內(nèi)存需要什么主板T級內(nèi)存簡介:阿里云工程師李偉男和郭成在KVM Forum 2020上詳細介紹了阿里云KVM虛擬機創(chuàng)建及啟動時間優(yōu)化的具體技術(shù)實現(xiàn),本文根據(jù)其演講整理而成。對于云計算用戶來說,過長的KVM虛擬機創(chuàng)建及啟動時間非常影響體驗,特別是超大規(guī)格的KVM異構(gòu)虛擬機。以350G內(nèi)存為例,創(chuàng)建時間需要2......
簡介:阿里云工程師李偉男和郭成在KVM Forum 2020上詳細介紹了阿里云KVM虛擬機創(chuàng)建及啟動時間優(yōu)化的具體技術(shù)實現(xiàn),本文根據(jù)其演講整理而成。
對于云計算用戶來說,過長的KVM虛擬機創(chuàng)建及啟動時間非常影響體驗,特別是超大規(guī)格的KVM異構(gòu)虛擬機。以350G內(nèi)存為例,創(chuàng)建時間需要2分鐘,當(dāng)用戶此時創(chuàng)建虛擬機是用于快速恢復(fù)業(yè)務(wù)時,2分鐘的創(chuàng)建等待時間完全超出用戶的可忍受值。另外,對于云計算的后臺管控系統(tǒng)而言,過長的阻塞時間極大地影響了系統(tǒng)調(diào)度效率。
一直以來,阿里云異構(gòu)計算團隊在KVM性能優(yōu)化方面都有大量的投入,積淀了大量實戰(zhàn)經(jīng)驗。阿里云異構(gòu)計算團隊創(chuàng)新性地提出了一種顯著優(yōu)化帶有透傳(passthrough)設(shè)備的KVM虛擬機創(chuàng)建及啟動時間的方法,虛擬機的啟動時間不再隨著分配內(nèi)存的大小而顯著增加,即使虛擬機被分配了幾百G甚至更多的內(nèi)存,用戶感知的啟動時間依然沒有明顯增加。
在這套技術(shù)優(yōu)化方案下,對于350G內(nèi)存的虛擬機,創(chuàng)建及啟動時間可從原來的120秒以上降低到20秒以內(nèi),效率整整提升了6倍以上;對于T級內(nèi)存的虛擬機,預(yù)計創(chuàng)建效率可以提升10倍以上。
作為KVM社區(qū)最為重要和權(quán)威的大會,KVM Forum 2020有3個議題是與KVM虛擬機創(chuàng)建及啟動速度的優(yōu)化有關(guān),分別來自阿里巴巴、英特爾和滴滴,可見KVM社區(qū)及云計算業(yè)界對此問題的重視程度。阿里云工程師李偉男和郭成在KVM Forum 2020上詳細介紹了阿里云KVM虛擬機創(chuàng)建及啟動時間優(yōu)化的具體技術(shù)實現(xiàn),本文根據(jù)其演講整理而成。
1、發(fā)現(xiàn)問題:內(nèi)存越大、啟動越慢,DMA map執(zhí)行是耗時大戶
眾所周知,PCI設(shè)備透傳是KVM虛擬化應(yīng)用中一個非常重要的場景,而VFIO是當(dāng)前最為流行的PCI設(shè)備透傳解決方案,為了能夠在應(yīng)用層提供高效的DMA訪問,在啟用VFIO設(shè)備之前,需要將分配給虛擬機的所有內(nèi)存都鎖定并進行IOMMU頁表的創(chuàng)建。
這么做的原因在于,DMA訪問可能覆蓋整個虛擬機的內(nèi)存空間,并且DMA訪問的內(nèi)存不能被換出(swap)。所以,如果能夠在物理設(shè)備DMA訪問之前得知將要訪問的地址空間,就可以在運行中進行內(nèi)存鎖定(pin)及IOMMU頁表的創(chuàng)建。但目前并沒有一個簡單、高效的方法能夠完成這一操作。為了虛擬機及設(shè)備的高效運行,目前開源社區(qū)采取的辦法是在虛擬機創(chuàng)建時將所有分配給它的內(nèi)存進行鎖定并創(chuàng)建IOMMU頁表(DMA map)。
由于DMA map是一個相對比較耗時的操作,在虛擬機內(nèi)存相對較小時,總體耗時是可以接受的。但隨著虛擬化市場及技術(shù)的發(fā)展,越來越多的用戶開始使用超大規(guī)格的虛擬機,內(nèi)存資源已從4G增長到384G甚至更高,隨之帶來的DMA map時間消耗問題也日益突出。
圖1:虛擬機的創(chuàng)建及啟動時間與內(nèi)存大小關(guān)系
如圖1所示,以開源社區(qū)的KVM虛擬化組件及Ubuntu18.04虛擬機為例,在虛擬機內(nèi)存達到350G以上時,整個KVM系統(tǒng)的啟動時間將超過2分鐘,其中絕大部分時間都消耗在DMA map執(zhí)行操作中。在這2分鐘里,對于用戶來說虛擬機是一個黑盒,用戶能做的只有靜靜等待,甚至不確定虛擬機是否仍然在正常創(chuàng)建中,完全處于未知的狀態(tài)。
2、設(shè)計思路:異步DMA map,完美解決虛擬機創(chuàng)建耗時問題
為了解決這一個問題,阿里云異構(gòu)計算團隊研究了現(xiàn)有的虛擬化技術(shù)和實際應(yīng)用場景。雖然DMA map本身不能省去,但我們發(fā)現(xiàn)在系統(tǒng)啟動過程中DMA訪問雖然是隨機的、但并不會訪問到全部,由此阿里云異構(gòu)計算團隊提出了一種異步DMA map(async DMA map)的方法,即在虛擬機創(chuàng)建過程中僅map有限的內(nèi)存空間,剩余的大部分內(nèi)存空間可以在虛擬機啟動過程中于后臺異步map完成,從而保證用戶可以快速地獲取訪問虛擬機的權(quán)限。
這時,如何保證虛擬機在啟動過程中不會有設(shè)備通過DMA訪問到需要異步map的內(nèi)存就成為了關(guān)鍵。這個過程中,我們用到了大家比較熟悉的Virtioballoon,因為Virtioballoon設(shè)計之初即被用來占用虛擬機內(nèi)存使用,因此我們提出的解決方案不會涉及到大量、復(fù)雜的軟件改動,即可完美解決虛擬機創(chuàng)建耗時的問題。
圖2:async DMA map設(shè)計思路
Async DMA map主要設(shè)計思路就是:虛擬機創(chuàng)建時,低于4G內(nèi)存空間的DMA map請求會被正常處理,其他內(nèi)存空間的DMA map操作將會等待virtioballoon前端驅(qū)動加載完成后根據(jù)實際情況進行處理。
具體的操作流程如下:
首先,確保virtioballoon驅(qū)動先于VFIO設(shè)備驅(qū)動加載。這樣virtioballoon驅(qū)動會在配置空間中獲取初始的balloon大小,然后再根據(jù)balloon大小進行實際的虛擬機內(nèi)存的分配,被分配的內(nèi)存將從可用內(nèi)存中去除。在沒有釋放前,其他設(shè)備將無法申請到這部分被占用的內(nèi)存,那就不會被DMA訪問到,也就不需要在這之前進行map。
其次,完成balloon,獲得可異步執(zhí)行map內(nèi)存空間。Balloon的過程是經(jīng)過很多次inflate操作完成的。每次操作完成后,前端的virtioballoon會通知后端完成的inflate balloon大小及其對應(yīng)的PFN,位于宿主機上的后端驅(qū)動收到通知后,會將PFN從消息隊列中解析出來,并轉(zhuǎn)換為IOVA記錄在ballooned頁表中。待balloon完成后,后端驅(qū)動會得到一張完整的被virtioballoon占用的內(nèi)存頁表,這部分的內(nèi)存空間即是可以異步執(zhí)行map的部分。沒有在頁表中的內(nèi)存可能會被其他設(shè)備通過DMA訪問,因此需要即刻完成map操作。
最后,在保證虛擬機系統(tǒng)可繼續(xù)正常啟動的情況下,async DMA map正式開始。通過向virtioballoon前端驅(qū)動觸發(fā)deflate操作,從而向虛擬機歸還一定大小的內(nèi)存,前端virtioballoon驅(qū)動會將釋放的內(nèi)存地址同步給后端驅(qū)動,后端驅(qū)動接收到被釋放的內(nèi)存地址空間后,觸發(fā)同步的DMA map,通過分步的deflate及map,慢慢完成全部內(nèi)存的映射、鎖定,從而使虛擬機恢復(fù)到完整內(nèi)存資源可用狀態(tài)。
3.具體實踐:三個關(guān)鍵點優(yōu)化,進一步優(yōu)化啟動時間
在具體的實踐中,我們進行了balloon臨近地址空間自動合并、增加單次balloon頁面大小和預(yù)處理機制等三個關(guān)鍵點的優(yōu)化,以進一步優(yōu)化啟動時間。具體優(yōu)化如下:
(1)Balloon臨近地址空間自動合并。通過合并多次balloon的臨近內(nèi)存地址空間,可以顯著地減少觸發(fā)DMA map的次數(shù)。因為virtioballoon會在系統(tǒng)啟動初期被加載,此時的內(nèi)存使用較少,virtioballoon申請到的內(nèi)存地址絕大部分是連續(xù)的,臨近內(nèi)存地址的可合并率非常高。
(2)增加單次balloon頁面大小。內(nèi)存資源已經(jīng)不再是非常稀缺的資源,當(dāng)前virtioballoon前端驅(qū)動中基于小頁(4KB)大小的內(nèi)存申請機制已經(jīng)不太適合當(dāng)前大規(guī)格實例的業(yè)務(wù)場景?;跇I(yè)界用戶實際應(yīng)用場景的分析,我們將virtioballoon單次申請的內(nèi)存大小從4KB提高到2MB,這一舉措可減少約98%的前后端通信消耗,從而顯著減少了不必要的CPU資源占用。
(3)預(yù)處理機制。為了更快的完成異步DMA map操作,其實可以預(yù)先開始進行DMA map操作,而不是等待deflate觸發(fā)并收到virtioballoon前端驅(qū)動發(fā)出的通知才進行。在接收到前端發(fā)出的通知后,只需要做釋放地址已映射命中檢測即可。如地址未命中則可以插入DMA map操作,若命中則可以更快地返回通知給虛擬機進行后續(xù)的deflate操作。
圖3:VM啟動時間與內(nèi)存關(guān)系(左)、QEMu初始化時間與內(nèi)存關(guān)系(右)
如圖3,經(jīng)過上述的優(yōu)化(初始保留8G內(nèi)存給虛擬機),我們看到隨著分配給虛擬機的內(nèi)存增加,KVM虛擬機的啟動時間及QEMU初始化時間均沒有明顯增加。即我們將350G內(nèi)存KVM虛擬機的創(chuàng)建及啟動時間從原來的120秒以上減少到20秒以下,QEMU初始化時間縮減到7秒以內(nèi)。對于T級內(nèi)存的用戶,預(yù)計效率可提升10倍以上,可以極快地獲得虛擬機的訪問控制權(quán)限。
結(jié)語
未來,我們將持續(xù)依托阿里云智能,致力于云計算產(chǎn)品的性能及用戶體驗的優(yōu)化,為用戶提供便捷、高效的彈性計算產(chǎn)品。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部