在引导内核选项中使用 iommu=force 有何含义?

在引导内核选项中使用 iommu=force 有何含义?

我必须遵循 Linux 操作系统的强化过程,在此过程中它告诉我们内核选项必须具有iommu=force.

它有什么作用 ?如果不指定 iommu 的任何内容,会有什么区别?它与我设置的 pci pass-through 兼容吗intel_iommu=on

答案1

据我了解,这些选项是相辅相成的,具体来说,iommu管理该技术在系统中的使用,其force价值确保它无论如何都会被使用;并且intel_iommu是技术本身,一种 IOMMU 规范(Intel VT-d),就像 AMD 的规范(AMD-Vi)一样amd_iommu

只需分析以下配置选项:

常规iommu(输入/输出内存管理单元)选项:

off
不要初始化和使用任何类型的 IOMMU。

noforce
不需要时不要强制使用硬件 IOMMU。 (默认)。

force
强制使用硬件 IOMMU,即使实际上不需要它(例如,因为 < 3 GB 内存)。

soft
使用软件反弹缓冲 (SWIOTLB) (Intel 机器的默认设置)。这可以用来防止可用硬件 IOMMU 的使用。

现在,英特尔 IOMMU:

intel_iommu[DMAR] Intel IOMMU 驱动程序 (DMAR) 选项

DMAR:直接内存访问重新映射

on
启用 Intel IOMMU 驱动程序。

intel_iommu( off, igfx_off, , ...)还有更多选项forcedac,但它们与这个问题无关。

我不是这个主题的专家,也许我遗漏了一些东西,所以这里有一些来源:

答案2

iommu都是intel_iommuLxgrub参数,主要针对SR-IOV直通(pt)模式。

  • iommu=force
    强制使用硬件 IOMMU(“输入输出内存管理单元”),即使实际上并不需要(例如,因为 < 3 GB 内存)。这如何强化你的运行时?

行为良好的驱动程序会在向需要执行 DMA 的设备发送命令之前调用 pci_map_*() 调用。一旦 DMA 完成并且不再需要映射,设备将执行 pci_unmap_*() 调用来取消映射该区域。 Intel IOMMU 驱动程序为每个域分配一个虚拟地址。每个 PCIE 设备都被迫拥有自己的域(因此受到保护)。

  • intel_iommu=on
    只需在内核中启用 SR-IOV。

请注意,为了获得最佳性能,请在使用 SR-IOV 时iommu=pt向文件添加(传递) 。grub当处于直通模式时,适配器不需要使用 DMA 转换到内存,这提高了性能。iommu=pt主要在需要虚拟机管理程序性能时需要。看获取背景信息。

在此示例中,您的grub文件可能如下所示:

kernel /vmlinuz-Ub15.10x86_64-5.5.15-42-generic root=/dev/sda1 console=tty0 console=ttyS0,115200n8 rhgb intel_iommu=on iommu=pt

华泰

答案3

不是死后,但我认为给出一个简洁的答案会很好。正如 Cbhihe 上面所说,驱动程序将分配或留出一些 DMA 内存,并告诉设备使用它。但这确实是一个建议,设备可以(由于错误或恶意)实际上使用 DMA 来读取和写入它想要的任何系统内存(这包括顽皮的 USB3 和 Thunderbolt 设备能够潜在地读取您的系统内存,尽管我认为一些较新的 USB3 和 Thunderbolt 控制器可以自行阻止此行为)。 iommu dmar(DMA 重新映射)会阻止这些不正确的 DMA 访问,iommu=force 确保它已打开以执行此操作。安全系统的审慎预防措施。

相关内容