2015-11-28 2 views
4

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

Я работаю с 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/), которые говорят:

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

  • локальной памяти (либо переменная или массив)
  • Глобальная память (либо переменная или массив)
  • динамически распределяемой памяти (с использованием таНос() или ММАП())
+0

спасибо за приятные ответы: D Я надеюсь, что библиотека MPI от Intel использует концепцию как в Linux, так и в Windows. (Кажется необходимым привязать страницы интересов, чтобы RDMA мог безопасно читать страницы.) – syko

Смежные вопросы