IOMMU 缓存一致性

IOMMU 缓存一致性

在当今的 x86/x64 主板上,可以找到来自 Intel 和 AMD 的 IOMMU。它们允许外围设备使用虚拟内存地址(而不是物理内存地址)对系统 RAM 执行 DMA(直接内存访问)操作。

现在,我们假设使用 IOMMU 执行 DMA 操作的外围设备包含一些内存来缓存系统 RAM,以优化对频繁访问的数据的处理。在这种情况下,如何确保外围设备的缓存和系统 RAM 之间的内存一致性?每当外围设备修改其缓存中的某些数据而不将其写回系统 RAM 时,CPU 对同一内存的任何访问都会触及陈旧数据。

我能看到的唯一有效选项是外围设备告诉 IOMMU 使其从系统 RAM 读取的每个页面无效,因为从那一刻起,该页面将由外围设备缓存。每当 CPU 访问外围设备先前读取的任何页面时,都会触发页面错误。因此,页面错误处理程序会负责将页面从外围设备的缓存中刷新出来并将其读回系统 RAM。

这种事情真的有可能吗?特别是即将推出的 HSA 编程模型让我相信这一点,因为它的主要功能之一是统一的内存空间,由 CPU 和外围计算单元共享。由于这些计算单元很可能会有缓存,内存一致性问题一定已经以某种方式得到解决。

谢谢你的帮助!
David

相关内容