Недавно я начал работать с картами 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
В настоящее время я все еще выясняю все возможности.
Я заметил одну вещь: мне приходится вызывать ibv_post_send
каждый раз, когда я хочу записать в удаленную память или прочитать из удаленной памяти с помощью IBV_WR_RDMA_WRITE
или IBV_WR_RDMA_READ
соответственно. Итак, мой вопрос заключается в том, можно ли сопоставить адреса удаленной памяти с виртуальным адресным пространством хоста.
Конечно, всю инициализацию компонентов VPI, регистрацию памяти с помощью ibv_reg_mr
и обмен удаленными ключами и адресами все равно придется делать. Предлагает ли Infiniband что-либо, чтобы сделать это возможным?
Спасибо!