Отображение удаленной памяти в адресное пространство хоста с использованием Inifiniband

Недавно я начал работать с картами Infiniband, а именно с двумя семействами Mellanox Technologies MT27700 [ConnectX-4]. В конце концов, я хочу расширить существующую платформу за счет интерфейсов, основанных на API-интерфейсе VPI Verbs API/RDMA CM.

Об исследованиях, которые я уже провел в программировании RDMA: я начал с чтения Руководства пользователя по программированию RDMA Aware Networks от Mellanox. Во-вторых, я прочитал довольно полный блог, написанный о возможностях глаголов VPI / RDMA. Наконец, я прочитал три статьи по программированию RDMA, опубликованные Тариком Бедейром: [1], [2], [3].

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

OPCODE                      | IBV_QPT_UD | IBV_QPT_UC | IBV_QPT_RC
----------------------------+------------+------------+-----------
IBV_WR_SEND                 |     X      |     X      |     X
IBV_WR_SEND_WITH_IMM        |     X      |     X      |     X
IBV_WR_RDMA_WRITE           |            |     X      |     X
IBV_WR_RDMA_WRITE_WITH_IMM  |            |     X      |     X
IBV_WR_RDMA_READ            |            |            |     X
IBV_WR_ATOMIC_CMP_AND_SWP   |            |            |     X
IBV_WR_ATOMIC_FETCH_AND_ADD |            |            |     X

[источник таблицы 1]

В настоящее время я все еще выясняю все возможности.

Одна вещь, которую я заметил, это то, что я должен позвонить ibv_post_send каждый раз, когда я хочу записать в удаленную память или прочитать из удаленной памяти с IBV_WR_RDMA_WRITE или же IBV_WR_RDMA_READ соответственно. Итак, мой вопрос: возможно ли отобразить адреса удаленной памяти в виртуальное адресное пространство хоста?

Конечно, вся инициализация компонентов VPI, регистрация памяти с ibv_reg_mr и обмен удаленными ключами и адресами все еще должен быть сделан. Infiniband предлагает что-нибудь, чтобы сделать это возможным?

Спасибо!

1 ответ

Там нет собственного способа обеспечить функциональность, которую вы ищете с RDMA. RDMA разработан как сетевой протокол, который полагается на пользовательские приложения для отправки запросов на работу в формах, определенных выше. Однако, хотя это не является частью исходного протокола, я считаю, что не совсем невозможно реализовать уровень, который обеспечит удаленный доступ к памяти через локальное пространство памяти, - но я не знаю ни о какой такой системе.

Самое близкое, что приходит на ум, - это решение для дезагрегации памяти, которое в основном позволяет использовать удаленную память, когда локальная память используется полностью. Вот пример для такой системы: https://github.com/SymbioticLab/infiniswap

Другие вопросы по тегам