一次诡异的DPDK网关性能下降事故:从CPU下降到定位NUMA与RSS双重故障

发布时间:2026/6/18 12:34:34
一次诡异的DPDK网关性能下降事故:从CPU下降到定位NUMA与RSS双重故障 一、事故背景某运营商城域网边缘节点部署了一套基于DPDK实现的UPF数据面系统。系统配置如下:项目配置CPUIntel Xeon Gold 6338 ×2NUMA双Socket网卡Intel XL710 40G驱动i40e PMDDPDK22.11 LTSHugePage1G HugePageWorker线程16峰值转发能力40Gbps+该系统已经稳定运行近半年。某天晚高峰期间,监控平台突然出现告警:用户下载速率下降时延升高丢包率增加CPU利用率下降这看起来似乎有些矛盾。按照传统Linux应用的经验:CPU下降意味着负载减轻。但业务质量却在变差。究竟发生了什么?二、现象分析现场监控数据显示:指标正常故障吞吐量34Gbps19Gbps丢包率0.01%7.8%用户时延5ms45msCPU利用率96%63%运维工程师第一判断:CPU都没打满,应该不是性能瓶颈。这个结论差点把整个排障方向带偏。三、DPDK系统中的CPU利用率到底意味着什么很多工程师习惯于:CPU高 = 系统忙 CPU低 = 系统闲但DPDK完全不是这样。DPDK采用PMD(Poll Mode Driver)机制。其核心代码类似:while (1) { nb_rx = rte_eth_rx_burst(...); process_packets(); rte_eth_tx_burst(...); }即使没有收到任何数据包:while (1) { }线程依然持续运行。因此:正常情况下DPDK Worker CPU通常接近100%。例如:top -H可能看到:worker0 100% worker1 100% worker2 100% worker3 100% ...这反而是健康状态。PMD线程为什么总是100%原因是:PMD采用主动轮询。其设计目标是:消除中断开销降低上下文切换获取最低时延对应流程如下: