首页 / 资讯中心 / 文章详情

123、RDMA故障排查:CQ溢出与WR丢失

123、RDMA故障排查:CQ溢出与WR丢失 ★ FEATURED ARTICLE
一、凌晨三点的报警上周三凌晨,我被值班系统从床上拽起来。客户那边跑了一周的AI训练集群突然炸了——节点间通信延迟从稳定的3微秒跳到了200毫秒,部分作业直接超时崩溃。登录上去一看,ibv_devinfo显示端口正常,链路层没问题。但ibv_cq_events统计里,CQ溢出计数飙到了四位数。再查QP状态,好几个QP的发送队列深度只剩正常值的十分之一。这不是第一次了。RDMA开发里,CQ溢出和WR丢失就像一对孪生兄弟,总是一起出现。但很多人搞混了因果关系——CQ溢出不一定是WR丢失的原因,WR丢失也不一定导致CQ溢出。今天把这笔账算清楚。二、CQ溢出:你根本没取走完成事件先看CQ溢出的本质。CQ是个环状缓冲区,硬件往里头写完成事件(CQE),软件通过poll操作取走。CQ深度是固定的,比如你创建时设了1024个槽位。硬件写CQE的速度远快于软件poll的速度,环就满了。硬件再想写,没地方了——CQ溢出。这里踩过坑:很多人以为CQ溢出就是队列满了,实际上硬件的行为取决于厂商实现。Mellanox的ConnectX系列在CQ溢出时,会直接丢弃后续的CQE,但不会通知你。你poll的时候拿到的还是旧数据,直到你发现某个WR的完成事件永远不出现。我那次排查,先看了CQ的溢出计数器:ibv_devinfo-dmlx5_0
阅读完成 · 觉得有帮助?
咨询建站