检查BIOS/UEFI是否启用了VT-D/IOMMU

15

要检查计算机BIOS/UEFI中是否启用了Intel的VT-X或AMD的AMD-V,我使用以下命令:

if systool -m kvm_amd -v &> /dev/null || systool -m kvm_intel -v &> /dev/null ; then
    echo "AMD-V / VT-X is enabled in the BIOS/UEFI."
else
    echo "AMD-V / VT-X is not enabled in the BIOS/UEFI"
fi

我找不到检查Intel VT-D或AMD IOMMU是否在BIOS/UEFI中启用的方法。

我需要一种无需设置iommu内核参数(iommu=1, amd_iommu=on, intel_iommu=on)来检测它是否启用的方法。

我有一个想法是使用rdmsr,但我不确定它是否可行。最初我想使用systool,但后来改为使用sudo rdmsr 0x3A,但对我没有用。它总是报告:

rdmsr: CPU 0 cannot read MSR 0x0000003a

rdmsrmsr-tools的一部分。需要先加载msr内核模块(sudo modprobe msr)才能使用。

据称sudo rdmsr 0x3A应该返回35来表示VT-X / AMD-V已启用...

3个回答

17
如果启用了VT-d,Linux将在启动时配置DMA重新映射。查找DMAR条目的最简单方法是查看dmesg。如果没有看到错误,那么VT-d已经启用。
例如:
[root@localhost ~]# dmesg | grep DMAR
[    0.000000] ACPI: DMAR 0x00000000BBECB000 0000A8 (v01 LENOVO TP-R0D   00000930 PTEC 00000002)
[    0.001000] DMAR: Host address width 39
[    0.001000] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.001000] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e
[    0.001000] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[    0.001000] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[    0.001000] DMAR: RMRR base: 0x000000bbdd8000 end: 0x000000bbdf7fff
[    0.001000] DMAR: RMRR base: 0x000000bd000000 end: 0x000000bf7fffff
[    0.001000] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
[    0.001000] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[    0.001000] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.002000] DMAR-IR: Enabled IRQ remapping in x2apic mode

使用x2apic opt out的另一个示例:

[root@localhost ~]# dmesg | grep DMAR
[    0.000000] ACPI: DMAR 0000000079a20300 000C4 (v01 SUPERM SMCI--MB 00000001 INTL 20091013)
[    0.106389] DMAR: Host address width 46
[    0.106392] DMAR: DRHD base: 0x000000fbffc000 flags: 0x1
[    0.106400] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap 8d2078c106f0466 ecap f020de
[    0.106402] DMAR: RMRR base: 0x0000007bb24000 end: 0x0000007bb32fff
[    0.106404] DMAR: ATSR flags: 0x0
[    0.106407] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x0
[    0.106409] DMAR-IR: IOAPIC id 8 under DRHD base  0xfbffc000 IOMMU 0
[    0.106411] DMAR-IR: HPET id 0 under DRHD base 0xfbffc000
[    0.106413] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
[    0.106414] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting.
[    0.106591] DMAR-IR: Enabled IRQ remapping in xapic mode

无论如何,您都在寻找最后一行:DMAR-IR: Enabled IRQ remapping in <whichever> mode

在禁用VT-d的系统上,您将看到错误消息或什么也不会显示。

[root@localhost ~]# dmesg | grep DMAR
[root@localhost ~]#

2
@Forivin 我手头没有 AMD 处理器。但是快速的谷歌搜索表明你应该执行 dmesg | grep AMD-Vi - Michael Hampton
嗯,我的Supermicro BIOS甚至有2个VT-d布尔选项:VT-dVT-d中断重映射。这似乎表明您也可以启用VT-d但禁用IRQ重映射。我也不确定VT-d支持对IOMMU支持意味着什么 - 例如,我有一个系统,在那里我看到DMAR-IR:在xapic模式下启用IRQ重映射行,但/sys/kernel/iommu_groups/为空。 - maxschlepzig
事实证明,即使在BIOS中启用了VT-d支持,截至2020年,大多数发行版默认禁用IOMMU(另请参见)。 - maxschlepzig
1
另一个可能的“不可用”条件是此dmesg输出“dmesg | grep DMAR”,它只会给您一个1行的“DMAR:IOMMU已启用”。 - John Greene
是的,要启用IOMMU,请将以下内容intel_iommu=on插入到您的Grub CMDLINE中。 - John Greene

8
我刚刚发现了另一种方法,即使没有设置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

-1

在Jo-Erlend Schinstad的回答基础上:

安装cpu-checker

$ sudo apt-get update
$ sudo apt-get install cpu-checker

然后检查:

$ kvm-ok

如果CPU已启用,您应该会看到类似以下的内容:
INFO: /dev/kvm exists
KVM acceleration can be used

否则,您可能会看到类似以下的内容:
INFO: /dev/kvm does not exist
HINT:   sudo modprobe kvm_intel
INFO: Your CPU supports KVM extensions
INFO: KVM (vmx) is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
      and then hard poweroff/poweron your system
KVM acceleration can NOT be used

我正在使用Fedora。 cpu-checker似乎不是标准工具。实际上,它似乎只存在于Ubuntu上。我也找不到另一个适用于Fedora的软件包,可以提供kvm-ok。我也不明白你所说的“在Jo-Erlend Schinstad的答案基础上构建”的意思。到目前为止,你是唯一回答的人。 - Forivin
@Forivin,您没有提及您的操作系统类型。对于Jo-Erlend的错误标记表示抱歉。他在askubuntu上的回答。 - Ehsan Tadayon
3
这与 VT-d 无关。 - Michael Hampton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接