最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

認(rèn)識(shí)SMMU以及理理SMMU與TrustZone的聯(lián)系

2023-08-16 22:11 作者:ARMTrustZone  | 我要投稿

認(rèn)識(shí)SMMU以及理理SMMU與TrustZone的聯(lián)系


一、SMMU?

最近看了兩篇文章很精彩,這里來(lái)一起學(xué)習(xí)一下,鏈接放在了文末,感謝前輩的優(yōu)秀文章。

1-什么是SMMU?

SMMU(system mmu),是I/O device與總線之間的地址轉(zhuǎn)換橋。

它在系統(tǒng)的位置如下圖:

在這里插入圖片描述

它與mmu的功能類似,可以實(shí)現(xiàn)地址轉(zhuǎn)換,內(nèi)存屬性轉(zhuǎn)換,權(quán)限檢查等功能。

2-為什么需要SMMU?

了解SMMU出現(xiàn)的背景,需要知道系統(tǒng)中的兩個(gè)概念:DMA和虛擬化。

DMA:((Direct Memory Access),直接內(nèi)存存取, 是一種外部設(shè)備不通過(guò)CPU而直接與系統(tǒng)內(nèi)存交換數(shù)據(jù)的接口技術(shù) 。外設(shè)可以通過(guò)DMA,將數(shù)據(jù)批量傳輸?shù)絻?nèi)存,然后再發(fā)送一個(gè)中斷通知CPU取,其傳輸過(guò)程并不經(jīng)過(guò)CPU, 減輕了CPU的負(fù)擔(dān)。但由于DMA不能像CPU一樣通過(guò)MMU操作虛擬地址,所以DMA需要連續(xù)的物理地址。

虛擬化:在虛擬化場(chǎng)景, 所有的VM都運(yùn)行在中間層hypervisor上,每一個(gè)VM獨(dú)立運(yùn)行自己的OS(guest OS),Hypervisor完成硬件資源的共享, 隔離和切換。

在這里插入圖片描述

但對(duì)于Hypervisor + GuestOS的虛擬化系統(tǒng)來(lái)說(shuō), guest VM使用的物理地址是GPA, 看到的內(nèi)存并非實(shí)際的物理地址(也就是HPA),因此Guest OS無(wú)法正常的將連續(xù)的物理地址分給硬件。

因此,為了支持I/O透?jìng)鳈C(jī)制中的DMA設(shè)備傳輸,而引入了IOMMU技術(shù)(ARM稱作SMMU)。

總而言之,SMMU可以為ARM架構(gòu)下實(shí)現(xiàn)虛擬化擴(kuò)展提供支持。它可以和MMU一樣,提供stage1轉(zhuǎn)換(VA->PA), 或者stage2轉(zhuǎn)換(IPA->PA),或者stage1 + stage2轉(zhuǎn)換(VA->IPA->PA)的靈活配置。

[VA:虛擬地址;IPA: 中間物理地址;PA:物理地址]

在這里插入圖片描述

3-SMMU常用概念

  • ??StreamID 一個(gè)平臺(tái)上可以有多個(gè)SMMU設(shè)備,每個(gè)SMMU設(shè)備下面可能連接著多個(gè)Endpoint, 多個(gè)設(shè)備互相之間可能不會(huì)復(fù)用同一個(gè)頁(yè)表,需要加以區(qū)分,SMMU用StreamID來(lái)做這個(gè)區(qū)分( SubstreamID的概念和PCIe PASID是等效的)

  • ??STE Stream Table Entry, STE里面包含一個(gè)指向stage2地址翻譯表的指針,并且同時(shí)還包含一個(gè)指向CD(Context Descriptor)的指針.

  • ??CD Context Descriptor, 是一個(gè)特定格式的數(shù)據(jù)結(jié)構(gòu),包含了指向stage1地址翻譯表的基地址指針

4-SMMU數(shù)據(jù)結(jié)構(gòu)查找

SMMU翻譯過(guò)程需要使用多種數(shù)據(jù)結(jié)構(gòu),如STE, CD,PTW等。

4.1 SID查找STE

Stream Table是存放在內(nèi)存中的一張表,在SMMU驅(qū)動(dòng)初始化時(shí)由驅(qū)動(dòng)程序創(chuàng)建好。

Stream table有兩種格式,一種是Linear Stream Table, 一種是2-level Stream Table.

  • ?

    1. 1.?Linear Stream Table

在這里插入圖片描述

Linear Stream Table是將整個(gè)stream table在內(nèi)存中線性展開(kāi)成一個(gè)數(shù)組, 用Stream Id作為索引進(jìn)行查找.

Linear Stream Table 實(shí)現(xiàn)簡(jiǎn)單,只需要一次索引,速度快;但是平臺(tái)上外設(shè)較少時(shí),浪費(fèi)連續(xù)的內(nèi)存空間。

  • ?

    1. 1.?2-level Stream Table

在這里插入圖片描述

2-level Stream Table, 顧名思義,就是包含2級(jí)table, 第一級(jí)table, 即STD,包含了指向二級(jí)STE的基地址STD。第二級(jí)STE是Linear stream Table. 2-level Stream Table的優(yōu)點(diǎn)是更加節(jié)省內(nèi)存。

SMMU根據(jù)寄存器配置的STRTAB_BASE地址找到STE, STRTAB_BASE定義了STE的基地值, Stream id定義了STE的偏移。如果使用linear 查找, 通過(guò)STRTAB_BASE + sid * 64(一個(gè)STE的大小為64B)找到STE;若使用2-level查找, 則先通過(guò)sid的高位找到L1_STD(STRTAB_BASE + sid[9:8] * 8, 一個(gè)L1_STD的大小為8B), L1_STD定義了下一級(jí)查找的基地址,然后通過(guò)sid 找到具體的STE(l2ptr + sid[7:0] * 64).

最終找到的STE如下所示,表中的信息包含屬性相關(guān)信息, 翻譯模式信息(是否 stream bypass, 若否,選擇stage1, stage2或者stage1 + stage2翻譯模式)。

在這里插入圖片描述

找到STE后可以進(jìn)一步開(kāi)始S1翻譯或S2翻譯.

4.2 SSID查找CD

CD包含了指向stage1地址翻譯表的基地址指針.

如下圖所示, STE指明了CD數(shù)據(jù)結(jié)構(gòu)在DDR中的基地址S1ContextPTR, SSID(substream id)指明了CD數(shù)據(jù)結(jié)構(gòu)的偏移,如果SMMU選擇進(jìn)行l(wèi)inear, 則使用S1ContextPTR + 64 * ssid 找到CD。如果SMMU選擇2-level, 則使用ssid進(jìn)行二級(jí)查找獲得CD(與上節(jié)STE的方式一致)。

在這里插入圖片描述

最終找到的CD如下所示:

在這里插入圖片描述

表中信息包含memory屬性,翻譯控制信息,異常控制信息以及Page table walk(PTW)的起始地址TTB0, TTB1, 找到TTBx后,就可以PTW了。

5. SMMU地址轉(zhuǎn)換

5.1 單stage的地址轉(zhuǎn)換:

在這里插入圖片描述
  • ??TTB 和 VA[47:39]組成獲取Level0頁(yè)表的地址PA;

  • ??Level0頁(yè)表中的next-level table address 和 VA[38:30]組成獲取Level1的頁(yè)表地址PA;

  • ??Level1頁(yè)表中的next-level table address 和 VA[29:21]組成獲取Level2的頁(yè)表地址PA;

  • ??Level2頁(yè)表中的next-level table address 和 VA[20:12]組成獲取Leve3的頁(yè)表地址PA;

  • ??level3頁(yè)表中的output address和va[12:0]組成獲取組后的鉆換地址

在stage1地址翻譯階段:硬件先通過(guò)StreamID索引到STE,然后用SubstreamID索引到CD, CD里面包含了stage1地址翻譯(把進(jìn)程的GVA/IOVA翻譯成IPA)過(guò)程中需要的頁(yè)表基地址信息、per-stream的配置信息以及ASID。

在stage1翻譯的過(guò)程中,多個(gè)CD對(duì)應(yīng)著多個(gè)stage1的地址翻譯,通過(guò)Substream去確定對(duì)應(yīng)的stage1地址翻譯頁(yè)表。所以,Stage1地址翻譯其實(shí)是一個(gè)(RequestID, PASID) => GPA的映射查找過(guò)程。

在使能SMMU兩階段地址翻譯的情況下,stage1負(fù)責(zé)將設(shè)備DMA請(qǐng)求發(fā)出的VA翻譯為IPA并作為stage2的輸入, stage2則利用stage1輸出的IPA再次進(jìn)行翻譯得到PA,從而DMA請(qǐng)求正確地訪問(wèn)到Guest的要操作的地址空間上。

在stage2地址翻譯階段:STE里面包含了stage2地址翻譯的頁(yè)表基地址(IPA->HPA)和VMID信息。如果多個(gè)設(shè)備被直通給同一個(gè)虛擬機(jī),那么意味著他們共享同一個(gè)stage2地址翻譯頁(yè)表。

在兩階段地址翻譯場(chǎng)景下, 地址轉(zhuǎn)換流程步驟:

Guest驅(qū)動(dòng)發(fā)起DMA請(qǐng)求,這個(gè)DMA請(qǐng)求包含VA + SID前綴

DMA請(qǐng)求到達(dá)SMMU,SMMU提取DMA請(qǐng)求中的SID就知道這個(gè)請(qǐng)求是哪個(gè)設(shè)備發(fā)來(lái)的,然后去StreamTable索引對(duì)應(yīng)的STE

從對(duì)應(yīng)的STE表中查找到對(duì)應(yīng)的CD,然后用ssid到CD中進(jìn)行索引找到對(duì)應(yīng)的S1 Page Table

IOMMU進(jìn)行S1 Page Table Walk,將VA翻譯成IPA并作為S2的輸入

IOMMU執(zhí)行S2 Page Table Walk,將IPA翻譯成PA,地址轉(zhuǎn)化結(jié)束。

6. SMMU command queue 與 event queue

系統(tǒng)軟件通過(guò)Command Queue和Event Queue來(lái)和SMMU打交道,這2個(gè)Queue都是循環(huán)隊(duì)列。

Command queue用于軟件與SMMU的硬件交互,軟件寫(xiě)命令到command queue, SMMU從command queue中 地區(qū)命令處理。

Event Queue用于SMMU發(fā)生軟件配置錯(cuò)誤的狀態(tài)信息記錄,SMMU將配置錯(cuò)誤信息寫(xiě)到Event queue中,軟件通過(guò)讀取Event queue獲得配置錯(cuò)誤信息并進(jìn)行配置錯(cuò)誤處理。

在這里插入圖片描述

5.2 stage1+stage2的地址轉(zhuǎn)換:

在這里插入圖片描述

二、SMMU軟硬件模型

SMMU的全稱是System Memory Management Units, 它屬于Arm的System IP, 主要給其他Master來(lái)使用,其連頁(yè)表格式和Core MMU是一樣的,理論上可以讓Core的MMU和SMMU使用同一套頁(yè)表.

那么SMMU都是用在哪些地方呢?*以下展示了一個(gè)usecase,來(lái)自arm官方博客(February 17, 2014),也是比較早期的一個(gè)Sample case

在這里插入圖片描述

1-SMMU的使用模型

SMMU全稱System Memory Management Unit,其實(shí)SMMU和MMU具有同樣的作用,區(qū)別是供給Master使用,同樣提供頁(yè)表轉(zhuǎn)換工作,Master可通過(guò)頁(yè)表轉(zhuǎn)換訪問(wèn)物理地址,達(dá)到Master一樣使用虛擬地址

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2-SMMU的硬件原理圖

學(xué)過(guò)MMU的人都知道,MMU是由 TLB+AddressTranslation, 那么對(duì)于SMMU呢?它是由TBU + TCU組成,其中TBU中含有TLB,?TCU緩存地址翻譯DTI則是SMMU內(nèi)部的連接總線的協(xié)議。

在這里插入圖片描述

而一個(gè)SMMU中可以放置多個(gè) ACE-LiteTBU模塊,也可以放置 LTI TBU

在這里插入圖片描述

3-TBU原理圖

在這里插入圖片描述

LTI TBU的原理圖

在這里插入圖片描述

4-TCU的原理圖

在這里插入圖片描述

5-小結(jié)

  • ??(1)MMU 只能給 一個(gè)core用。而SMMU想給多個(gè)master用,多個(gè)master又對(duì)應(yīng)不同的表。所以就搞了個(gè)STE。每一個(gè)STE entry里,都可以指向多個(gè)context descriptor (我覺(jué)得一般也就只用一個(gè)吧),然后每一個(gè)context descriptor 就相當(dāng)于 MMU的TTBRx + TCR寄存器。context Descriptor之后,就和普通的MMU一樣

  • ??(2)SMMU里有兩套寄存器,一套是給安全master用的,一套是給非安全master用的。從軟件視角來(lái)看,其實(shí)就相當(dāng)于有兩個(gè)SMMU了。但這不是banked,他們的寄存器名字不一樣,一類帶了S,一類不帶S。而且寄存器memory-map的地址還不一樣。

  • ??(3)SMMU又有Secure STE 和 Non-secure STE的概念, Secure STE 后面的頁(yè)表/地址轉(zhuǎn)換,可以轉(zhuǎn)secure memory,也可以轉(zhuǎn)non-secure memory。Non-Secure STE 后面的頁(yè)表/地址轉(zhuǎn)換,只可以轉(zhuǎn)non-secure memory。這和MMU里的Descriptor里的NS比特也是一樣的。

這幾句總結(jié)的太Nice了,看了這個(gè)部分,剛剛好來(lái)看看下面的這個(gè)PART。

三、SMMU跟TrustZone啥關(guān)系?

一、前言

在實(shí)際的項(xiàng)目中有些Master也是要訪問(wèn)Secure Memory的,例如DPU,DMA等。

英偉達(dá)首席執(zhí)行官黃仁勛曾在演講中表示:“?DPU?將成為未來(lái)計(jì)算的三大支柱之一,未來(lái)的數(shù)據(jù)中心標(biāo)配是‘?CPU?+?DPU?+?GPU?’。CPU?用于通用計(jì)算,?GPU?用于加速計(jì)算,?DPU?則進(jìn)行數(shù)據(jù)處理。”

二、為什么需要SMMU

TrustZone的基本原理是將系統(tǒng)資源劃分成安全和非安全兩部分,CPU本身支持TrustZone,可以發(fā)出安全訪問(wèn)和非安全訪問(wèn)。

但是SoC的其他Master也需要訪問(wèn)memory,在有些場(chǎng)景下也需要訪問(wèn)安全memory和非安全memory,那該怎么去實(shí)現(xiàn)呢?

可以由幾種不同的實(shí)現(xiàn)方式,有些Master本身就支持TrustZone,可以發(fā)出安全訪問(wèn)和非安全訪問(wèn),例如Arm的DMA直接就可以發(fā)出安全訪問(wèn)或者非安全訪問(wèn)。

但是第三方的Master可能不支持TrustZone,可以在IP前面加安全控制器來(lái)實(shí)現(xiàn),例如這個(gè)控制器是Secure only的,可以通過(guò)TEE對(duì)安全控制器進(jìn)行編程,Master發(fā)出的訪問(wèn)不Care安全或者非安全,通過(guò)控制器來(lái)擴(kuò)展TrustZone功能,但是這種方式很大局限性;另外一種方法就是我們可以今天介紹的SMMU來(lái)實(shí)現(xiàn)。

三、SMMU的原理機(jī)制

SMMU是Arm的System IP,幾乎是跟CPU演進(jìn)結(jié)合最緊密的一個(gè)IP。

我們知道CPU內(nèi)部有個(gè)MMU,SMMU就是跟MMU非常相似,是System MMU,主要給其他Master來(lái)使用,連頁(yè)表格式也是一樣的,只是編程方式不同,理論上可以讓CPU的MMU和SMMU可以使用同一套頁(yè)表。

增加SMMU后,其他Master也相當(dāng)于有了MMU的功能,MMU是CPU的重要部分,主要是由兩部分組成,一部分是TLB用來(lái)Cache VA<->PA的轉(zhuǎn)換關(guān)系,一部分是Table Walk Unit,如果TLB里沒(méi)有找到VA<->PA的轉(zhuǎn)換關(guān)系,該Table Walk Unit就從頁(yè)表里查詢VA和PA的轉(zhuǎn)換關(guān)系。

對(duì)于TrustZone系統(tǒng)

對(duì)于TrustZone系統(tǒng)來(lái)說(shuō),MMU也是非常重要的,例如在Armv7-A的架構(gòu)中很多MMU的寄存器都是banked,可以簡(jiǎn)單認(rèn)為Secure world和Normal World都有一個(gè)MMU,在Armv8-A里是通過(guò)軟件保存上下文來(lái)實(shí)現(xiàn)的,還有CPU在安全狀態(tài)時(shí)發(fā)出的都是安全訪問(wèn),當(dāng)MMU enable后,可以通過(guò)頁(yè)表里的NSbit來(lái)控制發(fā)出的是安全訪問(wèn),還是非安全訪問(wèn),同時(shí)也會(huì)把安全信息也會(huì)存儲(chǔ)在TLB里。

SMMU的架構(gòu)

CPU架構(gòu)在不斷的演進(jìn),增加了很多feature,這些feature的使能或者控制位都是存儲(chǔ)在頁(yè)表,如果其他Master也想使用這些feature,那么SMMU的架構(gòu)也需要跟隨者演進(jìn),例如SMMUv1主要是支持Armv7-A的頁(yè)表格式,SMMUv2主要是支持Armv8.1-A的頁(yè)表格式,SMMUv3相對(duì)SMMUv2更新很大,除了支持最新Armv8.x-A的特性,同時(shí)支持更多的context,支持PCIe,也支持Message based interrupt配合GICV3等。

那其他Master通過(guò)SMMU可以支持下面的功能:

在這里插入圖片描述

地址轉(zhuǎn)換:SMMU跟MMU一樣,支持兩級(jí)轉(zhuǎn)換Stage 1 Translation和Stage2 Translation,例如VA<->IPA<->PA,但是在現(xiàn)實(shí)使用中,也可以直接bypass,stage 1 only,stage2 only,或者Stage 1+Stage 2

在這里插入圖片描述

內(nèi)存保護(hù)(S)MMU除了支持地址轉(zhuǎn)換外,內(nèi)存屬性也是重要的部分,例如可以在頁(yè)表內(nèi)配置讀寫(xiě)權(quán)限,執(zhí)行權(quán)限,訪問(wèn)權(quán)限等

在這里插入圖片描述

隔離:SMMU同時(shí)可以給多個(gè)Master使用,例如SMMUv2支持128個(gè)contexts,SMMUv3支持更多的Contexts,因?yàn)樵赟MMUv2中contexts的信息是保存在寄存器,在SMMUv3中context的信息是存儲(chǔ)在內(nèi)存里面,通過(guò)StreamID來(lái)查詢,Stream ID是32位的。CPU可以和其他Master使用同一套頁(yè)表,或者CPU可以SMMU單獨(dú)建立頁(yè)表,或者可以為每個(gè)Master建立一套或者多套頁(yè)表,來(lái)控制不同的訪問(wèn)區(qū)域。

在這里插入圖片描述

TrustZone:如果Master不支持TrustZone,可以通過(guò)SMMU來(lái)支持,例如在該Master發(fā)出訪問(wèn)時(shí)通過(guò)對(duì)應(yīng)頁(yè)表的屬性來(lái)配置,尤其是到Armv8.4 Secure world virtulization,SMMU的作用會(huì)更大。

在這里插入圖片描述

前面提到的都是支持的功能,我們也可以通過(guò)一些例子來(lái)解釋哪些場(chǎng)景下需要SMMU,例如

  • ??訪問(wèn)非連續(xù)的地址:現(xiàn)在系統(tǒng)中很少再預(yù)留連續(xù)的memory,如果Master需要很多memory,可以通過(guò)SMMU把一些非連續(xù)的PA映射到連續(xù)的VA,例如給DMA,VPU,DPU使用。

  • ??32位轉(zhuǎn)換成64位:現(xiàn)在很多系統(tǒng)是64位的,但是有些Master還是32位的,只能訪問(wèn)低4GB空間,如果訪問(wèn)更大的地址空間需要軟硬件參與交換memory,實(shí)現(xiàn)起來(lái)比較復(fù)雜,也可以通過(guò)SMMU來(lái)解決,Master發(fā)出來(lái)的32位的地址,通過(guò)SMMU轉(zhuǎn)換成64位,就很容易訪問(wèn)高地址空間。

  • ??限制Master的訪問(wèn)空間:Master理論上可以訪問(wèn)所有的地址空間,可以通過(guò)SMMU來(lái)對(duì)Master的訪問(wèn)進(jìn)行過(guò)濾,只讓Master訪問(wèn)受限的區(qū)域,那這個(gè)區(qū)域也可以通過(guò)CPU對(duì)SMMU建立頁(yè)表時(shí)動(dòng)態(tài)控制。

  • ??用戶態(tài)驅(qū)動(dòng):現(xiàn)在我們也看到很多系統(tǒng)把設(shè)備驅(qū)動(dòng)做在用戶態(tài),調(diào)用驅(qū)動(dòng)時(shí)不需要在切換到內(nèi)核態(tài),但是存在一些安全隱患,就是用戶態(tài)直接控制驅(qū)動(dòng),有可能訪問(wèn)到內(nèi)核空間,這種情況下也可以用SMMU來(lái)實(shí)現(xiàn)限制設(shè)備的訪問(wèn)空間

  • ??設(shè)備虛擬化: 例如設(shè)備虛擬化有多種方式,Emulate,Para-virtualized,以及Pass-through,用SMMU可以實(shí)現(xiàn)Pass though,這樣無(wú)論是性能,還是軟件的改動(dòng)都是比較小的。 ...... SMMUv2和SMMUv3架構(gòu),編程方式,以及硬件實(shí)現(xiàn)差異都非常大,但是要實(shí)現(xiàn)的功能和基本原理都是相似,如果理解了SMMU的功能以及要解決的問(wèn)題,再看Linux SMMU driver和SMMU Architecture Spec都會(huì)簡(jiǎn)單很多。

參考資料

  • ??https://zhuanlan.zhihu.com/p/534550409

  • ??https://mp.weixin.qq.com/s/IsNUsalsE2sZOd2AJlXtjQ

  • ??https://zhuanlan.zhihu.com/p/552686677


認(rèn)識(shí)SMMU以及理理SMMU與TrustZone的聯(lián)系的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
江津市| 巨野县| 岳阳县| 甘孜县| 凤翔县| 元朗区| 高唐县| 沭阳县| 太仆寺旗| 鱼台县| 含山县| 正宁县| 沈丘县| 上高县| 绥棱县| 元阳县| 宜川县| 北海市| 罗山县| 蕲春县| 吉水县| 海兴县| 同心县| 库尔勒市| 武川县| 陈巴尔虎旗| 林西县| 蒲江县| 景德镇市| 曲水县| 长丰县| 忻城县| 恭城| 沾化县| 静宁县| 玉田县| 青铜峡市| 辽阳县| 天全县| 石泉县| 玛曲县|