隨著云計算領域里,ARM架構處理器的廣泛使用,應用開發(fā)人員熟悉ARM架構相關技術的需求越來越迫切。眾所周知,提供虛擬機服務是云計算的典型應用場景,而虛擬機里設備性能的優(yōu)劣對服務質(zhì)量至關重要。
提到虛擬機里的設備,就不得不提及設備的虛擬化,最初虛擬機里的設備完全是依靠軟件模擬來實現(xiàn),也叫全虛擬化設備,這樣的好處是運行在物理機里的OS可以完全不需要修改就能在虛擬機里運行,但設備性能很差,滿足不了人們的需求。
后來,有人提出了半虛擬化的思想,寄希望于軟件的優(yōu)化,比如修改設備模型,減少不必要的內(nèi)存拷貝,來滿足大家對設備的性能需求。典型代表virtio設備。此法使性能雖有較大提升,但與真實的設備仍有較大差距。為了獲取等同于真實設備的性能,設備直通的方式被提了出來,也漸漸成為主流方式。
虛擬機里使用直通的設備,的確可以帶來最大的性能提升。但是卻暴漏出一系列的系統(tǒng)安全問題。比如提供DMA的設備通??梢詫憙?nèi)存的任意頁,因此虛擬機里的Guest OS擁有創(chuàng)建DMA的能力就等同于用戶空間擁有了root權限,惡意的設備可能利用此發(fā)動DMA攻擊,給其他虛擬機乃至整個物理機帶來安全問題。
因此,需要提供DMA重映射功能,通過頁表方式將直通設備對內(nèi)存的訪問限制到特定的域中,在提高IO性能的同時完成了直通設備的隔離,保證了直通設備DMA的安全性。此外,直通設備的中斷默認是發(fā)給物理CPU的,要想通知到虛擬機里的vCPU,就需要中斷的重定向。
DMA重映射跟中斷重定向的實現(xiàn),最初是完全交由虛擬機監(jiān)控器(Hypervisor)或模擬器(比如qemu)來負責。這是一種純軟件的思路,必然大大降低設備的性能,因此急需硬件的參與配合。為此,ARM的SMMU和GIC規(guī)范順勢添加了對DMA重映射跟中斷重定向的支持。本文的重點便是圍繞這兩大特性介紹如何支持虛擬化環(huán)境下的設備直通。
一、DMA重映射
SMMU是System MMU的縮寫,是ARM架構下一種對非CPU設備提供地址翻譯服務的組件,功能類似于CPU的MMU組件。這里非CPU設備主要指發(fā)起DMA操作的外圍子系統(tǒng)。如下圖所示:

注:PE為Processing Element 的縮寫,可理解為CPU。
在虛擬化應用場景下,地址翻譯往往分為兩個階段。階段一是虛擬地址(VA)到GuestOS認為的物理地址(IPA)間的轉(zhuǎn)換;階段二為IPA到真實物理地址(PA)間的轉(zhuǎn)換。而SMMU既可以同時支持兩個階段的轉(zhuǎn)換,也可以單獨支持每個階段的轉(zhuǎn)換。這為直通設備DMA重映射提供了可能。直通設備的DMA只需要獲取IPA,之后的工作便交由SMMU來做階段二的處理,以達到安全高效的訪問PA的目的。如下圖所示:

針對以上應用場景,我們介紹SMMU的內(nèi)部結構來闡述具體實現(xiàn)原理。SMMU含有兩個核心單元,分別為翻譯控制單元TCU和翻譯緩沖單元TBU。其中TCU主要含有Stream Mapping Table(SMT)和Context Bank Table(CBT)。SMT通過StreamID來索引內(nèi)部的Entry,StreamID跟具體直通設備一一對應, 從而獲取到指向CBT具體Entry的指針。
CBT的Entry內(nèi)容則含有階段二翻譯表的指針,當獲取到此指針后,翻譯過程即可像普通MMU一樣按部就班的進行下去。而TBU的作用等同于TLB,借助Cache原理,加快SMMU工作效率,不再贅述。以上描述過程總結為如下框圖所示:

二、中斷重定向
GIC是Generic Interrupt Controller的縮寫。GIC的主要作用是路由各種不同的中斷信息給CPU。虛擬化環(huán)境下的中斷處理情形要復雜的多,有些因指令trap產(chǎn)生的中斷需要Hypervisor本身來處理;有些是分配給某個虛擬機的直通設備產(chǎn)生的中斷則需要虛擬機內(nèi)的軟件來處理;也有中斷被接收時,對標的虛擬機沒有處于運行狀態(tài)的情況。這需要GIC提供機制,重定向中斷以滿足上述復雜的需求。
由于本文的重點是對直通設備虛擬化支持的講解,因此此部分將介紹GIC是如何支持直通設備中斷重映射的,并不會剖析GIC內(nèi)部組成及實現(xiàn)原理。我們以GICv3為例,圖示如下:

配以如下步驟說明:
1 直通設備發(fā)起的中斷IRQ到達GIC;
2 GIC發(fā)物理的IRQ到CPU;
3 Hypervisor會從Physical CPU Interface讀取中斷信息;
4 Hypervisor發(fā)現(xiàn)此中斷是某虛擬機內(nèi)的直通設備觸發(fā),于是通過寫GIC List Register重新注入一個虛擬IRQ到GIC中;
5 GIC產(chǎn)生vIRQ中斷并發(fā)給vCPU;
6 最終vCPU接收vIRQ中斷并由運行其上的GuestOS接管并通過跟Virtual CPU interface交互處理后續(xù)中斷任務。
至此,一個完整的中斷重映射過程結束。
在GIC參與直通設備的中斷重映射后,虛擬機在處理中斷效率上有了明顯提升,但是跟Host主機上普通物理中斷相比,總是多了一步由軟件Hypervisor參與的動作。因此,我們稱以上方式為間接注入中斷的方式。為了進一步提高處理中斷的效率,GICv4引入了直接注入中斷方式。
具體原理則是直通設備在獲取中斷時,GIC會將分配給設備的物理中斷與虛擬中斷做一個映射。這樣當設備觸發(fā)中斷時,GIC會直接發(fā)信號給vCPU。有這樣一種情況,設備觸發(fā)中斷時vCPU沒有運行,即虛擬機處于休眠態(tài),如果直接發(fā)vIRQ給vCPU是得不到響應的,這時候會產(chǎn)生一個物理的door-bell中斷來代替,此中斷交由Hypervisor處理,它會重新調(diào)度vCPU,從而使中斷得到及時響應。
審核編輯:劉清
-
ARM處理器
+關注
關注
6文章
361瀏覽量
43180 -
dma
+關注
關注
3文章
580瀏覽量
105644 -
模擬器
+關注
關注
2文章
1004瀏覽量
45481 -
虛擬機
+關注
關注
1文章
971瀏覽量
30287
原文標題:Arm對虛擬化下設備直通的支持
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
探討一下ARM處理器平臺的虛擬化
ARM的虛擬化技術是什么?如何去實現(xiàn)呢
對硬件虛擬化及其相關邏輯進行羅列與理解
【學習打卡】OpenHarmony的設備虛擬化技術介紹
設備仿真模擬軟件 QEMU 8.0 發(fā)布:改進對 ARM / RISC-V 架構支持
Arm通用中斷控制器GICv3和GICv4對虛擬化的支持
Arm虛擬硬件用戶指南
如何使用Proteus進行ARM的虛擬開發(fā)
arm架構的虛擬化是什么
對ARM虛擬化下設備直通的支持進行介紹
評論