本文共 2587 字,大约阅读时间需要 8 分钟。
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地址虚拟化,还起到隔离,保护等作用。
Q: 按照上面的解释,默认VT-d在物理机上是disable的状态,也就是没有启用IOMMU,对吗?这样会导致物理设备直接访问的是真实的物理地址,没有翻译的过程,没有检查和隔离的过程,那这样是否会对物理机带来安全隐患?
A: 是的。在虚拟化的环境中,情况更加恶劣,因为如果没有IOMMU, 设备可以看到并使用所有的内存,导致可能一个VM 可以访问别的VM以及host的地址空间。Q: 设备如何发起一个DMA过程?
A: OS 中的设备驱动创建一个DMA descriptors 包含以下信息: 要操作的内存地址,区域长度以及这个设备的状态信息。如果没有IOMMU,这个地址是实际的物理内存地址。设备驱动创建完这个descriptor后将它交给设备,设备将使用这个descriptor来对它所指的内存区域进行异步操作(读/写)。当读/写操作完成后,设备对设备驱动发出中断。Q: DMA 是用实际的物理地址有哪些种类的风险?
1) 设备驱动创建一个错误的DMA descriptor 指向某个它不该访问的区域(bad-address);2) DMA descriptor创建以后,OS 对它所指向的区域做了修改,导致设备读写到它不该访问的内容(invalid-use);3) 设备自己使用了一个非法地址(bad-device);Q: 在kernel cmdline 中加的iommu=pt intel_iommu=on 中, iommu=pt是什么意思?有什么作用?
A: In addition it is recommended to use iommu=pt option which improves IO performance for devices in the host. To get the best performance, add iommu=pt (pass-through) to the grub file when using SR-IOV. When in pass-through mode, the adapter does not need to use DMA translation to the memory, and this improves the performance. iommu=pt is needed mainly with hypervisor performance is needed. 不太理解。。。这个是iommupt用在dpdk上的影响的讨论以上内容由一些参考总结而来加上了自己的一些理解,不一定正确。
转载于:https://blog.51cto.com/11527071/2135933