RDMA чтение и запись семантики размещения / видимости данных
Я пытаюсь получить более подробную информацию о семантике чтения и записи RDMA (особенно семантике размещения данных), и я хотел бы подтвердить свое понимание здесь экспертами.
- RDMA прочитал:
Будут ли данные доступны / видны в локальном буфере после того, как завершение чтения RDMA будет видно в очереди завершения. Такое же поведение, если я использую GPU Direct DMA, и локальный адрес отображается в память GPU. Будут ли данные доступны в GPU сразу после того, как завершение RDMA READ появится в очереди завершения. Если он не доступен сразу, какая операция обеспечит его.
- Запись RDMA с немедленной (или) записью + отправкой RDMA:
Может ли удаленный хост проверить наличие данных в своей памяти после того, как он увидел немедленные данные в очереди приема. И изменится ли ожидание / поведение, если запись выполняется в память графического процессора (с использованием GDR).
1 ответ
РДМА читал. Будут ли данные доступны/видны в локальном буфере после того, как завершение чтения RDMA будет замечено в очереди завершения?
Да
Будет ли такое же поведение, если я использую GPU Direct DMA и локальный адрес сопоставляется с памятью GPU?
Не обязательно. Возможно, сетевая карта отправила данные графическому процессору, но тот еще не получил их. Между тем завершение чтения RDMA уже поступило в ЦП. Основной причиной этого является семантика PCIe, которая позволяет переупорядочивать записи в другое место назначения (память CPU/GPU).
Если он не доступен сразу, какая операция его обеспечит?
Чтобы убедиться, что данные поступили в GPU, можно установить флаг на CPU после завершения RDMA и опросить этот флаг из кода GPU. Это работает, потому что чтение PCIe, выдаваемое графическим процессором, будет «подталкивать» записи DMA сетевой карты (согласно семантике упорядочения PCIe).
Запись RDMA с немедленной (или) записью и отправкой RDMA: может ли удаленный хост проверить наличие данных в своей памяти после того, как он увидел немедленные данные в очереди приема. И изменится ли ожидание/поведение, если запись будет осуществляться в память графического процессора (с использованием GDR).
Да, это работает, но GDR страдает от той же проблемы, что и выше, когда записи в память графического процессора поступают не по порядку по сравнению с памятью процессора, опять же из-за семантики упорядочения PCIe. RNIC не может управлять PCIe и, следовательно, не может навязывать «желаемую» семантику в любом случае.