IOMMU简介
IOMMU即输入输出内存管理单元,是管理外设访问系统内存的关键硬件组件。
它负责将设备IO地址映射为虚拟地址,为设备提供页表映射,实现地址转换、内存保护、设备隔离及虚拟化支持。
通过分页机制和缓存优化,IOMMU在保障系统安全性的同时减少性能损耗,广泛应用于虚拟化、高性能计算等领域,助力提升系统整体性能与稳定性。
Documentation for AMD Processors, Accelerators, and Graphics
BIOS设置IOMMU
在BIOS中设置IOMMU(Input-Output Memory Management Unit)开关并开启该功能,通常是为了支持虚拟化技术,如PCI设备直通(PCIe Passthrough),以便将物理设备直接分配给虚拟机使用。以下是处理BIOS中IOMMU开关开启的详细步骤和注意事项:
一、进入BIOS设置
- 重启计算机,在启动过程中按下相应的按键进入BIOS设置界面。常见的按键包括:
- DEL(大多数主板)
- F2(部分华硕、戴尔等主板)
- F1(部分联想、IBM等主板)
- ESC(部分惠普主板)
- F10(部分惠普、宏碁等主板)
- 其他:具体按键可能因主板型号而异,请参考开机时的提示信息或主板说明书。
- 进入高级设置:
- 在BIOS主界面中,找到并进入“Advanced”(高级)或“Advanced Mode”(高级模式)。
- 某些主板可能需要先进入“Chipset”(芯片组)或“North Bridge”(北桥)配置。
二、查找IOMMU相关选项
- IOMMU选项名称:
- Intel平台:通常称为“Intel VT-d”或“IOMMU”。
- AMD平台:通常称为“AMD-Vi”或“IOMMU”。
- 其他名称:可能包括“SMMU”(System Memory Management Unit)、“DMA Remapping”等。
- 定位选项:
- 在高级设置中,查找与“CPU Configuration”(CPU配置)、“Chipset Configuration”(芯片组配置)、“North Bridge Configuration”(北桥配置)或“Advanced”相关的子菜单。
- 某些主板可能将IOMMU选项放在“Security”(安全)或“Boot”(启动)菜单下,需仔细查找。
三、开启IOMMU功能
- 启用IOMMU:
- 找到IOMMU相关选项后,将其设置为“Enabled”(启用)或“On”(开启)。
- 如果选项为“Disabled”(禁用)或“Off”(关闭),请更改为启用状态。
- 保存并退出:
- 按下“F10”或“Save & Exit”(保存并退出)键保存设置。
- 确认保存后,计算机将重新启动。
四、验证IOMMU是否开启
- 在Linux系统中验证:
- 重启计算机并进入Linux系统。
- 打开终端,运行以下命令检查IOMMU是否启用:
bash
dmesg | grep -e DMAR -e IOMMU
- 如果输出中包含类似以下信息,则表示IOMMU已启用:
[ 0.000000] DMAR: IOMMU enabled
[ 0.123456] AMD-Vi: Found IOMMU
- 检查内核启动参数:
- 查看内核启动参数是否包含
intel_iommu=on
(Intel平台)或amd_iommu=on
(AMD平台):bash
cat /proc/cmdline
- 如果没有,可能需要手动添加这些参数(需修改GRUB配置)。
- 查看内核启动参数是否包含
五、注意事项
- 硬件支持:
- 确保CPU和主板支持IOMMU功能。
- Intel平台需支持“VT-d”技术,AMD平台需支持“AMD-Vi”技术。
- BIOS版本:
- 如果BIOS中没有IOMMU选项,可能需要更新BIOS到最新版本。
- 操作系统支持:
- 确保操作系统内核支持IOMMU功能(大多数现代Linux发行版默认支持)。
- 如果使用Windows系统,IOMMU主要用于Hyper-V虚拟化,需确保Hyper-V已启用。
- 虚拟化软件配置:
- 如果使用虚拟化软件(如KVM、Xen、VMware等),需在软件配置中启用PCI设备直通功能。
- 潜在问题:
- 开启IOMMU可能会导致某些旧设备或驱动程序不兼容,需提前测试。
- 如果系统无法启动或出现不稳定现象,可尝试关闭IOMMU并恢复默认设置。
六、故障排查
- IOMMU未启用:
- 确认BIOS设置正确。
- 检查硬件是否支持IOMMU。
- 更新BIOS到最新版本。
- 设备直通失败:
- 确保设备支持PCIe直通。
- 检查虚拟化软件配置是否正确。
- 查看系统日志(
dmesg
或/var/log/syslog
)获取更多错误信息。
Linux命令设置IOMMU
X86
ARM
编辑GRUB配置文件(通常在/etc/default/grub),在GRUB_CMDLINE_LINUX行添加:
iommu.passthrough=0 iommu=on
更新GRUB配置后重启
[root@kylin-sp1 ~]# ls /boot/grub*/grub.cfg 2>/dev/null || ls /boot/efi/EFI/*/grub.cfg 2>/dev/null
/boot/efi/EFI/kylin/grub.cfg(如果回显是/boot/grub2/grub.cfg,下面命令同步修改)
[root@kylin-sp1 ~]# grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
[root@kylin-sp1 ~]# reboot