Товарищи хакеры RDMA, кто-нибудь знает, истекает ли время ожидания rdma_get_recv_comp(), которое вызывает __ibv_get_cq_event()?
Моя проблема связана с теми же программами, которые показаны здесь: Программа RDMA случайным образом зависает
Он работает нормально, но не устойчив к случайным отключениям клиентов. В частности, если я принудительно убью клиента, сервер застрянет в rdma_get_recv_comp() / ipv_get_cq_event().
Это для Mellanox ConnectX-3, и я проверил, что тайм-аут по умолчанию составляет 2,14 с, а повторные попытки = 1. Но мне не ясно, будет ли ibv_get_cq_event() в режиме блокировки даже тайм-аут. Объяснение тайм-аута в документации ibv_modify_qp() предполагает, что тайм-ауты применяются только для отправки (rdma_get_send_comp()), поскольку только отправители ждут ACK. Но я не вижу никаких трудностей в том, чтобы позволить приемам также иметь тайм-аут.
Если в этом случае ожидается зависание внутри rdma_get_recv_comp(), как я могу избежать этого или реализовать тайм-аут?
Некоторые возможности:
изменить последовательность выключения моего клиента, чтобы он выполнял все необходимые отправки, чтобы он не оставлял rdma_get_recv_comp() на сервере висящим?
замените rdma_get_recv_comp() циклом, который опрашивает завершение получения