DPDK ACL分类器设计深度解析:从148Mpps跌到72Mpps,一次ACL规则膨胀引发的性能雪崩
一、一次看似正常的交换机故障
在高性能DPDK交换机领域,工程师最熟悉的性能问题通常是:
- NUMA跨节点访问
- RSS分布不均
- RX Queue拥塞
- Ring竞争
- Cache Miss
- 内存带宽瓶颈
然而在运营商现网中,很多故障并不发生在这些地方。
某运营商城域网核心交换机承担:
- IDC出口汇聚
- 企业专线接入
- 互联网出口
- DDoS清洗旁路
- 用户安全隔离
系统基于DPDK构建,采用典型的:
RX PMD ↓ ACL ↓ L3 Forward ↓ QoS ↓ TX PMD流水线架构。
硬件配置如下:
| 项目 | 配置 |
|---|---|
| CPU | Intel Xeon Gold 6430 |
| Core | 64 |
| NIC | ConnectX-6 Dx Dual 100G |
| Memory | DDR4 3200 |
| DPDK | 23.11 |
实验室性能:
64B: 148.8Mpps 128B: 148.8Mpps 256B: 148.8Mpps长期稳定运行。
某次安全系统升级后。
新增:
- 境外IP黑名单
- 恶意IP库
- 用户组隔离
- 企业ACL策略
- DDoS攻击规则
ACL规则数量激增。
上线两天后。
监控系统持续告警:
TCP重传增加 业务时延升高 用户访问变慢 部分流量丢失二、第一轮排查
查看整体吞吐。
结果:
RX PPS 148Mpps TX PPS 72Mpps转发能力下降超过50%。
查看PMD线程:
show pmd statistics结果:
PMD0 100% PMD1 100% ... PMD31 100%全部核心100%。
这其实符合DPDK特征。
因为PMD本质是:
while (1) { rte_eth_rx_burst(); process(); rte_eth_tx_burst(); }永不休眠。
因此:
CPU 100% ≠ 性能正常继续查看NIC:
show interface statistics结果:
RX Miss Error 0 RX CRC Error 0 TX Error 0正常。
RSS:
Queue0 4.6Mpps Queue1 4.5Mpps ... Queue31 4.7Mpps均衡。
NUMA:
NIC Node0 PMD Node0 Hugepage Node0正常。
FDB:
99.98%正常。
ARP:
99.99%正常。
此时故障开始变得诡异。
因为:
CPU正常 NIC正常 RSS正常 FDB正常 ARP正常但性能却下降一半。
三、Perf揭开真相
继续执行:
perf top得到结果:
rte_acl_classify() 47% rte_acl_match() 18% mlx5_tx_burst() 11% lpm_lookup() 7%现场工程师立刻意识到:
问题出现在ACL。
而不是转发。
四、ACL到底是什么
很多开发人员认为ACL只是:
if (src_ip == xxx) { drop; }实际上运营商交换机里的ACL远比这复杂。
典型匹
