Pour vérifier si le processeur Intel VT-X ou AMD-V d'AMD est activé dans le BIOS/UEFI, j'utilise:
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
Je n'ai pas pu trouver un moyen de vérifier si le VT-D d'Intel ou l'IOMMU d'AMD sont activés dans le BIOS/UEFI.
J'ai besoin d'un moyen de détecter s'il est activé ou non sans avoir défini les paramètres du noyau iommu (iommu=1
, AMD_iommu=on
, intel_iommu=on
).
Une des idées que j’avais était d’utiliser rdmsr
, mais je ne sais pas si cela fonctionnerait. Au lieu de systool
, j'ai d'abord voulu utiliser Sudo rdmsr 0x3A
, mais cela ne fonctionnait pas pour moi. Il rapporte toujours:
rdmsr: CPU 0 cannot read MSR 0x0000003a
rdmsr
fait partie de msr-tools
btw. Et pour être utilisé, le module msr
kenel doit être chargé (Sudo modprobe msr
) en premier.
Sudo rdmsr 0x3A
aurait dû renvoyer 3
ou 5
pour indiquer que VT-X/AMD-V est activé ...
Si VT-d est activé, Linux configurera DMA Remappage au démarrage. Le moyen le plus simple de trouver ceci consiste à rechercher dans dmesg
les entrées DMAR. Si vous ne voyez pas d'erreur, alors VT-d est activé.
Par exemple:
[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
Un autre exemple avec 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
Quoi qu'il en soit, vous recherchez la dernière ligne, DMAR-IR: Enabled IRQ remapping in <whichever> mode
.
Sur un système avec VT-d désactivé, vous verrez soit un message d'erreur, soit rien du tout.
[root@localhost ~]# dmesg | grep DMAR
[root@localhost ~]#
S'appuyant sur la réponse de Jo-Erlend Schinstad:
Installer cpu-checker
$ Sudo apt-get update
$ Sudo apt-get install cpu-checker
Puis vérifier:
$ kvm-ok
Si le processeur est activé, vous devriez voir quelque chose comme:
INFO: /dev/kvm exists
KVM acceleration can be used
Sinon, vous pourriez voir quelque chose comme:
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
Je viens de trouver une autre méthode qui semble fonctionner même si les paramètres du noyau iommu n'ont pas été définis:
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