2

I found I can determine if VT-D / IOMMU is enabled using this code:

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

But in the case where it is not enabled I have not been able to find a way to check if the system supports the option in the first place.

I am aware that Intel/AMD have documented which of their CPUs support VT-D / IOMMU, but I want to find out if the whole system (motherboard+UEFI/BIOS+CPU+chipset) would support this feature because my notebook for instance has a CPU that supports it, but there is no option in the UEFI to enable it.

Forivin
  • 14,780
  • 27
  • 106
  • 199

1 Answers1

3

The only way to detect support for Intel VT-d is by the presence of the ACPI table “DMAR”. If VT-d is disabled in the BIOS, this table will not be present, and there is no way to find out whether the feature is available to be enabled.

For AMD systems, the ACPI table is called “IVRS”.

On Linux, you can use the acpidump command to see if one of these tables exists.

acpidump | egrep "DMAR|IVRS"
prl
  • 11,716
  • 2
  • 13
  • 31
  • 1
    You are wrong about your second paragraph, there is most definitely a chipset requirement to support VT-d. Anyway, how would you check for the presence of the DMAR table? – Forivin Nov 20 '18 at 08:46
  • 1
    I just tried `acpidump | grep -E "^DMAR"`, but I get no result. There is no DMAR in the acpidump output. I'm on AMD btw. Does this only work on Intel? If so, is there an alternative for AMD? – Forivin Nov 20 '18 at 09:27
  • 1
    Intel's HM75 chipset is an example for a chipset that does not support VT-d. A i7-3632QM on that chipset won't be able to make use of VT-d even though the CPU itself has support for it. – Forivin Nov 20 '18 at 09:29
  • @Forivin Try `dmesg | grep AMD-Vi` for a quick check for AMD-Vi support. – Michael Hampton Nov 20 '18 at 13:53