[转] 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的地址空间内。)
posted @ 2020-02-20 16:58  yimuxi  阅读(2716)  评论(0编辑  收藏  举报