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

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

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

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

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

Спасибо


person syko    schedule 28.11.2015    source источник


Ответы (1)


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

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

  • Локальная память (переменная или массив)
  • Глобальная память (либо переменная, либо массив)
  • Динамически выделяемая память (с использованием malloc() или mmap())
person John Zwinck    schedule 28.11.2015
comment
спасибо за хорошие ответы: D Я надеюсь, что библиотека Intel MPI использует эту концепцию как в Linux, так и в Windows. (Кажется, необходимо закрепить интересующие страницы, чтобы RDMA мог безопасно читать страницы.) - person syko; 28.11.2015