如果我使用具有 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 吗?