Что происходит, когда RDMA работает в области mmaped?

RDMA — эффективный способ обойти бесполезные копии данных между приложением и ядром ОС. Mmap — эффективный способ работы с большим файлом, как если бы это был просто массив байтов.

Я работаю с MPI через Infiniband, который поддерживает операции сети RDMA между процессами. Каждый процесс MPI имеет очень большой файл, чтобы поделиться с другими.

Может ли каждый процесс MPI создать область mmap для каждого большого файла и поделиться ею с другими? Я хочу разрешить каждому процессу читать любой файл любого процесса так, как будто он читает их память через RDMA (односторонняя связь MPI).

Насколько я знаю, когда приложение вызывает операцию RDMA, оно передает «адрес виртуальной памяти» непосредственно в NIC. NIC будет заниматься преобразованием адреса виртуальной памяти в адрес физической памяти. Если драйвер RDMA закрепит страницу с интересами до того, как отправит запрос в NIC, думаю, он будет работать. Есть ли у кого-нибудь опыт? : D

Спасибо

4

Решение

Да, вы можете зарегистрировать в RDMA область памяти, отображенную с помощью mmap(), Смотрите документы для ibv_reg_mr (http://www.rdmamojo.com/2012/09/07/ibv_reg_mr/) которые говорят:

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

  • Локальная память (переменная или массив)
  • Глобальная память (переменная или массив)
  • Динамически распределяемая память (используя malloc () или mmap ())
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]