[轉] SMMU背景和實現分析


轉自 

https://blog.csdn.net/gaojy19881225/article/details/82585973

SMMUv3

https://blog.csdn.net/ytfy339784578/article/details/104254322

https://blog.csdn.net/ytfy339784578/article/details/104254338

 

https://kernelgo.org/armv8-virt-guide.html

 

了解SMMU產生背景之前,首先要了解DMA工作原理。因為SMMU的產生主要是為了解決虛擬化平台下的DMA重映射問題。
DMA,外設和內存的連接件,用於解放CPU。外設可以通過DMA,將搜集的數據批量傳輸到內存,然后再發送一個中斷通知CPU去內存取。這樣減少了CPU被中斷的次數,提高了系統的效率。DMA要能夠正常工作,首先要進行正確的配置(包括通道選擇、DMA源外設地址、DMA目的內存地址及尺寸等信息);其次,一般需要連續的一段或多段物理內存。由於DMA不能像CPU一樣通過MMU操作虛擬地址,所以DMA需要的是連續的物理地址。
這對 Hypervisor+GuestOS的虛擬化系統來說必須解決一個問題:GuestOS看到的內存並非真實的物理內存,Guest OS的驅動無法正常地把連續的物理內存分配給硬件。於是,現代計算機設計了引入了IOMMU(ARM架構叫SMMU)架構,來對非CPU的外部設備,也提供一個MMU部件,對這些設備發出的地址請求進行翻譯。DMA設備是其中最重要的應用。

————————————————
版權聲明:本文為CSDN博主「一墨一飛花」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gaojy19881225/article/details/82585973
 
虛擬化場景下,ARM和X86上的方案是類似的,都是采用兩階段地址翻譯實現GPA -> HPA的地址翻譯過程。 虛擬機運行在None-secure EL1&0,當虛擬機內的進程訪問GVA的時候MMU會將GVA翻譯成IPA(intermediate physical address,中間物理地址:GPA), 這就是所謂的stage 1地址翻譯。然后MMU會再次將IPA翻譯成HPA,這就是所謂的stage 2地址翻譯。
(SMMU支持2階段地址翻譯,這和內存虛擬化場景下MMU支持2階段地址翻譯類似, 第一階段的地址翻譯被用做進程(software entity)之間的隔離或者OS內的DMA隔離, 第二階段的地址翻譯被用來做DMA重映射,即將Guest發起的DMA映射到Guest的地址空間內。)


免責聲明!

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



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