У меня есть дополнительные процессы, которые должны обмениваться файлами по сети IB. Затем файлы будут использоваться другими процессами.RDMA tranfer без памяти отображения
Технологический процесс заключается в следующем:
- Создать файлы в/DEV/ГИМ
- Изменение размера файлов соответственно
- Карта файлов в процессе В.М.
- Регистрация mmaped район с ibv_reg_mr
- Инициировать RDMA для передачи данных
Оказалось, что узким местом в моей схеме является ib_reg_mr (я измерял отдельно регистрацию памяти 3Gb, занимая 1,78 секунды). Кажется, что он вызывает отображение области памяти в адресное пространство процессора. К сожалению, эта операция не требуется, поскольку принимающий процессор не использует эту память. Память должна отображаться и использоваться другими процессами позже.
Поэтому я подумал, что было бы разумно обойти измененные таблицы страниц для процесса приема, но я не смог найти, если это вообще возможно.
Не могли бы вы мне посоветовать, если есть способ инициировать передачу данных в области памяти без отображения его для обработки адресного пространства?
Я нашел описание структуры данных данных ibv_send_wr в книге Linux Kernel Networking, но, к сожалению, эта структура имеет другое определение в /usr/include/infiniband/verbs.h на машине, что имеет для меня значение. Я предполагаю, что это означает, что ядро на этом компьютере не поддерживает эту функцию. И я не могу обновить ядро. Но в любом случае спасибо, я могу использовать этот интерфейс в будущем. – mcsim
@mcsim вам не нужно обновлять ядро. Не знаете, какой дистрибутив и ядро вы используете, но если он не слишком стар, вы можете просто установить пакет OFED. – kliteyn