对IOMMU 和 vIOMMU 的简单理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对IOMMU 和 vIOMMU 的简单理解相关的知识,希望对你有一定的参考价值。

MMU(Memory Management Unit, 内存管理单元): 将虚拟地址转化为物理地址,cpu与主存之间地址转换。
DMA(Direct Memory Access,直接内存存取): 是一种快速传送数据的机制。DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。最初的DMA地址是物理地址,后来dmar就出现了。 dmar意为DMA remapping,是Intel为支持虚拟机而设计的I/O虚拟化技术,I/O设备访问的DMA地址不再是物理内存地址,而要通过DMA remapping硬件进行转译,DMA remapping硬件会把DMA地址翻译成物理内存地址,并检查访问权限等等。负责DMA remapping操作的硬件称为IOMMU
IOMMU设备访问的虚拟地址转化为物理地址,连接DMA-capable 总线和主存。为了防止设备错误地访问内存,有些IOMMU还提供了访问内存保护机制(检查访问权限)。IOMMU不仅将DMA地址虚拟化,还起到隔离,保护等作用。
vIOMMU: 设备分配到guest以后,guest的内存地址对设备来说是用户空间地址,可以完全访问,如果设备对guest的某些地址进行恶意写,会导致guest crash。所以引入vIOMMU,它对guest的作用,相当于IOMMU对host的作用。它会导致guest的performance下降。For nested virtualization, an IOMMU is required for device assignment to work. Here, to assign a L1 guest device to a L2 guest, we also need a vIOMMU inside L1 guest to build up the page mappings required for device assignment work.

https://nanxiao.me/iommu-introduction/
http://linuxperf.com/?p=67
https://wiki.qemu.org/Features/VT-d

以上是关于对IOMMU 和 vIOMMU 的简单理解的主要内容,如果未能解决你的问题,请参考以下文章

QNX Hypervisor 2.2 用户手册2.4 DMA设备控制(smmuman)

对闭包的简单理解

对vuex的认识和简单理解

Python之简单理解装饰器

记录对依赖注入的小小理解和autofac的简单封装

vfio