news 2026/7/2 20:22:41

100G交换机吞吐下降20%——一次DPDK Hash Cache Locality优化实战(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
100G交换机吞吐下降20%——一次DPDK Hash Cache Locality优化实战(上)

一、一次看起来"毫无异常"的性能下降

某数据中心核心交换机采用DPDK构建高速转发平面。

每个数据包进入Worker以后,需要完成:

  • VLAN解析
  • L2/L3查找
  • Session查找
  • ACL匹配
  • Forward Action

其中:

Session采用DPDKrte_hash管理。

系统上线半年一直稳定运行。

某次版本升级以后,测试部门反馈:

百万连接场景下:整体吞吐下降约20%。

P99时延:由5.8μs上升至7.9μs。

而:64字节包下降最明显。


查看所有监控。

全部正常。

指标状态
PMD CPU100%
RSS正常
RX Queue正常
TX Queue正常
NIC Error0
Hash Miss0

尤其:

Hash Miss 始终为0。

说明:

所有Session全部命中。

理论上:

Hash应该不存在任何问题。


核心知识点一

很多开发者容易陷入一个误区:

Hash命中率高,就意味着Hash性能高。

实际上。

命中:只是说明找到了对象。

真正决定性能的是:找到对象以后,CPU花了多少Cycle才能真正访问到它。


二、第一轮排查:是不是Hash算法变慢了?

首先怀疑:Hash函数。

查看:DPDK源码。

发现:系统仍然采用:

rte_hash_lookup_data()

Hash算法没有修改。

继续统计:平均Lookup次数。

结果:完全一致。

也就是说:每个Packet执行同样次数Hash查找。

理论上:CPU消耗应该一致。

然而:实际Cycles明显增加。

问题开始变得奇怪。


三、Perf开始暴露异常

开始使用:

perf stat \ -e cycles,\ instructions,\ cache-misses,\ branches \ -p <PMD_PID>

得到:

正常版本:

指标数值
IPC1.94
Cache Miss很低
Cycles正常

升级以后:

指标数值
IPC1.58
Cache Miss略增加
Cycles↑↑

Instructions:几乎一致。

说明:代码没有执行更多。

CPU:只是执行得更慢。


核心知识点二

CPU性能下降:

并不一定意味着执行了更多代码。

更多时候:意味着CPU在等待。

现代CPU真正昂贵的。

不是算术运算。

而是等待内存。


四、热点终于出现

继续:

打开Perf Report。

结果:

热点如下:

35% rte_hash_lookup_with_hash() ↓ memcmp() ↓ session pointer

看到这里。

团队第一反应是不是:Hash算法退化了?

继续分析。

却发现:

Hash冲突没有增加。

Bucket长度完全正常。

Hash本身几乎没有变化。

那么:

CPU到底在等待什么?


五、重新认识一次Hash查找

很多开发者理解的Hash:

都是:

Key ↓ Hash ↓ Bucket ↓ Value

实际上。

DPDK真正的数据路径远没有这么简单。

一次Session查找,CPU真正经历的是:

Packet ↓ 五元组 ↓ Hash计算 ↓ Bucket ↓ Signature比较 ↓ Key比较 ↓ Session Pointer ↓ Session ↓ Forward Rule ↓ Action

注意:

这里已经出现多个不同对象。

这些对象并不一定连续存放。


核心知识点三

Hash查找真正昂贵的。

通常不是Hash函数。

而是:Hash之后的数据访问路径。

如果每一步都发生:Cache Miss。

那么Hash即使100%命中。

整体依然可能很慢。


六、真正的问题开始浮现

继续:

打开PMU事件统计:

perf stat \ -e LLC-load-misses,\ L1-dcache-load-misses,\ stalled-cycles-backend

结果:

发现:

升级以后Backend Stall明显增加。

而Hash计算耗时几乎没有变化。

CPU大量时间停留Backend。

说明:

不是ALU。

不是Branch。

而是:

等待数据。


七、为什么CPU一直在等待?

继续:

查看Session结构。

发现:

新版本为了方便扩展。

增加了多个指针成员。

例如:

struct session { struct qos_profile *qos; struct policer *policer; struct stats *stats; struct action *action; };

逻辑完全正确。

代码更加模块化。

但是:

每增加一个指针。

CPU就可能多进行一次随机内存访问。

这些访问:

如果:没有命中Cache。

CPU只能等待数据从更低层缓存甚至主存返回。

此时,真正的问题开始指向:Cache Locality(缓存局部性)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 20:21:20

2026年赣州刑事辩护律师从业现状与实务侧重观察

2026年赣州刑事法律事务现状与核心痛点近年来&#xff0c;随着法治建设的深入推进&#xff0c;赣州地区的刑事法律事务呈现出专业化与复杂化并存的趋势。面对刑事指控或复杂的民商事纠纷&#xff0c;当事人往往面临如何匹配专业资源、厘清法律关系以及应对诉讼程序等多重挑战。…

作者头像 李华
网站建设 2026/7/2 20:20:56

页面跳转

&#xff08;一&#xff09;页面注册 import router from ohos.router; Entry Component struct RouterLogin{State username:string""State password:string""build() {Column({space:25}){Image($r(app.media.7788)).width(120).height(120).borderRadi…

作者头像 李华
网站建设 2026/7/2 20:16:50

Anthropic 新推中端模型:能力媲美 Opus 4.8,安全任务执行能力更优

Anthropic 新中端模型&#xff1a;Sonnet 4.6 继任者的新突破Anthropic 新推出的中端模型是 Sonnet 4.6 的继任者。据该公司新闻稿介绍&#xff0c;这款新模型具备强大的能力&#xff0c;能够制定计划、使用浏览器和终端等工具&#xff0c;还能自主运行&#xff0c;而这些能力在…

作者头像 李华
网站建设 2026/7/2 20:16:32

2026年干细胞技术如何革新健康管理

2026年医疗行业干细胞技术及健康管理趋势近年来&#xff0c;干细胞技术在医疗领域展现出巨大潜力&#xff0c;特别是在健康管理方面。随着人们对健康管理和疾病预防意识的增强&#xff0c;干细胞技术逐渐成为公众关注的焦点。本文旨在为读者梳理干细胞技术在健康管理中的应用现…

作者头像 李华
网站建设 2026/7/2 20:15:40

洁净室设计与ESD管理:看不见的守护者

一、问题背景&#xff1a;洁净室的隐形战场在半导体晶圆厂里&#xff0c;有一个看不见的战场&#xff0c;每时每刻都在进行着无声的战斗。这个战场就是洁净室&#xff0c;而敌人是肉眼看不见的微粒和静电。我在晶圆厂工作这些年&#xff0c;见过太多因为洁净室问题导致的生产事…

作者头像 李华
网站建设 2026/7/2 20:15:22

8051内部结构

这是STC 增强型高速 8051 内核完整硬件框图&#xff08;STC8/STC32 系列&#xff0c;80MHz 主频那款&#xff09;&#xff0c;我继续沿用你熟悉的「公司老板 CPU」比喻&#xff0c;分层拆解&#xff0c;和你之前学的基础 8051 对应起来&#xff0c;区分新增升级部件。一、先划分…

作者头像 李华