DPDK高性能交换机深度实践:一次RCU延迟释放引发的转发表性能雪崩

发布时间:2026/6/20 4:24:06
DPDK高性能交换机深度实践:一次RCU延迟释放引发的转发表性能雪崩 一、故障背景某大型云数据中心部署了一批DPDK软件交换机。主要承担EVPN VXLAN LeafL2/L3 GatewayOverlay RoutingACL FilteringTelemetry硬件平台项目配置CPUIntel Xeon Gold 6430网卡Intel E810DPDK23.11PMD Core32Route Scale600万 Prefix正常运行时92Mpps长期稳定。某次业务迁移期间大量租户迁移。BGP EVPN发生路由撤销 路由学习 MAC迁移 ARP迁移此后开始出现P99 RTT升高 TCP重传增加 PPS下降但监控显示PMD线程 100%始终如此。二、第一轮排查查看网卡统计rte_eth_stats_get()结果imissed 0 ierrors 0 rx_nombuf 0完全正常。RSS统计32 Queue 均衡正常。ACL统计Lookup Cycles 无明显变化正常。LPM查找DIR24_8 稳定正常。问题陷入僵局。三、发现关键线索运维团队发现问题只出现在EVPN收敛期间而静态路由环境完全正常。这意味着问题可能不在查表而在更新表四、交换机中的控制面与数据面现代交换机控制面BGP EVPN OSPF负责增删路由数据面PMD负责查找路由问题来了当控制面删除一条路由时fib_delete(prefix);如果立即释放free(route);危险。因为PMD线程可能正在访问。五、为什么不能立即释放假设Core7route fib_lookup(ip);刚拿到指针。此时控制面free(route);那么Core7route-nh立刻变成野指针因此现代交换机大量使用RCURead Copy Update机制。六、RCU工作原理控制面创建新版本 ↓ 替换指针 ↓ 旧对象进入回收队列数据面继续访问旧对象。等待Grace Period结束。再释放。下面是典型的RCU结构示意七、问题开始浮现EVPN收敛期间每秒120万次 Route Update意味着旧路由对象 旧邻接对象 旧MAC对象持续进入RCU回收链表理论上没问题。但现场统计发现RCU Pending Objects不断增长。八、为什么会增长继续分析。发现PMD线程while(1) { rte_eth_rx_burst(); process(); rte_eth_tx_burst(); }永远不睡眠。对于RCU来说需要Reader离开临界区才能完成Grace Period。而某些代码rcu_read_lock(); process_packet(); rcu_read_unlock();包围了整个Burst处理。结果Grace Period 极长九、RCU对象开始堆积系统运行数分钟后Pending Route 280万继续增长Pending Route 430万最终700万十、第二个隐患这些对象虽然逻辑删除但物理未释放于是内存占用16GB ↓ 44GB ↓ 78GB持续增长。十一、缓存开始失效原来活跃FIB8GB后来8GB 70GB Pending导致CPU缓存命中率下降。Perf统计LLC Miss从4%增长到18%十二、为什么查找时间没变这是最迷惑人的地方。单次fib_lookup()耗时仍然正常。但缓存污染导致Route Metadata Neighbor Metadata访问成本上升。于是Cycles/Packet持续增加。十三、真正根因完整链路EVPN收敛 ↓ 大量Route Delete ↓ RCU Pending增长 ↓ Grace Period过长 ↓ 对象无法释放 ↓ 内存膨胀 ↓ Cache污染 ↓ Cycles/Packet增加 ↓ PPS下降十四、定位证据统计rcu_pending_count();结果时间Pending初始2万5分钟180万10分钟420万20分钟730万与PPS下降趋势完全一致。十五、解决方案方案一缩小RCU读侧范围原来rcu_read_lock(); process_burst(); rcu_read_unlock();改为for(each packet) { rcu_read_lock(); fib_lookup(); rcu_read_unlock(); }Grace Period显著缩短。方案二分层路由对象把Route Neighbor Statistics拆分。减少回收对象大小。方案三异步批量释放引入RCU Reclaimer Thread集中回收。方案四控制面限速避免百万级更新风暴瞬时冲击。优化结果指标优化前优化后PPS61M91MPending Route730万8万LLC Miss18%4%RTT P995.3ms0.7ms核心知识点总结知识点1高性能交换机中的性能问题不一定发生在查表也可能发生在删表知识点2RCU解决的是读写并发问题。知识点3RCU的成本不是查找。而是延迟释放知识点4PMD线程100%运行时。Grace Period设计尤为关键。知识点5大量Pending对象会污染缓存。知识点6缓存污染不一定体现在Lookup时间上。却会体现在Cycles Per Packet上。知识点7大型EVPN交换机设计中FIB更新架构和FIB查找架构同样重要。