Могу ли я использовать IOMMU для VT-d, чтобы дать каждой виртуальной машине по одному GPU за раз?
Если я использую VMWare с 4 виртуальными машинами и 4 графическими процессорами (nVidia Quadro/Tesla), то могу ли я выделить (переместить) несколько устройств на разные виртуальные машины для каждой по одной карте?
Если у меня есть один из этих процессоров, то у меня есть IOMMU: http://en.wikipedia.org/wiki/List_of_IOMMU-supporting_hardware
Пейджинг периферийной памяти может поддерживаться IOMMU.: http://en.wikipedia.org/wiki/IOMMU
То есть, если у меня есть IOMMU, то у меня есть "Технология виртуализации для направленного ввода-вывода" (VT-d) от Intel, которая позволяет мне делать то, что я хочу.
Но когда мы используем GPU nVidia с CUDA >= 5.0, мы можем использовать RDMA GPUDirect и знать, что:
http://docs.nvidia.com/cuda/gpudirect-rdma/index.html
Традиционно ресурсы, такие как окна BAR, сопоставляются с адресным пространством пользователя или ядра, используя MMU ЦП в качестве адресов ввода-вывода с отображением в памяти (MMIO). Однако поскольку в современных операционных системах нет достаточных механизмов для обмена регионами MMIO между драйверами, драйвер ядра NVIDIA экспортирует функции для выполнения необходимых преобразований и сопоставлений адресов.
http://docs.nvidia.com/cuda/gpudirect-rdma/index.html
RDMA для GPUDirect в настоящее время полагается на то, что все физические адреса одинаковы с точки зрения устройств PCI. Это делает его несовместимым с IOMMU, и, следовательно, они должны быть отключены для RDMA, чтобы GPUDirect работал.
Почему nVidia рекомендует отключить IOMMU, и можно ли использовать IOMMU на Sandy/Ivy-Bridge для VT-d, чтобы дать каждой виртуальной машине по одному графическому процессору за раз?