vfio核心實現分析 (1)基礎知識

2021-07-09 02:13:57 字數 1170 閱讀 5032

(1)vfio

是乙個可以安全的把裝置

i/o、中斷、

dma等暴露到使用者空間,從而可以在使用者空間完成裝置驅動的框架。

(2)虛擬機器裝置分配(

device assignment

)、高效能應用等都可以受益於

vfio

低開銷的使用者空間直接裝置訪問,從而獲得更高的

i/o效能。

實現使用者空間裝置驅動,最困難的在於如何將dma以安全可控的方式暴露到使用者空間:

(1)提供dma的裝置通常可以寫記憶體的任意頁,因此使使用者空間擁有建立dma的能力就等同於使用者空間擁有了root許可權,惡意的裝置可能利用此發動dma攻擊。

(2)i/o memory management unit(iommu)的引入對裝置進行了限制,裝置i/o位址需要經過iommu重對映為記憶體實體地址,如圖1。惡意的或存在錯誤的裝置不能讀寫沒有被明確對映過的記憶體,而執行在cpu上的作業系統以互斥的方式管理mmu與iommu,物理裝置不能繞行或汙染可配置的記憶體管理表項。

圖 1 comparison iommu and mmu

iommu的其他好處:

(1)iommu可以將連續的虛擬位址對映到不連續的多個物理記憶體片段,從而支援vector-i/o(scatter-gather list);

(2)對於不能定址全部實體地址空間的裝置,通過iommu的重對映,從而避免了將資料從裝置可訪問的外圍位址空間拷入拷出裝置無法訪址的實體地址空間的額外開銷。

由於device本身的特性、interconnect及iommu的拓撲等,iommu提供device ioslation的最小粒度是group,而不是device。如乙個device可能包括多個function,而這些function之間資料傳遞可以通過專用通道(backdoor),而不經過iommu等等,所以device並不適合做ioslation的最小單元。

container可以包含多個group,這些group共享頁表資訊。

(1)詳看linux核心原始碼目錄:[linux kernel-rootdir]/documentation/vfio.txt

(2) vfio-host-test

Linux核心 核心基礎知識

核心的版本號主要有四個陣列組成。比如版本號 2.6.26.1 其中,2 主版本號 6 從版本號或副版本號 26 修訂版本號 1 穩定版本號 副版本號表示這個版本是穩定版 偶數 還是開發版 奇數 上面例子中的版本號是穩定版。穩定的版本可用於企業級環境。修訂版本號的公升級包括bug修正,新的驅動以及新的...

計算機核心基礎知識1

二 計算機組成原理 六 cpu詳解 說到程式設計,那就得先了解什麼是程式語言,程式語言就是人與計算機進行溝通的語言。程式設計就是把人類的思維邏輯用計算機能聽懂的語言翻譯下來,並儲存在檔案之中,這個過程就是程式設計。簡單來說,就是兩個步驟 1.先將邏輯 步驟理順 2.再將他們翻譯為python程式語言...

基礎知識1

puts hello world if false class person count 0 def initialize name age 18 name name age age motherland china enddef talk print name name n puts age ag...