Как использовать SRQ с разными соединениями в libibverbs

Как использовать SRQ при подключении к более чем одному соединению. скажем, есть три соединения, а именно процесс 0, 1 и 2. для создания SRQ нам нужно вызвать

struct ibv_srq *ibv_create_srq(struct ibv_pd *pd, struct ibv_srq_init_attr *srq_init_attr);

для вышеуказанного вызова нам нужно предоставить домен защиты, насколько мне известно, домен защиты выделяется для каждого соединения вызовом

ibv_alloc_pd(id->verbs)

в котором id создается для каждого канала. в основном, мой вопрос заключается в том, как назначить SRQ для разных QP, принадлежащих разным идентификаторам соединения с другим доменом защиты, или, другими словами, разные соединения могут иметь один и тот же домен защиты?


person Aunn Raza    schedule 10.09.2014    source источник


Ответы (2)


Один SRQ или PD не может использоваться несколькими процессами. Смысл SRQ в том, чтобы уменьшить количество сообщений о приеме, которые необходимо опубликовать, когда один процесс имеет много QP. И совместное использование SRQ между процессами на самом деле не имело бы смысла. Когда вы отправляете получение в SRQ, буфер должен исходить из адресного пространства одного из процессов. Затем, если получение на QP другого процесса использовало этот рабочий запрос, этот процесс не смог бы получить доступ к полученным данным (поскольку буфер принадлежит другому процессу).

Конечно, вы можете совместно использовать SRQ и все другие структуры данных глаголов между несколькими потоками в одном процессе.

Единственный объект глаголов, который может совместно использоваться несколькими процессами, — это домен XRC (XRCD). См. ibv_open_xrcd() и т. д.

person Roland    schedule 10.10.2014

В последней версии perftest должен быть пример кода для использования SRQ: https://www.openfabrics.org/downloads/perftest/.

RDMAMojo также объясняет, как создавать пары очередей, использующие SRQ: http://www.rdmamojo.com/2012/12/21/ibv_create_qp/.

person Anuj Kalia    schedule 10.09.2014