T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践
對于云計算用戶來說,過長的 KVM 虛擬機創(chuàng)建及啟動時間非常影響體驗,特別是超大規(guī)格的 KVM 異構虛擬機。以 350G 內存為例,創(chuàng)建時間需要 2 分鐘,當用戶此時創(chuàng)建虛擬機是用于快速恢復業(yè)務時,2 分鐘的創(chuàng)建等待時間完全超出用戶的可忍受值。另外,對于云計算的后臺管控系統(tǒng)而言,過長的阻塞時間極大地影響了系統(tǒng)調度效率。
一直以來,阿里云異構計算團隊在 KVM 性能優(yōu)化方面都有大量的投入,積淀了大量實戰(zhàn)經驗。阿里云異構計算團隊創(chuàng)新性地提出了一種顯著優(yōu)化帶有透傳(pass-through)設備的 KVM 虛擬機創(chuàng)建及啟動時間的方法,虛擬機的啟動時間不再隨著分配內存的大小而顯著增加,即使虛擬機被分配了幾百 G 甚至更多的內存,用戶感知的啟動時間依然沒有明顯增加。
在這套技術優(yōu)化方案下,對于 350G 內存的虛擬機,創(chuàng)建及啟動時間可從原來的 120 秒以上降低到 20 秒以內,效率整整提升了 6 倍以上;對于 T 級內存的虛擬機,預計創(chuàng)建效率可以提升 10 倍以上。
作為 KVM 社區(qū)最為重要和權威的大會,KVM Forum 2020 有 3 個議題是與 KVM 虛擬機創(chuàng)建及啟動速度的優(yōu)化有關,分別來自阿里巴巴、英特爾和滴滴,可見 KVM 社區(qū)及云計算業(yè)界對此問題的重視程度。阿里云工程師李偉男和郭成在 KVM Forum 2020 上詳細介紹了阿里云 KVM 虛擬機創(chuàng)建及啟動時間優(yōu)化的具體技術實現(xiàn),本文根據其演講整理而成。
1、發(fā)現(xiàn)問題:內存越大、啟動越慢, DMA map 執(zhí)行是耗時大戶
眾所周知,PCI 設備透傳是 KVM 虛擬化應用中一個非常重要的場景,而 VFIO 是當前最為流行的 PCI 設備透傳解決方案,為了能夠在應用層提供高效的 DMA 訪問,在啟用 VFIO 設備之前,需要將分配給虛擬機的所有內存都鎖定并進行 IOMMU 頁表的創(chuàng)建。
這么做的原因在于,DMA 訪問可能覆蓋整個虛擬機的內存空間,并且 DMA 訪問的內存不能被換出(swap)。所以,如果能夠在物理設備 DMA 訪問之前得知將要訪問的地址空間,就可以在運行中進行內存鎖定(pin)及 IOMMU 頁表的創(chuàng)建。但目前并沒有一個簡單、高效的方法能夠完成這一操作。為了虛擬機及設備的高效運行,目前開源社區(qū)采取的辦法是在虛擬機創(chuàng)建時將所有分配給它的內存進行鎖定并創(chuàng)建 IOMMU 頁表(DMA map)。
由于 DMA map 是一個相對比較耗時的操作,在虛擬機內存相對較小時,總體耗時是可以接受的。但隨著虛擬化市場及技術的發(fā)展,越來越多的用戶開始使用超大規(guī)格的虛擬機,內存資源已從 4G 增長到 384G 甚至更高,隨之帶來的 DMA map 時間消耗問題也日益突出。
圖 1: 虛擬機的創(chuàng)建及啟動時間與內存大小關系
如圖 1 所示,以開源社區(qū)的 KVM 虛擬化組件及 Ubuntu18.04 虛擬機為例,在虛擬機內存達到 350G 以上時,整個 KVM 系統(tǒng)的啟動時間將超過 2 分鐘,其中絕大部分時間都消耗在 DMA map 執(zhí)行操作中。在這 2 分鐘里,對于用戶來說虛擬機是一個黑盒,用戶能做的只有靜靜等待,甚至不確定虛擬機是否仍然在正常創(chuàng)建中,完全處于未知的狀態(tài)。
2、設計思路:異步 DMA map,完美解決虛擬機創(chuàng)建耗時問題
為了解決這一個問題,阿里云異構計算團隊研究了現(xiàn)有的虛擬化技術和實際應用場景。雖然 DMA map 本身不能省去,但我們發(fā)現(xiàn)在系統(tǒng)啟動過程中 DMA 訪問雖然是隨機的、但并不會訪問到全部,由此阿里云異構計算團隊提出了一種異步 DMA map(async DMA map)的方法,即在虛擬機創(chuàng)建過程中僅 map 有限的內存空間,剩余的大部分內存空間可以在虛擬機啟動過程中于后臺異步 map 完成,從而保證用戶可以快速地獲取訪問虛擬機的權限。
這時,如何保證虛擬機在啟動過程中不會有設備通過 DMA 訪問到需要異步 map 的內存就成為了關鍵。這個過程中,我們用到了大家比較熟悉的 Virtio-balloon,因為 Virtio-balloon 設計之初即被用來占用虛擬機內存使用,因此我們提出的解決方案不會涉及到大量、復雜的軟件改動,即可完美解決虛擬機創(chuàng)建耗時的問題。
圖 2:async DMA map 設計思路
Async DMA map 主要設計思路就是:虛擬機創(chuàng)建時,低于 4G 內存空間的 DMA map 請求會被正常處理,其他內存空間的 DMA map 操作將會等待 virtio_balloon 前端驅動加載完成后根據實際情況進行處理。
具體的操作流程如下:
首先,確保 virtio_balloon 驅動先于 VFIO 設備驅動加載。這樣 virtio_balloon 驅動會在配置空間中獲取初始的 balloon 大小,然后再根據 balloon 大小進行實際的虛擬機內存的分配,被分配的內存將從可用內存中去除。在沒有釋放前,其他設備將無法申請到這部分被占用的內存,那就不會被 DMA 訪問到,也就不需要在這之前進行 map。
其次,完成 balloon,獲得可異步執(zhí)行 map 內存空間。Balloon 的過程是經過很多次 inflate 操作完成的。每次操作完成后,前端的 virtio_balloon 會通知后端完成的 inflate balloon 大小及其對應的 PFN,位于宿主機上的后端驅動收到通知后,會將 PFN 從消息隊列中解析出來,并轉換為 IOVA 記錄在 ballooned 頁表中。待 balloon 完成后,后端驅動會得到一張完整的被 virtio_balloon 占用的內存頁表,這部分的內存空間即是可以異步執(zhí)行 map 的部分。沒有在頁表中的內存可能會被其他設備通過 DMA 訪問,因此需要即刻完成 map 操作。
最后,在保證虛擬機系統(tǒng)可繼續(xù)正常啟動的情況下,async DMA map 正式開始。通過向 virtio_balloon 前端驅動觸發(fā) deflate 操作,從而向虛擬機歸還一定大小的內存,前端 virtio_balloon 驅動會將釋放的內存地址同步給后端驅動,后端驅動接收到被釋放的內存地址空間后,觸發(fā)同步的 DMA map,通過分步的 deflate 及 map,慢慢完成全部內存的映射、鎖定,從而使虛擬機恢復到完整內存資源可用狀態(tài)。
3. 具體實踐:三個關鍵點優(yōu)化,進一步優(yōu)化啟動時間
在具體的實踐中,我們進行了 balloon 臨近地址空間自動合并、增加單次 balloon 頁面大小和預處理機制等三個關鍵點的優(yōu)化,以進一步優(yōu)化啟動時間。具體優(yōu)化如下:
(1)Balloon 臨近地址空間自動合并。通過合并多次 balloon 的臨近內存地址空間,可以顯著地減少觸發(fā) DMA map 的次數。因為 virtio_balloon 會在系統(tǒng)啟動初期被加載,此時的內存使用較少,virtio_balloon 申請到的內存地址絕大部分是連續(xù)的,臨近內存地址的可合并率非常高。
(2)增加單次 balloon 頁面大小。內存資源已經不再是非常稀缺的資源,當前 virtio_balloon 前端驅動中基于小頁(4KB)大小的內存申請機制已經不太適合當前大規(guī)格實例的業(yè)務場景。基于業(yè)界用戶實際應用場景的分析,我們將 virtio_balloon 單次申請的內存大小從 4KB 提高到 2MB,這一舉措可減少約 98% 的前后端通信消耗,從而顯著減少了不必要的 CPU 資源占用。
(3)預處理機制。為了更快的完成異步 DMA map 操作,其實可以預先開始進行 DMA map 操作,而不是等待 deflate 觸發(fā)并收到 virtio_balloon 前端驅動發(fā)出的通知才進行。在接收到前端發(fā)出的通知后,只需要做釋放地址已映射命中檢測即可。如地址未命中則可以插入 DMA map 操作,若命中則可以更快地返回通知給虛擬機進行后續(xù)的 deflate 操作。
圖 3:VM 啟動時間與內存關系(左)、QEMu 初始化時間與內存關系(右)
如圖 3,經過上述的優(yōu)化(初始保留 8G 內存給虛擬機),我們看到隨著分配給虛擬機的內存增加,KVM 虛擬機的啟動時間及 QEMU 初始化時間均沒有明顯增加。即我們將 350G 內存 KVM 虛擬機的創(chuàng)建及啟動時間從原來的 120 秒以上減少到 20 秒以下,QEMU 初始化時間縮減到 7 秒以內。對于 T 級內存的用戶,預計效率可提升 10 倍以上,可以極快地獲得虛擬機的訪問控制權限。
結語
未來,我們將持續(xù)依托阿里云智能,致力于云計算產品的性能及用戶體驗的優(yōu)化,為用戶提供便捷、高效的彈性計算產品。
原文鏈接:https://developer.aliyun.com/article/777709?
版權聲明:本文內容由阿里云實名注冊用戶自發(fā)貢獻,版權歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權,亦不承擔相應法律責任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務協(xié)議》和《阿里云開發(fā)者社區(qū)知識產權保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區(qū)將立刻刪除涉嫌侵權內容。 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从体验上拉开差距,Serverless
- 下一篇: 玩转ECS第5讲 | 弹性计算安全组最佳