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

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

Об исследованиях, которые я уже провел по программированию RDMA: я начал с прочтения Mellanox RDMA Aware. Руководство пользователя по программированию сетей. Во-вторых, я прочитал достаточно подробный блог, посвященный возможностям VPI Verbs/RDMA Verbs. Наконец, я прочитал три статьи по программированию 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 что-либо, чтобы сделать это возможным?

Спасибо!


person Silicon1602    schedule 11.06.2018    source источник


Ответы (1)


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

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

person Yuval Degani    schedule 12.06.2018