опубликованные буферы recv возвращаются синхронно или асинхронно после вызова rdma_disconnect () - PullRequest
3 голосов
/ 04 мая 2010

При вызове rdma_disconnect (), я получаю события очереди завершения для всех опубликованных рабочих запросов recv до того, как rdma_disconnect () вернется, или я должен ожидать, что они придут после того, как rdma_disconnect () вернется?

1 Ответ

2 голосов
/ 21 мая 2011

Прием завершится (со статусом «ошибка сброса») асинхронно (возможно) после возврата rdma_disconnect (). Как видно из источника для rdma_disconnect (), все, что он делает - это переводит QP в состояние ошибки и отправляет запрос на отключение на другую сторону.

Переход QP в состояние ошибки действительно гарантирует, что все ожидающие рабочие запросы, отправленные в QP, будут выполнены с состоянием ошибки, но операция модификации QP немедленно возвращается, не дожидаясь истечения очередей. Точно так же rdma_disconnect () не ожидает завершения всех ожидающих рабочих запросов - на самом деле было бы трудно понять, как это возможно, поскольку CM RDMA на самом деле не имеет никакого способа узнать, сколько рабочих запросов находится в очереди, в одиночку загляните в связанный CQ, чтобы увидеть, когда все они завершатся.

Глава 10 тома 1 спецификации IB подробно описывает обработку рабочих запросов, если вас интересуют угловые случаи запросов, которые находятся в полете во время перехода в состояние ошибки и т. Д.

...