Я считаю, что вы говорите о rDMA, который был поддержан вторым выпуском GPU Direct. Здесь карта NIC может отправлять/получать данные, внешние по отношению к хост-машине, и использует одноранговые передачи DMA для взаимодействия с памятью GPU.
nVidia экспортирует различные функции в пространство ядра, что позволяет программистам искать, где физические страницы находятся на графическом процессоре, сами и сопоставлять их вручную. nVidia также требует использования физической адресации в пространстве ядра, что значительно упрощает взаимодействие других [сторонних] драйверов с GPU - через физическое адресное пространство хост-машины.
"RDMA для GPUDirect в настоящее время опирается на все физические адреса являются одинаковыми с точки PCI устройств зрения."
-nVidia, Design Considerations for rDMA and GPUDirect
В результате NVidia требуя физической схемы адресации, все IOMMU должны быть отключены в системе, так как они изменят способ отображения каждой карты памяти другими картами. В настоящее время nVidia только поддерживает физическую адресацию для rDMA + GPUDirect в пространстве ядра. Виртуальная адресация - возможна через их UVA, доступную для пользовательского пространства.
Как обеспечивается изоляция между всеми клиентами, пытающимися получить доступ к сетевому устройству? Все ли они имеют доступ к одному PCI BAR устройства?
Да. В пространстве ядра к каждой памяти графического процессора обращается физический адрес.
Является ли сетевое устройство использованием какого-либо механизма SR-IOV для обеспечения изоляции?
Драйвер сетевой карты - это то, что делает вся работа по настройке списков дескрипторов и управлению параллельным доступом к ресурсам - в этом случае это будет память GPU. Как я уже упоминал выше, nVidia предоставляет разработчикам драйверов возможность управлять сопоставлениями физической памяти на графическом процессоре, позволяя драйверу NIC третьей стороны контролировать, какие ресурсы доступны или недоступны для удаленных компьютеров.
Из того, что я понимаю, о водителях NIC, я считаю, что это очень грубый набросок того, что происходит под капотом, относящиеся к RDMA и GPUDirect:
- Сетевая карта получает запрос RDMA (будь то читать или писать).
- Драйвер сетевой карты получает прерывание, в которое были получены данные, или какой-то механизм опроса обнаружил данные.
- Водитель обрабатывает запрос; теперь выполняется любое преобразование адресов, поскольку все сопоставления памяти для графических процессоров становятся доступными для пространства ядра. Кроме того, драйверу, скорее всего, придется самому настроить сетевую карту для подготовки к передаче (например, настроить определенные регистры, определить адреса, создать списки дескрипторов и т. Д.).
- Передача DMA инициируется, и сетевая карта считывает данные непосредственно с графического процессора.
- Эти данные затем отправляются по сети на удаленный компьютер.
Все удаленные компьютеры, запрашивающие данные через rDMA, будут использовать схему физической адресации этого компьютера для управления памятью. Если, например, два отдельных компьютера хотят прочитать один и тот же буфер с GPU третьего компьютера с поддержкой rDMA + GPUDirect, можно ожидать, что смещения входящего запроса на чтение будут одинаковыми. То же самое касается письма; однако возникает дополнительная проблема, если несколько двигателей DMA настроены на манипулирование данными в перекрывающихся областях. Эту проблему параллелизма следует обрабатывать сторонним драйвером NIC.
В связи с примечанием another post имеет много информации о схеме UVA (унифицированной виртуальной адресации) nVidia и о том, как обрабатывается манипуляция памяти из самого пространства ядра. Несколько предложений в этом посте были схвачены от него.
Короткий ответ на ваш вопрос: если на «изолированных» вы имеете в виду, как это каждая карта сохранить свой собственный уникальный адрес пространство для операций RDMA + GPUDirect, это достигается, опираясь на физическое адресное пространство хост-компьютера, который принципиально разделяет физическое адресное пространство (и), запрошенное всеми устройствами на шине PCI. Заставляя использовать схему физической адресации каждого хоста, nVidia по существу изолирует каждый графический процессор в этой главной машине.