VFIO PF SRIOV IOMMU UIO概念解釋、關聯


1、UIO出現的原因

第一,硬件設備可以根據功能分為網絡設備,塊設備,字符設備,或者根據與CPU相連的方式分為PCI設備,USB設備等。它們被不同的內核子系統支持。這些標准的設備的驅動編寫較為容易而且容易維護。很容易加入主內核源碼樹。但是,又有很多設備難以划分到這些子系統中,比如I/O卡,現場總線接口或者定制的FPGA。通常這些非標准設備的驅動被實現為字符驅動。這些驅動使用了很多內核內部函數和宏。而這些內部函數和宏是變化的。這樣驅動的編寫者必須編寫一個完全的內核驅動,而且一直維護這些代碼。像這種設備如果把驅動放入Linux內核,不但增大了內核的負擔而且還很少使用,更沒有人願意免費的花費大量精力去維護這樣的驅動,使用UIO使驅動的開發可以利用所有的用戶空間的應用程序開發工具和庫,而且當系統內核發生變化時,只要更改UIO框架與其他內核程序交互的接口即可,不需要更改UIO框架下面的driver。

第二,內核驅動的開發必須使用C語言加上少量匯編代碼。uio可以使用C++,Java …等高級語言極大的方便了開發。我們可以發現,有很多的卡的驅動在內核空間已經有實現,這樣,我們可以參考已經存在的代碼,極大的提高的開發的速度,和降低了開發成本。而且內核驅動的調試會比用戶空間程序調試復雜很多。我們經常遇到死機,涉及到多個子系統,棘手。放在用戶空間的話如果驅動程序死了,並不影響系統的正常運行並且方便了我們的開發。

好處:

a.UIO則是將驅動的很少一部分運行在內核空間,而在用戶空間實現驅動的絕大多數功能!使用UIO可以避免設備的驅動程序需要隨着內核的更新而更新的問題!

b.降低了內核態和用戶態的切換次數。

劣勢:

a.UIO的出現,允許將驅動程序用到用戶態空間里實現,但UIO有它的不足之處,如不支持DMA、中斷等;

 

2. IOMMU

實現用戶空間設備驅動,最困難的在於如何將DMA以安全可控的方式暴露到用戶空間:

a. 提供DMA的設備通常可以寫內存的任意頁,因此使用戶空間擁有創建DMA的能力就等同於用戶空間擁有了root權限,惡意的設備可能利用此發動DMA攻擊。

b. I/O memory management unit(IOMMU)的引入對設備進行了限制,設備I/O地址需要經過IOMMU重映射為內存物理地址,如圖2-1。惡意的或存在錯誤的設備不能讀寫沒有被明確映射過的內存,運行在cpu上的操作系統以互斥的方式管理MMUIOMMU,物理設備不能繞行或污染可配置的內存管理表項。 

image

圖 2-1 Comparison IOMMU and MMU

 

 

1. What is VFIO?

  1. VFIO是一個可以安全的把設備I/O、中斷、DMA等暴露到用戶空間(userspace),從而可以在用戶空間完成設備驅動的框架。

  2. 得益於vfio低開銷的用戶空間直接設備訪問,虛擬機設備分配(device assignment)、高性能應用等可以獲得更高的I/O性能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM