web-dev-qa-db-ja.com

BIOS / UEFIでVT-D / IOMMUが有効になっているかどうかを確認します

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

BIOS/UEFIでIntelのVT-DまたはAMDのIOMMUが有効になっているかどうかを確認する方法が見つかりませんでした。

Iommuカーネルパラメータ(iommu=1AMD_iommu=onintel_iommu=on)を設定せずに、有効かどうかを検出する方法が必要です。

rdmsrを使用するという考えが1つありましたが、それが機能するかどうかはわかりません。 systoolの代わりに、最初はSudo rdmsr 0x3Aを使用したかったのですが、うまくいきませんでした。それは常に報告します:

rdmsr: CPU 0 cannot read MSR 0x0000003a

rdmsrmsr-tools btwの一部です。使用するには、最初にmsr kenelモジュールをロードする必要があります(Sudo modprobe msr)。

VT-X/AMD-Vが有効になっていることを示すために、Sudo rdmsr 0x3A3または5を返したとされています...

3
Forivin

VT-dが有効になっている場合、LinuxはDMA再マッピングをブート時に構成します。これを見つける最も簡単な方法は、dmesgを調べてDMARエントリを探すことです。エラーが表示される場合は、VT-dが有効になっています。

例えば:

[[email protected] ~]# 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オプトアウトの別の例:

[[email protected] ~]# 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が無効になっているシステムでは、エラーメッセージが表示されるか、まったく表示されません。

[[email protected] ~]# dmesg | grep DMAR
[[email protected] ~]#
3
Michael Hampton

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
0
Ehsan Tadayon

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
0
Forivin