日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践

發(fā)布時(shí)間:2024/9/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
簡(jiǎn)介:阿里云工程師李偉男和郭成在 KVM Forum 2020 上詳細(xì)介紹了阿里云 KVM 虛擬機(jī)創(chuàng)建及啟動(dòng)時(shí)間優(yōu)化的具體技術(shù)實(shí)現(xiàn),本文根據(jù)其演講整理而成。

對(duì)于云計(jì)算用戶來(lái)說(shuō),過長(zhǎng)的 KVM 虛擬機(jī)創(chuàng)建及啟動(dòng)時(shí)間非常影響體驗(yàn),特別是超大規(guī)格的 KVM 異構(gòu)虛擬機(jī)。以 350G 內(nèi)存為例,創(chuàng)建時(shí)間需要 2 分鐘,當(dāng)用戶此時(shí)創(chuàng)建虛擬機(jī)是用于快速恢復(fù)業(yè)務(wù)時(shí),2 分鐘的創(chuàng)建等待時(shí)間完全超出用戶的可忍受值。另外,對(duì)于云計(jì)算的后臺(tái)管控系統(tǒng)而言,過長(zhǎng)的阻塞時(shí)間極大地影響了系統(tǒng)調(diào)度效率。

一直以來(lái),阿里云異構(gòu)計(jì)算團(tuán)隊(duì)在 KVM 性能優(yōu)化方面都有大量的投入,積淀了大量實(shí)戰(zhàn)經(jīng)驗(yàn)。阿里云異構(gòu)計(jì)算團(tuán)隊(duì)創(chuàng)新性地提出了一種顯著優(yōu)化帶有透?jìng)?#xff08;pass-through)設(shè)備的 KVM 虛擬機(jī)創(chuàng)建及啟動(dòng)時(shí)間的方法,虛擬機(jī)的啟動(dòng)時(shí)間不再隨著分配內(nèi)存的大小而顯著增加,即使虛擬機(jī)被分配了幾百 G 甚至更多的內(nèi)存,用戶感知的啟動(dòng)時(shí)間依然沒有明顯增加。

在這套技術(shù)優(yōu)化方案下,對(duì)于 350G 內(nèi)存的虛擬機(jī),創(chuàng)建及啟動(dòng)時(shí)間可從原來(lái)的 120 秒以上降低到 20 秒以內(nèi),效率整整提升了 6 倍以上;對(duì)于 T 級(jí)內(nèi)存的虛擬機(jī),預(yù)計(jì)創(chuàng)建效率可以提升 10 倍以上。

作為 KVM 社區(qū)最為重要和權(quán)威的大會(huì),KVM Forum 2020 有 3 個(gè)議題是與 KVM 虛擬機(jī)創(chuàng)建及啟動(dòng)速度的優(yōu)化有關(guān),分別來(lái)自阿里巴巴、英特爾和滴滴,可見 KVM 社區(qū)及云計(jì)算業(yè)界對(duì)此問題的重視程度。阿里云工程師李偉男和郭成在 KVM Forum 2020 上詳細(xì)介紹了阿里云 KVM 虛擬機(jī)創(chuàng)建及啟動(dòng)時(shí)間優(yōu)化的具體技術(shù)實(shí)現(xiàn),本文根據(jù)其演講整理而成。

1、發(fā)現(xiàn)問題:內(nèi)存越大、啟動(dòng)越慢, DMA map 執(zhí)行是耗時(shí)大戶

眾所周知,PCI 設(shè)備透?jìng)魇?KVM 虛擬化應(yīng)用中一個(gè)非常重要的場(chǎng)景,而 VFIO 是當(dāng)前最為流行的 PCI 設(shè)備透?jìng)鹘鉀Q方案,為了能夠在應(yīng)用層提供高效的 DMA 訪問,在啟用 VFIO 設(shè)備之前,需要將分配給虛擬機(jī)的所有內(nèi)存都鎖定并進(jìn)行 IOMMU 頁(yè)表的創(chuàng)建。

這么做的原因在于,DMA 訪問可能覆蓋整個(gè)虛擬機(jī)的內(nèi)存空間,并且 DMA 訪問的內(nèi)存不能被換出(swap)。所以,如果能夠在物理設(shè)備 DMA 訪問之前得知將要訪問的地址空間,就可以在運(yùn)行中進(jìn)行內(nèi)存鎖定(pin)及 IOMMU 頁(yè)表的創(chuàng)建。但目前并沒有一個(gè)簡(jiǎn)單、高效的方法能夠完成這一操作。為了虛擬機(jī)及設(shè)備的高效運(yùn)行,目前開源社區(qū)采取的辦法是在虛擬機(jī)創(chuàng)建時(shí)將所有分配給它的內(nèi)存進(jìn)行鎖定并創(chuàng)建 IOMMU 頁(yè)表(DMA map)。

由于 DMA map 是一個(gè)相對(duì)比較耗時(shí)的操作,在虛擬機(jī)內(nèi)存相對(duì)較小時(shí),總體耗時(shí)是可以接受的。但隨著虛擬化市場(chǎng)及技術(shù)的發(fā)展,越來(lái)越多的用戶開始使用超大規(guī)格的虛擬機(jī),內(nèi)存資源已從 4G 增長(zhǎng)到 384G 甚至更高,隨之帶來(lái)的 DMA map 時(shí)間消耗問題也日益突出。


圖 1: 虛擬機(jī)的創(chuàng)建及啟動(dòng)時(shí)間與內(nèi)存大小關(guān)系

如圖 1 所示,以開源社區(qū)的 KVM 虛擬化組件及 Ubuntu18.04 虛擬機(jī)為例,在虛擬機(jī)內(nèi)存達(dá)到 350G 以上時(shí),整個(gè) KVM 系統(tǒng)的啟動(dòng)時(shí)間將超過 2 分鐘,其中絕大部分時(shí)間都消耗在 DMA map 執(zhí)行操作中。在這 2 分鐘里,對(duì)于用戶來(lái)說(shuō)虛擬機(jī)是一個(gè)黑盒,用戶能做的只有靜靜等待,甚至不確定虛擬機(jī)是否仍然在正常創(chuàng)建中,完全處于未知的狀態(tài)。

2、設(shè)計(jì)思路:異步 DMA map,完美解決虛擬機(jī)創(chuàng)建耗時(shí)問題

為了解決這一個(gè)問題,阿里云異構(gòu)計(jì)算團(tuán)隊(duì)研究了現(xiàn)有的虛擬化技術(shù)和實(shí)際應(yīng)用場(chǎng)景。雖然 DMA map 本身不能省去,但我們發(fā)現(xiàn)在系統(tǒng)啟動(dòng)過程中 DMA 訪問雖然是隨機(jī)的、但并不會(huì)訪問到全部,由此阿里云異構(gòu)計(jì)算團(tuán)隊(duì)提出了一種異步 DMA map(async DMA map)的方法,即在虛擬機(jī)創(chuàng)建過程中僅 map 有限的內(nèi)存空間,剩余的大部分內(nèi)存空間可以在虛擬機(jī)啟動(dòng)過程中于后臺(tái)異步 map 完成,從而保證用戶可以快速地獲取訪問虛擬機(jī)的權(quán)限。

這時(shí),如何保證虛擬機(jī)在啟動(dòng)過程中不會(huì)有設(shè)備通過 DMA 訪問到需要異步 map 的內(nèi)存就成為了關(guān)鍵。這個(gè)過程中,我們用到了大家比較熟悉的 Virtio-balloon,因?yàn)?Virtio-balloon 設(shè)計(jì)之初即被用來(lái)占用虛擬機(jī)內(nèi)存使用,因此我們提出的解決方案不會(huì)涉及到大量、復(fù)雜的軟件改動(dòng),即可完美解決虛擬機(jī)創(chuàng)建耗時(shí)的問題。

圖 2:async DMA map 設(shè)計(jì)思路

Async DMA map 主要設(shè)計(jì)思路就是:虛擬機(jī)創(chuàng)建時(shí),低于 4G 內(nèi)存空間的 DMA map 請(qǐng)求會(huì)被正常處理,其他內(nèi)存空間的 DMA map 操作將會(huì)等待 virtio_balloon 前端驅(qū)動(dòng)加載完成后根據(jù)實(shí)際情況進(jìn)行處理。

具體的操作流程如下:

首先,確保 virtio_balloon 驅(qū)動(dòng)先于 VFIO 設(shè)備驅(qū)動(dòng)加載。這樣 virtio_balloon 驅(qū)動(dòng)會(huì)在配置空間中獲取初始的 balloon 大小,然后再根據(jù) balloon 大小進(jìn)行實(shí)際的虛擬機(jī)內(nèi)存的分配,被分配的內(nèi)存將從可用內(nèi)存中去除。在沒有釋放前,其他設(shè)備將無(wú)法申請(qǐng)到這部分被占用的內(nèi)存,那就不會(huì)被 DMA 訪問到,也就不需要在這之前進(jìn)行 map。

其次,完成 balloon,獲得可異步執(zhí)行 map 內(nèi)存空間。Balloon 的過程是經(jīng)過很多次 inflate 操作完成的。每次操作完成后,前端的 virtio_balloon 會(huì)通知后端完成的 inflate balloon 大小及其對(duì)應(yīng)的 PFN,位于宿主機(jī)上的后端驅(qū)動(dòng)收到通知后,會(huì)將 PFN 從消息隊(duì)列中解析出來(lái),并轉(zhuǎn)換為 IOVA 記錄在 ballooned 頁(yè)表中。待 balloon 完成后,后端驅(qū)動(dòng)會(huì)得到一張完整的被 virtio_balloon 占用的內(nèi)存頁(yè)表,這部分的內(nèi)存空間即是可以異步執(zhí)行 map 的部分。沒有在頁(yè)表中的內(nèi)存可能會(huì)被其他設(shè)備通過 DMA 訪問,因此需要即刻完成 map 操作。

最后,在保證虛擬機(jī)系統(tǒng)可繼續(xù)正常啟動(dòng)的情況下,async DMA map 正式開始。通過向 virtio_balloon 前端驅(qū)動(dòng)觸發(fā) deflate 操作,從而向虛擬機(jī)歸還一定大小的內(nèi)存,前端 virtio_balloon 驅(qū)動(dòng)會(huì)將釋放的內(nèi)存地址同步給后端驅(qū)動(dòng),后端驅(qū)動(dòng)接收到被釋放的內(nèi)存地址空間后,觸發(fā)同步的 DMA map,通過分步的 deflate 及 map,慢慢完成全部?jī)?nèi)存的映射、鎖定,從而使虛擬機(jī)恢復(fù)到完整內(nèi)存資源可用狀態(tài)。

3. 具體實(shí)踐:三個(gè)關(guān)鍵點(diǎn)優(yōu)化,進(jìn)一步優(yōu)化啟動(dòng)時(shí)間

在具體的實(shí)踐中,我們進(jìn)行了 balloon 臨近地址空間自動(dòng)合并、增加單次 balloon 頁(yè)面大小和預(yù)處理機(jī)制等三個(gè)關(guān)鍵點(diǎn)的優(yōu)化,以進(jìn)一步優(yōu)化啟動(dòng)時(shí)間。具體優(yōu)化如下:

(1)Balloon 臨近地址空間自動(dòng)合并。通過合并多次 balloon 的臨近內(nèi)存地址空間,可以顯著地減少觸發(fā) DMA map 的次數(shù)。因?yàn)?virtio_balloon 會(huì)在系統(tǒng)啟動(dòng)初期被加載,此時(shí)的內(nèi)存使用較少,virtio_balloon 申請(qǐng)到的內(nèi)存地址絕大部分是連續(xù)的,臨近內(nèi)存地址的可合并率非常高。

(2)增加單次 balloon 頁(yè)面大小。內(nèi)存資源已經(jīng)不再是非常稀缺的資源,當(dāng)前 virtio_balloon 前端驅(qū)動(dòng)中基于小頁(yè)(4KB)大小的內(nèi)存申請(qǐng)機(jī)制已經(jīng)不太適合當(dāng)前大規(guī)格實(shí)例的業(yè)務(wù)場(chǎng)景。基于業(yè)界用戶實(shí)際應(yīng)用場(chǎng)景的分析,我們將 virtio_balloon 單次申請(qǐng)的內(nèi)存大小從 4KB 提高到 2MB,這一舉措可減少約 98% 的前后端通信消耗,從而顯著減少了不必要的 CPU 資源占用。

(3)預(yù)處理機(jī)制。為了更快的完成異步 DMA map 操作,其實(shí)可以預(yù)先開始進(jìn)行 DMA map 操作,而不是等待 deflate 觸發(fā)并收到 virtio_balloon 前端驅(qū)動(dòng)發(fā)出的通知才進(jìn)行。在接收到前端發(fā)出的通知后,只需要做釋放地址已映射命中檢測(cè)即可。如地址未命中則可以插入 DMA map 操作,若命中則可以更快地返回通知給虛擬機(jī)進(jìn)行后續(xù)的 deflate 操作。


圖 3:VM 啟動(dòng)時(shí)間與內(nèi)存關(guān)系(左)、QEMu 初始化時(shí)間與內(nèi)存關(guān)系(右)

如圖 3,經(jīng)過上述的優(yōu)化(初始保留 8G 內(nèi)存給虛擬機(jī)),我們看到隨著分配給虛擬機(jī)的內(nèi)存增加,KVM 虛擬機(jī)的啟動(dòng)時(shí)間及 QEMU 初始化時(shí)間均沒有明顯增加。即我們將 350G 內(nèi)存 KVM 虛擬機(jī)的創(chuàng)建及啟動(dòng)時(shí)間從原來(lái)的 120 秒以上減少到 20 秒以下,QEMU 初始化時(shí)間縮減到 7 秒以內(nèi)。對(duì)于 T 級(jí)內(nèi)存的用戶,預(yù)計(jì)效率可提升 10 倍以上,可以極快地獲得虛擬機(jī)的訪問控制權(quán)限。

結(jié)語(yǔ)

未來(lái),我們將持續(xù)依托阿里云智能,致力于云計(jì)算產(chǎn)品的性能及用戶體驗(yàn)的優(yōu)化,為用戶提供便捷、高效的彈性計(jì)算產(chǎn)品。

原文鏈接:https://developer.aliyun.com/article/777709?

版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的T级内存,创建效率提升10倍以上,阿里云 KVM异构虚拟机启动时间优化实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。