Насколько я понимаю, IBV_CREATE_QP() и RDMA_CREATE_QP буквально делают одно и то же. Если я сначала вызвал ibv_create_qp(), нужно ли мне вызывать другой, когда я устанавливаю соединение с помощью API ibrdmacm?
Более того, диф ч/б создает QP и EP?
Насколько я понимаю, IBV_CREATE_QP() и RDMA_CREATE_QP буквально делают одно и то же. Если я сначала вызвал ibv_create_qp(), нужно ли мне вызывать другой, когда я устанавливаю соединение с помощью API ibrdmacm?
Более того, диф ч/б создает QP и EP?
ibv_create_qp() и rdma_create_qp() — почти одно и то же. ibv_create_qp() возвращает указатель на созданную пару очередей, rdma_create_qp() присваивает созданной паре очередей id->qp.
Существуют глаголы Infiniband, IBV и RDMA. Глаголы RDMA имеют эквиваленты для многих глаголов Infiniband. С глаголами Infiniband у вас есть набор отдельных указателей для обслуживания, указатель пары очередей, указатели на очереди завершения, указатель на домен защиты и т. д. С глаголами RDMA все они собраны в структуре id. Посмотрите /usr/include/rdma/rdma_cma.h, struct rdma_cm_id {}.
Вы по-прежнему можете использовать ibv_create_qp() в среде глаголов RDMA, но вам нужно убедиться, что вы заполняете id RDMA->qp возвращенной парой очереди, если вы хотите выполнять какие-либо дальнейшие операции с глаголами RDMA или диспетчером соединений RDMA. .
rdma_create_ep, конечная точка создания RDMA, объединяет несколько вызовов RDMA в один вызов. К ним относятся rdma_create_id(), rdma_create_qp(), rdma_resolve_addr() и rdma_resolve_route().