SMMUv3 (1)

一些詞彙。

DVM: Distributed Virtual Memory,相互傳遞廣播TLB維護操作的消息的協議;

RC: PCI-E的Root Complex,如下圖:

Endpoint(EP): 一個PCIE功能,用於一個SMMU client節點設備的context

PASID: Process Address Space ID,一個PASID是一個Endpoint的本地ID,所以一個系統中一個PASID可能用很多遍,注意:PASID除了名字與PE的ASID有點靠近外,其實與ASID完全沒關係。

ATS: PCIE提供給遠端Endpoint TLB的Address Translation Service。

Split-stage ATS: 兩階段頁錶轉化的SMMU提供的方式,ATS用1階段頁錶轉換,non-ATS用2階段頁錶轉換。

PRI:PCIE引入的Page Request Interface,是ATS的一個擴展項,是其允許Endpoint請求OS提供映射了頁面的內存給DMA使用。

ATOS:SMMU用系統可訪問的寄存器提供VA-IPA/PA轉換;額外的,VATOS提供了次要的寄存器組,用於虛擬機直接使用,不過只能做VA-IPA轉換。

TT:Translation table,就是頁表,arm架構的。

TTD:Translation table discriptor,就是PTE。

HTTU:Hardware Translation Table Update,在訪問或寫入相關頁面後,硬件自動更新相關頁面的Access flag、Dirty state,就叫HTTU。

SSD:Secure StateDetermination,將client設備的一段數據流與Secure或Non-secure控制聯繫起來的方法,確定這段數據流的Secure或Non-secure設置。

STE:Stream table entry,流表條目。

L1STD:1級STE,用於兩級流表。

CD:Context Descriptor,Context描述符。

L1CD:1級CD,用於兩級CD表。

Client deivce:由SMMU控制訪問系統內存行爲能力的設備。

Bypass:一種設置,把一個階段的頁錶轉換不做任何地址轉化,這種直通模式就是使用bypass;如果一個SMMU沒有實現哪一階段地址轉換,那麼這個階段的地址轉換就可以認爲是Bypass了。

Stage N-only:一種對一段數據流的轉換設置,兩階段轉換隻轉換一個階段,另一個Bypass掉,可以是設置成這樣,也可以是SMMU被實現成這樣

E2H:EL2 Host Mode,詳見VHE的說明。

TR:Translation Request,用於在一個PCIE ATS的context中,請求SMMU或是其他實現來做請求中心節點做地址轉換。

簡述:

SMMU的行爲與PE的MMU類似,在系統I/O設備的DMA請求發到系統之前進行地址轉換。SMMU只爲DMA工作。

對DMA的地址進行轉換是爲了隔離或快捷,爲了將設備通訊與轉換相關聯,還要區分SMMU背後不同的設備,轉換請求還需要除了地址、R/W、權限以外的額外屬性,用來分辨一個流的屬性;不同的流在邏輯上與不同的設備相關聯,SMMU可以對不同的流實現不同的轉換或檢查,就算一個系統裝置有一個client設備,SMMU的概念仍然不會變,只是會只有一個流。

一個系統中可能有很多個SMMU,一個SMMU可能爲1個或多個設備做轉換。

SMMU支持2階段頁錶轉換的方式與PE的MMU相似,1階段VA->IPA,2階段IPA->PA;1階段轉換主要是爲了在一個VM內的DMA隔離,2階段一般在支持虛擬化擴展的設備實現將DMA設備的虛擬化到VM內。

SMMUv1僅支持不多的context/流,通過寄存器設置,有限的可擴展性;SMMUv2把SMMUv1拓展到了ARMv8-A頁錶轉換格式,更大的尋址空間,同樣有限的context/流的支持。SMMUv1/v2映射一個數據流到基於寄存器的context內,這個context指示使用什麼轉換表、轉換設置;同樣也可能支持2階段轉換,而轉換時的流會使用額外生成的ID來標誌,還有一個次級ID來標誌一個流或一組流的Security狀態;基於寄存器的設置限制了context的數量,支持上千個context是不可能的,一個活着的數據流是可能在任意時間觸發轉換的,而能支持的context量其實就是同時活着的流的數量;比如說1000個連接了但沒有數據出現的網卡,雖然此時沒有數據出現,但是它的數據可能在任意時間出現,也就是DMA會在任意時間請求轉換,所以就會佔context,而且不能多設備分時使用SMMU,畢竟這是硬件中斷級別的使用,切換SMMU的context足以讓硬件裏緩存耗盡,數據丟失了吧。

SMMUv3.0特性:

SMMUv3提供了支持PCIE Root Complexes的特性,並通過支持大量並行轉換contex支持其他潛在大量I/O的系統。

1. 基於內存的配置結構,支持大量的流;

2. 具體實現可僅1階段、僅2階段或兩階段頁錶轉換,從寄存器裏可以查到具體實現,其他根據實現選配的參數也可以查到;

3. 最高16bit ASIDs

4. 最高16位VMIDs

5. 根據ARMv8.1虛擬內存系統架構實現地址轉換和保護;SMMU轉換表可與PE們共享,允許軟件選擇共享頁表或SMMU私有頁表;

6. 49bit VA,符合ARMv8-A的2x48bit轉換表輸入大小;

還支持選配實現如下:

1. 可僅1階段、僅2階段或兩階段;

2. 可支持aarch32 LPAE頁表格式和aarch64頁表格式;

3. 支持安全域的流;

4. 廣播TLB失效;

5. HTTU可能僅支持硬件更新Access flag或同時支持硬件更新Access flag和Dirty state,也可以沒有HTTU;

6. 兼容Root Complex的PCIE ATS 和 PRI;

7. 16K和64K頁表粒度,建議基於服務器的系統架構實現應實現兩階段頁錶轉換並使用64KB頁表,這樣與PE相對齊;

SMMU3.0不與之前SMMU版本兼容;

SMMU3.1特性:

在SMMU3.0的基礎上,增加了:

1. 支持ARMv8.2-A:可以支持52bit VA、IPA、PA;Page-Based Hardware Attribute;2階段頁表的EL0 vs EL1 execute never控制;ARMv8.2中的PE的概念Common not Private(CnP)並不適用於SMMU架構,因爲所有SMMU轉換都按common處理

2. 其他一些cache相關和性能監視相關的特性

SMMU_AIDR[7:0]==0x0000是SMMUv3.0,0x0001是SMMUv3.1

 

SMMU在系統中的位置:

下圖中有兩種SMMU的使用方式,一種使用方式是兩個client設備經SMMU從系統取數據,設備的DMA可以使用VA、IPA或是其他總線地址,SMMU將這地址轉換成PA;另一種使用方式是SMMU與PCIE的Root Complex一對一的接到了一起,Root Complex自己管着一票Endpoints,SMMU給出了一個ATS port來支持PCIE的ATS和PRI,當然,這個ATS也可能是兼容其他非PCIE設備的相近功能。

正在發生的對slave設備的訪問不能避過SMMU,一般來說,master在SMMU後面,就像PE在MMU後面一樣,因此進行中的對slave設備的訪問需要master的SMMU調和,如果master沒有SMMU,那麼他的DMA就可以有全系統訪問能力,因此其DMA需要軟件設置,這種情況下,只有最高權限才能進行設置。

SMMU有自己的程序接口,能接受系統軟件的設置和維護,並且每個SMMU都要單獨設置,SMMU也能訪問自己的設置,比如TTW;SMMU自行訪問內存的通道是否與其client設備共享由具體實現決定。

ARM推薦項:SMMU橋接I/O設備的DMA地址應該到系統或物理地址;SMMU應該放在設備master或是I/O與系統之間;SMMU不應該串聯到一起,就是說,SMMU到內存或其他slave設備不應經過另一個SMMU。

系統的SMMU master接口想要實現IO一致行,從而爲SMMU的client設備提供IO一致性訪問;SMMU slave接口對從設備來的數據流不需要任何一致性支持;另外,由於在傳出方向上沒有地址轉換,因此偵聽流量不能從系統到達客戶端設備,因此無法將全一致性設備放在SMMU後面。

將SMMU作爲包含全一致性緩存的複雜設備的一部分是可行的,就像PE的MMU一樣;不過這意味着緩存就需要用物理地址做標籤。

圖片發自簡書App

上圖給出了3個實現SMMU的實例:

1. SMMU A作爲一個複雜設備的一部分,僅爲此設備提供轉換服務,ARM希望這種實現在出了設備特定控制以外,還提供SMMU編程接口,這一設計可以提供專用的無需爭用的頁表翻譯和TLB;

2. SMMU B則是一個集成了頁錶轉換、編程接口和TTW功能的整體,兩個client設備使用此SMMU作爲DMA進入系統的途徑;

3. SMMU C是分佈式的,並能提供多路徑到系統實現更高帶寬;其包含:一箇中心TTW,具有自己的master接口用於獲取轉換和配置結構及隊列,還有自己的slave接口用於接受編程訪問,這個單元可能包含一個宏TLB和配置的緩存;一些遠程TLB單元,在轉換miss時向中心TTW發轉換請求,並將結果緩存到本地,圖上展示了兩個遠程TLB單元,一個遠程TLB單元通過1個端口支持了一組3個設備,還有一個遠程TLB單元連接到PCIE Root Complex。第二個遠程TLB單元還提供了一個ATS接口給Root Complex,所以PCIE Endpoint可以使用ATS來發起轉換請求到中心TTW。

在所有情況下,在軟件層看來都是一個設備連接在邏輯上分開的SMMU後面;所有實現都像是讀寫操作從client設備到離散的SMMU,但實際上其實是設備直接執行讀寫到系統,但使用SMMU提供的轉換。這樣就允許一個SMMU驅動驅動起各種不同的SMMU實現,設備可能整合了TLB或整個SMMU來提升性能,但是緊耦合的TLB可能還被用於爲全一致設備緩存提供物理地址的匹配;無論實現什麼實現方式,他們的行爲對於軟件來說是一致的。

 

SMMU的三個軟件接口

1. 基於內存的數據結構,用來將設備映射到負責轉換client設備地址的轉換表;

2. 基於內存的環形緩衝隊列,一個用於放給SMMU的指令的指令隊列,一個用於放從SMMU回報事件的事件隊列,一個PRI隊列來接收PCIE頁面請求;注意只有支持PRI服務的SMMU纔有PRI隊列,這個額外的隊列允許處理從設備來的PRI請求而不與回報事件隊列混合。

3. 一組寄存器,有些僅用於安全域,用於發現和SMMU全局配置。

SMMU用寄存器指示內存數據結構、隊列的基地址,用寄存器提供功能檢測和標誌寄存器,另有全局控制寄存器控制啓動隊列處理和流量轉換;如果支持安全域,則存在一組附加的寄存器來允許安全域軟件維護安全域設備數據結構,在安全域指令隊列中發佈命令、讀取安全域事件。

在允許1階段轉換的虛擬化場景,GuestOS被提供了與SMMU實現完全相同的編程接口,所以GuestOS會認爲自己控制着一個真的SMMU,擁有同樣的指令、事件、可選的PRI、隊列、以及基於內存的數據結構,不過只有1階SMMU。

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 3373
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章