100G交换机为何仍然发生微突发丢包?——DPDK Packet Buffer与Backpressure机制深度解析

一、现网故障

某数据中心核心交换机采用DPDK实现用户态高速转发。

硬件配置:

  • 双路Intel Xeon服务器

  • Intel 100G Ethernet Controller

  • 每端口8个RX Queue

  • 每Queue绑定一个PMD线程

  • 150Mpps转发能力

系统已经稳定运行一年。

某天上线一项新业务后:监控开始报警:

  • PPS下降约8%

  • P99时延增加

  • 偶发丢包

  • CPU依然100%

  • 网卡Error为0

所有工程师第一反应:是不是DPDK处理不过来了?

经过查看:

CPU:
100%

RX Queue:
正常

TX Queue:
正常

Descriptor:
正常

RSS:
均衡

所有常规指标:全部正常。


二、第一轮排查

首先查看DPDK统计:

struct rte_eth_stats stats;

rte_eth_stats_get(port, &stats);

得到:

imissed = 0

rx_nombuf = 0

ierrors = 0

说明:RX Ring没有丢包。

继续查看:

ethtool -S

同样:

CRC Error:0

DMA Error:0

Link:正常。

问题越来越奇怪。


核心知识点一

DPDK能够统计的:

只是:RX Descriptor之后。

而:真正的数据路径:远比RX Ring长。


三、真正的数据进入流程

很多开发者认为:

数据包:进入网卡。

立即:DMA到RX Ring。

实际上:Intel网卡内部:

还有:Packet Buffer。

真实流程:

MAC

↓

Packet Buffer

↓

Packet Scheduler

↓

RX Queue

↓

Descriptor

↓

DMA

↓

DPDK

DPDK:根本看不到:Packet Buffer。


四、什么是Packet Buffer?

Packet Buffer:位于:MAC与DMA之间。

作用:缓存:刚刚收到的数据包。

为什么需要它?

因为:PCIe DMA:速度:并不是:无限快。

Packet Buffer:负责:吸收:瞬时流量。

类似高速缓存。


核心知识点二

Packet Buffer:不是:RX Ring。

RX Ring:属于:软件。

Packet Buffer:属于:网卡ASIC内部。

二者完全不同。


五、什么是Microburst?

业务:平均:80Gbps。

但是:某1μs:

突然:100Gb数据:一起到达。

平均:没有超。

瞬时:已经超过:Packet Buffer容量。

于是:Buffer耗尽。


六、Backpressure开始工作

Packet Buffer满以后。

NIC开始Backpressure。

不同网卡实现不同。

例如:

  • 暂停DMA

  • Flow Control

  • PFC

  • Drop

Intel网卡:通常优先保护内部Pipeline。

结果:新的Packet直接丢弃。

注意:

此时:RX Ring仍然没有满。

DPDK根本不知道。


核心知识点三

Packet:可能:在DMA之前就已经丢掉。

因此:DPDK统计不到。


七、为什么CPU一直100%?

因为:PMD一直Polling。

但是:Packet根本没有进入RX Descriptor。

CPU一直空轮询。

所以:CPU100%。

吞吐下降。

这就是:很多工程师误判:CPU性能的原因。


八、如何定位?

首先:

观察:业务流量。

发现:平均:没有变化。

继续:抓:100ns级:Traffic。

发现:存在:Microburst。

随后:查看:NIC Buffer相关:Vendor统计。

发现:Packet Buffer:Occasionally Full。

至此:问题彻底定位。


核心知识点四

平均带宽:不能说明:瞬时压力。

Microburst:通常只有几微秒。

但是:

足以耗尽Packet Buffer。


九、为什么以前没有?

以前:

业务都是长流。

Packet连续。

DMA可以持续搬运。

现在:

大量RPC、小包、AI业务。

导致:

Packet集中到达。

于是:

Packet Buffer更容易瞬时耗尽。


十、工程优化

第一:

增加:RX Queue。

提高:DMA并行度。

第二:

合理设置Burst。

避免软件进一步放大Burst。

第三:

开启:PFC。

减少:Drop。

第四:

优化:业务发送节奏。

第五:

对于:AI业务。

增加:Traffic Shaping。


核心知识点五

DPDK:

解决的是软件转发。

Packet Buffer:

属于硬件缓存。

因此:

很多Microburst问题。

仅靠DPDK无法解决。


十一、优化结果

优化:发送节奏。

增加:RX Queue。

调整:Burst。

重新压测。

结果:

指标优化前优化后
PPS下降8%恢复
P9918μs8μs
Microburst Drop存在基本消失

CPU:仍然100%。

但是:业务恢复。


核心知识点总结

知识点一

DPDK只能看到DMA之后的数据。

知识点二

Packet Buffer位于MAC与RX Ring之间。

知识点三

Packet Buffer属于NIC硬件资源。

知识点四

Microburst首先冲击Packet Buffer,而不是RX Queue。

知识点五

Packet可能在进入Descriptor之前就已经丢失。

知识点六

DPDK统计不到Packet Buffer内部发生的丢包。

知识点七

CPU100%并不能说明Packet已经进入软件。

知识点八

AI、RPC、小包业务更容易产生Microburst。

知识点九

PFC、Traffic Shaping、Queue设计需要协同优化。


总结

很多DPDK性能优化都集中在CPU、NUMA、Cache、Descriptor和RSS等软件层面,但随着100G、200G甚至400G交换机逐渐普及,越来越多的问题开始发生在软件之前。Packet Buffer作为网卡内部用于吸收突发流量的重要硬件资源,往往决定了系统面对Microburst时的承受能力。一旦Packet Buffer耗尽,Backpressure机制就会启动,数据包甚至还没有进入RX Ring便已经被丢弃,因此DPDK完全无法感知。理解Packet Buffer、Backpressure以及Microburst之间的关系,对于设计真正高性能、高可靠的DPDK交换机具有重要意义,也是现代高速网络软件工程中容易被忽视却至关重要的一环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.HeBoYan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值