當前位置:
首頁 > 新聞 > 了解一下ARMv8處理器架構中的虛擬化操作——半導體行業觀察

了解一下ARMv8處理器架構中的虛擬化操作——半導體行業觀察

來源:內容由 微信公眾號 半導體行業觀察(ID:icbank)翻譯自「embedded」,作者 Sergey Temerkhanov&Igor Pochinok,謝謝。

基於ARMv8的系統中的虛擬化工具在這些系統中起著特殊的作用,它由幾個組件組成,雖然ARMv7具有特殊的CPU模式來運行虛擬機管理程序作為擴展,但在ARMv8中,它已成為架構的一部分,並且已經以名稱EL2集成到特權級系統中。同時,該模式僅解決與CPU訪問系統資源相關的問題,例如存儲器和外圍設備。為了提高虛擬化環境中設備啟動的事務的效率,已經為基於ARMv8的系統開發了許多組件,例如新的中斷控制器和IOMMU。本文從軟體開發的角度概述了這些工具組件。

基於ARMv8的系統中的虛擬化如圖1所示:EL2特權級別運行虛擬機管理程序,控制虛擬機(VM)代碼的執行以及它們之間的資源共享。EL1(OS內核,特權代碼)和EL0(非特權代碼)的級別留給VM實例。地址轉換分兩個階段執行(圖2):在第一階段,使用第一級轉換表(TTBR0_EL1 / TTBR1_EL1寄存器中保存的指針)從虛擬地址計算所謂的中間物理地址(IPA); 在第二階段,使用管理程序準備的第二級表計算實際物理地址(指針存儲在VTTBR_EL2寄存器中)。這樣的組織架構可以提供有效的許可權分離和VM與硬體的隔離。

圖1:基於ARMv8的系統中的虛擬化(來源:Auriga)

兩級轉換

兩級轉換允許VM維護自己的轉換表,同時還允許管理程序完全控制最終結果。EL2許可權級別專門用於執行管理程序代碼,與其他級別有一些差異。因此,它是特殊寄存器VTTBR_EL2、VTCR_EL2可訪問的最小特權級別以及用於VM管理的許多其他特權寄存器。

在ARMv8架構的原始版本中,僅為管理程序提供了一個轉換表,而為當前VM提供了另一個轉換表。管理程序可以訪問多個特殊寄存器,通過這些寄存器可以設置EL1級別的VM可見的配置參數,例如CPU標識符(製造商,版本等)和多處理器系統ID。這允許將在同一系統上運行的VM暴露給來自不同版本和製造商的虛擬SMP系統和CPU的不同拓撲。

如果在VM中發生需要管理程序干預的事件,則其處理按如下方式執行:

在EL2級別發生異常;

根據其類型,從表中調用相應的處理程序(該地址存儲在VBAR_EL2寄存器中);

執行必要的行動;

如果需要,將所需值放入登記冊;

管理程序返回到退出發生的VM(如果設計了管理程序,則切換到另一個VM)。

圖2:兩個階段執行的地址轉換

發生此類VM退出異常的事件由HCR_EL2寄存器位定義。因此,這些可以是系統寄存器訪問,包括EL1許可權級別可用的訪問(例如,TTBR0_ EL1 / TTBR1_EL1,FAR_EL1),緩存和TLB刷新指令,常規異常(中斷,包括來自定時器和不支持的操作代碼的中斷),以及中斷和事件等待指令。兩級地址轉換啟用也由該寄存器控制。此外,EL2級還有一個單獨的硬體定時器,它允許管理程序配置周期性中斷,通常用於啟動VM切換,類似於在現代操作系統中切換任務的方式。

切換過程還包括保存當前VM上下文,載入新VM以及將控制轉移給它。同時,VM可以以類似於EL0級別的非特權代碼執行系統調用的方式執行管理程序調用。為了執行這樣的調用,VM將參數放在寄存器中並執行「hvc」指令。這導致以標準方式處理的EL2許可權級別的異常。通常,這在調用標準化PSCI協議功能時發生。

還應該提到的是,管理程序可以攔截從VM到可信代碼常式的調用(例如,在那裡實現非虛擬化環境中的PSCI,並且在最高特權級別EL3處理對它的調用)。ARMv8架構還包含用於提高虛擬化環境性能的其他工具:除了管理程序可以分配的可共享域以減少緩存一致性流量之外,還可以為每個VM分配其自己的標識符或VMID。它的使用使得在切換VM時可以避免「昂貴的」TLB刷新。

原始版本的ARMv8提供了8位標識符,後來擴展為16位。此外,在ARMv8.1中,EL2級別的第二個轉換表TTBR1_EL2作為VM主機擴展的一部分添加,因此,類型2的管理程序(它們是主機操作系統的一部分)具有更多可能性。同時,如上所述,全功能虛擬化需要VM與外圍設備(網路適配器,存儲控制器等)進行交互,同時最小化管理程序參與以及從設備到處理器的交付中斷。

系統存儲管理單元

ARMv8系統中虛擬化環境的各個方面由兩個單元處理:通用中斷控制器(GIC)和系統內存管理單元(SMMU)(圖3)。SMMU執行I / O地址轉換的方式與CPU啟動的存儲訪問相同。該單元支持I / O地址的一級和兩級轉換。因此,可以在VM和管理程序中使用轉換和保護內存區域的優勢。因此,允許設備僅對特定存儲器地址範圍進行讀/寫。

圖3:系統存儲管理單元(SMMU)

此外,有時通過SMMU在I / O緩衝區上組織分散 - 收集操作很方便。轉換階段的使用模型與CPU核心的使用模型幾乎相同(即,第一階段的輸出產生當前VM獨有的IPA,第二階段的輸出產生整個特有的真實物理地址系統)。SMMU轉換表的格式類似於CPU的格式,頁面屬性有一些差異。支持4,16和64 KB的頁面大小以及一個或兩個轉換表,具體取決於寄存器設置和轉換階段,以及完整的48或52位地址空間。

每個涉及的設備都有自己的轉換上下文(最終選擇相關的轉換表集)。可以在多個設備之間共享單個上下文。上下文選擇由單元使用所謂的流ID(硬體相關的設備標識符)來執行。因此,對於PCIe設備(物理或虛擬功能),RID用作複製PCIe配置空間中的設備地址的標識符。SMMU擁有自己的TLB並支持VM ID以加速。在錯誤的配置檢測,轉換錯誤和其他異常的情況下,SMMU斷言所謂的上下文中斷(即,綁定到轉換上下文的中斷)。

SMMU維護類似於CPU內存管理單元(MMU)。但是,處理器MMU上的操作(TLB複位,轉換結果檢索等)是通過特殊指令執行的,而對於SMMU,它們是通過訪問上下文寄存器來執行的。截至2017年底,SMMU規格有多個版本,最新版本為3.1。SMMU版本3.0和3.1支持擴展流ID,並使用RAM中的表來匹配流和上下文的ID。這樣的表可以有一個或兩個級別。表元素包含指向存儲在存儲器中的上下文描述符的指針,以及與元素相關的VM標識符,以及指向第二級轉換表的指針。

反過來,上下文描述符包含指向第一級轉換表的指針。SMMUv3的一個重要特性是能夠在軟體響應之前停止執行事務。這種模型允許設備訪問不在RAM中的頁面或者推測性地分配。SMMU還可以自動設置轉換表中的更改頁面指示位。這可以簡化VM遷移,快照VM狀態等。SMMUv3還支持VM標識符掩碼,允許在不同VM之間共享轉換表,從而降低TLB壓力。

在SMMUv3中,控制和事件信令都已經過顯著重構:該單元使用事件隊列,它是內存中的環形緩衝區,上下文中斷被替換為中斷,該中斷表示隊列中新描述符的出現。要獲取設備訪問的頁面,有一個單獨的隊列,即所謂的頁面請求介面(PRI)。如上所述,代替上下文寄存器,使用存儲器中的控制塊,並且通過將命令描述符寫入命令隊列並提交它們來執行上下文管理。

GIC在虛擬化環境功能中發揮著至關重要的作用。在2017年底,規範的第四個版本是最新版本,而第二個版本是用於ARMv8處理器的最小版本。GIC本身非常複雜,因為需要在多處理器系統中提供中斷(現有的實現可以有256個或更多的硬體線程)。但是,本文僅考慮與虛擬化直接相關的控制器功能。大多數GIC寄存器都沒有虛擬化,這會在訪問時導致VM退出。同時,該規範引入了諸如虛擬中斷之類的概念。

中斷虛擬化

虛擬中斷可以分為兩個虛擬組中的一個:0和1。組0保存所謂的快速中斷請求(FIQ),而組1保存所有其他(中斷請求,IRQ)。處理器以與物理處理完全相同的方式處理虛擬中斷。基於ARMv8的虛擬化環境中的中斷處理組織如下:來自設備的物理中斷被發送到EL2級別(到管理程序),並且如果中斷用於虛擬機管理程序,則管理程序激活虛擬處理器上的相應虛擬中斷。系統和服務中斷都可以路由到虛擬機管理程序。根據GIC規範,管理程序在虛擬化之前處理物理中斷。

支持GIC中的中斷虛擬化由表示虛擬中斷的事件列表支持,存儲在相應的寄存器中並作為虛擬IRQ或FIQ處理。通過處理器寄存器介面控制虛擬中斷類似於物理中斷。因此,在虛擬處理器上運行的軟體能夠執行以下操作:

設置虛擬優先順序掩碼;

控制在組內解釋虛擬優先順序的方式;

確認虛擬中斷;

降低虛擬中斷的優先順序;

停用虛擬中斷。

為了管理虛擬中斷,CPU介面提供了一組系統寄存器,它們位於與物理中斷控制寄存器相同的地址。這意味著控制機制對於VM是絕對透明的。虛擬中斷列表上的寄存器數量是實現定義的,但限制為16,如果定址到虛擬處理器的中斷數超過可用寄存器數,則管理程序可以在內存中存儲相應的事件以將其寫入釋放狀態稍後註冊。中斷的優先順序在硬體中執行。

虛擬介面產生定址到管理程序的中斷,管理程序應該響應事件(空中斷列表,啟用和禁用組,發信號通知不在寄存器中的中斷的中斷結束等)。除了專用外設中斷(PPI)和共享外設中斷(SPI)之外,ARMv8系統還有一類稱為特定於位置的外設中斷(LPI)的消息(消息信號中斷(MSI))發出的中斷信號。

GICv3及更高版本的GIC擴展了對此中斷類的支持,該中斷類可以根據特殊規則(中斷轉換服務(ITS))處理中斷消息。但是,這些功能與虛擬化有某種間接關係,但值得簡要描述它們,以提供GICv4中引入的更改的一般視圖。

圖4:基於ARMv8的系統虛擬化環境中組件與中斷控制器的介面和交互

在使用ITS時,設備通過在GITS_TRANSLATOR寄存器中發出具有目標地址的寫事務來發送事件信號。寫入事務由正在寫入的數據(包含事件ID)和源標識符(與SMMU相同)組成。系統軟體對ITS寄存器進行編程,使它們指向存儲器中的設備、集合和中斷存儲器表,這些存儲器表包含處理來自指定目標CPU核心和中斷ID的相關源的事件的規則。

中斷導致在掛起中斷表中設置元素的相應欄位。對於GICv3,此機制僅針對物理中斷(即,由設備直接發信號通知)進行定義。這導致管理程序實現中的某些不便。特別是,它要求管理程序執行ITS在軟體中完成的所有操作。GICv4引入了以編程方式生成此類中斷並將LPI轉換為為相應虛擬處理器設置的虛擬中斷的功能,為此引入了描述中斷與目標處理器的親和性的附加表,以及虛擬掛起中斷表。如果在中斷到達期間映射到目標vCPU的目標物理CPU核上正在執行具有不同標識符的VM,GICv4生成一個特殊的中斷,旨在通知管理程序。為了控制虛擬中斷的轉換,ITS GICv4命令介面中添加了新的命令類型。

本文描述的工具為虛擬化環境的實現提供了堅實基礎,現在,它們得到了各種虛擬機管理程序(第一類和第二類)的良好支持。總的來說,基於軟體開發人員的請求,CPU和系統設施架構正在不斷發展。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 摩爾精英 的精彩文章:

外媒評史上最糟糕的十大CPU:奔3/奔4、驍龍810入選
三星:明年推5/4nm EUV工藝,2020年上馬3nm GAA

TAG:摩爾精英 |