Intel 机器使用的 IOMMU 配置是什么?

Intel 机器使用的 IOMMU 配置是什么?

在内核启动选项中(https://www.kernel.org/doc/Documentation/x86/x86_64/boot-options.txt)我注意到以下选项:

 iommu=[<size>][,noagp][,off][,force][,noforce]
    [,memaper[=<order>]][,merge][,fullflush][,nomerge]
    [,noaperture][,calgary]

  General iommu options:
    off                Don't initialize and use any kind of IOMMU.
    noforce            Don't force hardware IOMMU usage when it is not needed.
                       (default).
    force              Force the use of the hardware IOMMU even when it is
                       not actually needed (e.g. because < 3 GB memory).
    soft               Use software bounce buffering (SWIOTLB) (default for
                       Intel machines). This can be used to prevent the usage
                       of an available hardware IOMMU.

它提到 iommu=soft 是 Intel 机器的默认选项,并且还提到它可以用来防止使用硬件 IOMMU。

那么,如果此选项是 Intel 机器的默认选项,那么 Intel 机器是否不使用硬件 IOMMU 还是默认使用硬件 IOMMU + 软件反弹缓冲?

另外,有没有办法在启动后查看内核中正在使用哪个 IOMMU 配置?

答案1

iommu=soft选项是指针对没有 IOMMU 或 IOMMU 被禁用的系统的软件解决方法。此解决方法称为软件 IO TLB (SWIOTLB)。 SWIOTLB 是一种让没有 IOMMU 的系统能够安全地对设备执行 DMA 操作的机制。

设置后iommu=soft(这是 Intel 机器的默认设置),Linux 内核默认使用 SWIOTLB。这确实不是表示未使用硬件 IOMMU如果是可用,因为 Linux 内核设计为在硬件 IOMMU 可用且功能正常的情况下使用它,即使iommu=soft已设置。 SWIOTLB 机制更多地是硬件 IOMMU 不可用时的后备方案。

要在启动后检查 IOMMU 配置,可以使用命令dmesg | grep -i iommu

相关内容