2016-06-05 2 views
1

У меня есть дополнительные процессы, которые должны обмениваться файлами по сети IB. Затем файлы будут использоваться другими процессами.RDMA tranfer без памяти отображения

Технологический процесс заключается в следующем:

  1. Создать файлы в/DEV/ГИМ
  2. Изменение размера файлов соответственно
  3. Карта файлов в процессе В.М.
  4. Регистрация mmaped район с ibv_reg_mr
  5. Инициировать RDMA для передачи данных

Оказалось, что узким местом в моей схеме является ib_reg_mr (я измерял отдельно регистрацию памяти 3Gb, занимая 1,78 секунды). Кажется, что он вызывает отображение области памяти в адресное пространство процессора. К сожалению, эта операция не требуется, поскольку принимающий процессор не использует эту память. Память должна отображаться и использоваться другими процессами позже.

Поэтому я подумал, что было бы разумно обойти измененные таблицы страниц для процесса приема, но я не смог найти, если это вообще возможно.

Не могли бы вы мне посоветовать, если есть способ инициировать передачу данных в области памяти без отображения его для обработки адресного пространства?

ответ

1

Насколько я знаю, нет никакого способа, чтобы зарегистрировать область памяти без его сопоставляется с таблицы страниц процесса. Во время регистрации страницы привязаны так, что отображение не изменяется, пока устройство обращается к страницам, и это требует сопоставления их с процессом. С помощью пейджинга по требованию вы можете отложить отображение страниц в процессе до тех пор, пока HCA фактически не использует их, но в конечном итоге они будут отображаться.

1

Вместо этого попробуйте FRWR (запрос на работу с быстрой памятью). Это API, который делает регистрацию памяти через ibv_post_send глагол - гораздо более быстрый способ:

http://lists.openfabrics.org/pipermail/general/2008-May/050235.html

http://lxr.free-electrons.com/source/include/rdma/ib_verbs.h?v=3.2#L734

+0

Я нашел описание структуры данных данных ibv_send_wr в книге Linux Kernel Networking, но, к сожалению, эта структура имеет другое определение в /usr/include/infiniband/verbs.h на машине, что имеет для меня значение. Я предполагаю, что это означает, что ядро ​​на этом компьютере не поддерживает эту функцию. И я не могу обновить ядро. Но в любом случае спасибо, я могу использовать этот интерфейс в будущем. – mcsim

+0

@mcsim вам не нужно обновлять ядро. Не знаете, какой дистрибутив и ядро ​​вы используете, но если он не слишком стар, вы можете просто установить пакет OFED. – kliteyn

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