Как GPUDirect обеспечивает изоляцию на общем устройстве

Я читал здесь https://developer.nvidia.com/gpudirect о GPUDirect. В этом примере есть сетевая карта, подключенная к PCIe вместе с двумя графическими процессорами и процессором.

Как обеспечивается изоляция между всеми клиентами, пытающимися получить доступ к сетевому устройству? Все ли они имеют доступ к одному и тому же шине PCI устройства?

Использует ли сетевое устройство какой-то механизм SR-IOV для обеспечения изоляции?

1 ответ

Я полагаю, вы говорите о rDMA, который был поддержан во втором выпуске GPU Direct. Именно здесь карта NIC может отправлять / получать данные, внешние по отношению к хост-машине, и использует одноранговые передачи DMA для взаимодействия с памятью графического процессора.

nVidia экспортирует множество функций в пространство ядра, которые позволяют программистам искать, где физические страницы находятся в самом GPU, и отображать их вручную. nVidia также требует использования физической адресации в пространстве ядра, что значительно упрощает взаимодействие других [сторонних] драйверов с графическими процессорами - через физическое адресное пространство хост-машины.

"RDMA для GPUDirect в настоящее время полагается на то, что все физические адреса одинаковы с точки зрения устройств PCI".

-nVidia, Особенности проектирования для rDMA и GPUDirect

В результате nVidia, требующей схемы физической адресации, все IOMMU должны быть отключены в системе, так как это изменило бы способ просмотра каждой картой пространства памяти других карт. В настоящее время nVidia поддерживает только физическую адресацию для rDMA+GPUDirect в пространстве ядра. Виртуальная адресация возможна через их UVA, сделанный доступным для пространства пользователя.

Как обеспечивается изоляция между всеми клиентами, пытающимися получить доступ к сетевому устройству? Все ли они имеют доступ к одному и тому же шине PCI устройства?

Да. В пространстве ядра доступ к памяти каждого графического процессора осуществляется по его физическому адресу.

Использует ли сетевое устройство какой-то механизм SR-IOV для обеспечения изоляции?

Драйвер сетевой карты - это то, что выполняет всю работу по настройке списков дескрипторов и управлению одновременным доступом к ресурсам, которые в этом случае будут памятью графического процессора. Как я упоминал выше, nVidia дает разработчикам драйверов возможность управлять отображениями физической памяти на GPU, позволяя стороннему драйверу NIC контролировать, какие ресурсы доступны или недоступны для удаленных машин.

Из того, что я понимаю о драйверах NIC, я считаю, что это очень грубое описание того, что происходит под капотом, касающегося rDMA и GPUDirect:

  1. Сетевая карта получает запрос rDMA (будь то чтение или запись).
  2. Драйвер сетевой карты получает прерывание о том, что данные поступили или какой-то механизм опроса обнаружил, что данные поступили.
  3. Драйвер обрабатывает запрос; теперь выполняется любое преобразование адресов, так как все отображения памяти для графических процессоров сделаны доступными для пространства ядра. Кроме того, драйверу, скорее всего, придется самостоятельно настраивать сетевую карту для подготовки к передаче (например, настраивать конкретные регистры, определять адреса, создавать списки дескрипторов и т. Д.).
  4. Передача DMA начинается, и сетевая карта считывает данные непосредственно из графического процессора.
  5. Эти данные затем отправляются по сети на удаленный компьютер.

Все удаленные машины, запрашивающие данные через rDMA, будут использовать схему физической адресации этого хоста для манипулирования памятью. Например, если два отдельных компьютера хотят считывать один и тот же буфер из графического процессора третьего компьютера с поддержкой rDMA+GPUDirect, можно ожидать, что смещения входящего запроса на чтение будут одинаковыми. То же самое касается письма; однако возникает дополнительная проблема, если несколько механизмов DMA настроены на манипулирование данными в перекрывающихся областях. Эта проблема параллелизма должна быть обработана драйвером NIC стороннего производителя.

На очень связанной ноте в другом моем посте содержится много информации о схеме UVA (Unified Virtual Addressing) nVidia и о том, как обрабатывается манипуляция с памятью из самого пространства ядра. Несколько предложений в этом посте были взяты из него.

Краткий ответ на ваш вопрос: если под "изолированным" вы подразумеваете, как каждая карта сохраняет свое уникальное адресное пространство для операций rDMA+GPUDirect, это достигается за счет использования физического адресного пространства хост-машины, которое принципиально разделяет физическое адресное пространство (s) запрашивается всеми устройствами на шине PCI. Принудительно используя схему физической адресации каждого хост-компьютера, nVidia по существу изолирует каждый графический процессор на этом хост-компьютере.

Другие вопросы по тегам