一、从一次线上事故说起
去年双十一大促,我们团队负责的分布式存储集群突然出现严重的尾延迟抖动。监控面板上,P99延迟从正常的200μs飙升到5ms,整整25倍的恶化。更诡异的是,CPU利用率并不高,只有30%左右,但上下文切换次数暴涨到每秒几十万次。
我登录到出问题的机器,用perf top一看,ibv_poll_cq占据了CPU采样的大头。再查/proc/interrupts,网卡中断分布极其不均匀,CPU0的中断数比其他核高出两个数量级。
这就是典型的RDMA编程陷阱:用轮询的方式等待完成事件,同时频繁触发系统调用导致上下文切换。当时代码里写的是这样的:
while(1){intne=ibv_poll_cq(</