RDMA Защита от чтения для операций с локальной памятью
У меня есть следующий сценарий: мой сервер выделяет буфер размером 1 МБ, который периодически обновляется и записывается (примерно каждые 50 мс). Клиент подключается к серверу через Infiniband и периодически считывает этот буфер через RDMA Read (возможно, даже быстрее, чем он обновляется).
Мой вопрос: есть ли способ гарантировать, что локальная операция записи является атомарной, чтобы чтение RDMA могло читать только действительную и непрерывную память?
Правильно ли я понял, что области памяти защищены только от параллельных операций RDMA, но не операций с локальной памятью? Есть ли способ добиться такого поведения с помощью API ibverbs?
1 ответ
Ответ может зависеть от устройства. В RDMA Verbs есть два разных режима атомарной операции (которые можно проверить с помощьюibv_query_device
глагол). При атомарные операции являются атомарными только по отношению к другим операциям с того же устройства, в то время как
IBV_ATOMIC_GLOB
означает, что они атомарны также в отношении операций ЦП и других устройств RDMA.
Если устройство использует
IBV_ATOMIC_HCA
, вам необходимо синхронизировать чтение RDMA с записью ЦП, чтобы обеспечить согласованность данных.