我发现我可以使用以下代码确定VT-D/IOMMU是否启用:
if compgen -G "/sys/kernel/iommu_groups/*/devices/*" > /dev/null; then
echo "AMD's IOMMU / Intel's VT-D is enabled in the BIOS/UEFI."
else
echo "AMD's IOMMU / Intel's VT-D is not enabled in the BIOS/UEFI"
fi
但在没有启用的情况下,我无法找到一种方法来检查系统是否首先支持该选项。
我知道Intel/AMD已经记录了他们的哪些CPU支持VT-D/IOMMU,但我想知道整个系统(主板+UEFI/BIOS+CPU+芯片组(是否会支持这一功能,因为例如,我的笔记本电脑有一个支持它的CPU,但UEFI中没有启用它的选项。
检测对英特尔VT-d支持的唯一方法是通过ACPI表"DMAR"的存在。如果在BIOS中禁用VT-d,则该表将不存在,并且无法确定该功能是否可用。
对于AMD系统,ACPI表被称为"IVRS"。
在Linux上,可以使用acpidump
命令查看这些表中是否存在一个。
acpidump | egrep "DMAR|IVRS"