我可以使用 IOMMU 进行 VT-d 来为每个虚拟机一次提供一个 GPU 吗?

我可以使用 IOMMU 进行 VT-d 来为每个虚拟机一次提供一个 GPU 吗?

如果我使用具有 4 台虚拟机和 4 个 GPU(nVidia Quadro/Tesla)的 VMWare,那么我是否可以通过一张卡将一些设备分配(移动)到每个不同的虚拟机?

如果我有其中一个 CPU,那么我就有 IOMMU:http://en.wikipedia.org/wiki/List_of_IOMMU-supporting_hardware#CPUs

外设内存分页可以通过IO管理单元.:http://en.wikipedia.org/wiki/IOMMU#Advantages

即如果我有 IOMMU,那么我就有英特尔的“定向 I/O 虚拟化技术”(VT-d)这使得能够做我想做的事。

但是当我们使用 CUDA >= 5.0 的 nVidia GPU 时,我们可以使用 RDMA GPUDirect,并且知道:

http://docs.nvidia.com/cuda/gpudirect-rdma/index.html#how-gpudirect-rdma-works

传统上,BAR 窗口等资源使用 CPU 的 MMU 作为内存映射 I/O (MMIO) 地址映射到用户或内核地址空间。然而,由于当前操作系统没有足够的机制在驱动程序之间交换 MMIO 区域,NVIDIA 内核驱动程序导出函数来执行必要的地址转换和映射。

http://docs.nvidia.com/cuda/gpudirect-rdma/index.html#supported-systems

GPUDirect 的 RDMA 目前依赖于所有物理地址 从 PCI 设备的角度来看是相同的。这使得它与 IOMMU 不兼容,因此必须禁用它们才能使 RDMA 和 GPUDirect 正常工作。

为什么 nVidia 建议禁用 IOMMU,并且我可以在 Sandy/Ivy-Bridge 上使用 IOMMU 为 VT-d 为每个虚拟机一次提供一个 GPU 吗?

相关内容