Отображение удаленной памяти в адресное пространство хоста с использованием 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
В настоящее время я все еще выясняю все возможности.
Одна вещь, которую я заметил, это то, что я должен позвонить ibv_post_send
каждый раз, когда я хочу записать в удаленную память или прочитать из удаленной памяти с IBV_WR_RDMA_WRITE
или же IBV_WR_RDMA_READ
соответственно. Итак, мой вопрос: возможно ли отобразить адреса удаленной памяти в виртуальное адресное пространство хоста?
Конечно, вся инициализация компонентов VPI, регистрация памяти с ibv_reg_mr
и обмен удаленными ключами и адресами все еще должен быть сделан. Infiniband предлагает что-нибудь, чтобы сделать это возможным?
Спасибо!
1 ответ
Там нет собственного способа обеспечить функциональность, которую вы ищете с RDMA. RDMA разработан как сетевой протокол, который полагается на пользовательские приложения для отправки запросов на работу в формах, определенных выше. Однако, хотя это не является частью исходного протокола, я считаю, что не совсем невозможно реализовать уровень, который обеспечит удаленный доступ к памяти через локальное пространство памяти, - но я не знаю ни о какой такой системе.
Самое близкое, что приходит на ум, - это решение для дезагрегации памяти, которое в основном позволяет использовать удаленную память, когда локальная память используется полностью. Вот пример для такой системы: https://github.com/SymbioticLab/infiniswap