Centos7开启IOMMU

IOMMU 全称是 Input/Output Memory Management Unit,翻译过来就是输入输出的内存管理单元。我们知道 CPU 里面也有一个 MMU , 它是为了支持多进程的虚拟地址共享同一个物理内存,以及对物理地址的访问进行权限检查的一个硬件单元。IOMMU 作为一个内存管理单元,它提供的是设备端的地址翻译能力,它让具有 DMA(Direct Memory Access)能力的设备可以使用虚拟地址,然后经过 IOMMU 翻译成可以直接访问内存的物理地址。设备端的地址翻译功能(DMA 重定向)只是 IOMMU 的功能之一,IOMMU 另一个重要的功能是中断重映射。

为什么开启IOMMU

虚拟化IOMMU(Input/Output Memory Management Unit)的作用是提供对设备级别的DMA(Direct Memory Access)安全性和隔离性的增强支持。启用虚拟化IOMMU可以带来以下效果:

设备隔离:启用虚拟化IOMMU可以将物理设备与虚拟机之间进行隔离,防止设备的DMA操作越界访问虚拟机的内存。这样可以提高系统的安全性,防止恶意设备或受损设备对虚拟机和宿主机内存的非法访问。

DMA重映射:虚拟化IOMMU可以重映射设备的DMA请求,使其访问虚拟机所分配的内存而不是宿主机的内存。这样可以实现设备级别的内存隔离,确保每个虚拟机只能访问自己分配的内存空间,增强了虚拟机之间和虚拟机与宿主机之间的隔离性。

安全性提升:通过启用虚拟化IOMMU,可以防止一些安全漏洞攻击,如DMA窃取、虚拟机逃逸等。它可以增强系统的安全性,减少潜在的安全风险。

性能优化:虚拟化IOMMU还可以提供一些性能优化功能,如设备级别的中断重映射和直接设备访问(Direct Device Assignment,DDA)。这些功能可以提高设备的响应速度和系统的整体性能。

总之,启用虚拟化IOMMU可以提供对设备级别的DMA安全性和隔离性的增强支持,提高系统的安全性和性能。



如何开启IOMMU

编辑文件

vi /etc/default/grub


修改参数

修改参数

原参数

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rhgb quiet"

修改为

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rhgb quiet intel_iommu=on iommu=pt"


生成新内核配置

生成新内核配置

grub2-mkconfig -o /boot/grub2/grub.cfg


重启

reboot



验证是否生效

验证是否生效

dmesg |grep -e DMAR -e IOMMU