-
重复创建和销毁 RDMA 资源的效率问题 每次重试都会销毁并重新创建
rdma_cm_id
,在高频重试时,可能增加开销 在 RDMA 环境中,资源创建和销毁是较为昂贵的操作 改进: 考虑在连接失败后保留rdma_cm_id
,直接重复使用,而不是每次重试都销毁重新创建 -
重试机制没有退避(backoff)策略 问题:
- 当前代码在失败时立即进行下一次重试,没有引入退避策略。如果目标主机暂时不可达(例如网络不稳定),连续重试可能会耗尽资源。 改进:
- 使用指数退避策略(exponential backoff),在每次重试间隔增加一段时间,从而避免高频重试对系统造成压力。 解决方法:
- 在重试逻辑中引入睡眠时间
int backoff = 1 << retry_count;
sleep(backoff > 16 ? 16 : backoff);
-
过度使用
goto
-
事件处理的鲁棒性 某些 RDMA CM 事件未被处理,例如
RDMA_CM_EVENT_ADDR_ERROR
、RDMA_CM_EVENT_ROUTE_ERROR
等。这些事件可能在某些情况下发生(例如网络配置错误、主机不可达),未处理这些事件可能会导致逻辑问题。 -
资源分配失败的情况处理