ARTICLE · 977409
图解网卡发送/接收卸载和多队列
图解网卡发送/接收卸载和多队列
图解网卡发送/接收卸载和多队列
Linux 网络性能优化的核心,就是把脏活甩给网卡。
100G 网卡跑满时每秒要处理上百万个包。全靠 CPU 算,单核很快就被打满。
📒发送:能推给硬件就别让内核切。
以前 CPU 得把大块数据切成小包,还得挨个算校验和。
现在靠 TSO,内核只管交出一个大包,网卡直接切好发出去。
GSO 是个兜底框架,网卡支持就交给硬件,不支持就软件补位。
📒接收:把小包拼大再往上送。
以前每来一个小包都触发一次中断,CPU 频繁被叫醒太耗资源。
LRO 是网卡粗合并,但会破坏原始包信息,没法做转发。
现在的 GRO 是内核精细合并,确认包是连续的才拼起来,安全得多。
📒多核:让每个 CPU 各司其职。
收包用 RSS,靠网卡哈希把不同连接分给不同 CPU。
要是网卡队列不够,就用 RPS 和 RFS 软件分发,尽量让包去应用所在的 CPU。
发包则靠 XPS,让每个 CPU 固定走专属队列,别抢锁。
另外,校验和卸载和 NAPI 轮询也是标配,能省下不少力气。
排查单核跑满问题时,先看硬中断是不是全挤在一个核上。
再看队列有没有真正打散流,最后查查各归队机制开没开。
#Linux网络性能优化 #TSO #GSO #LRO #GRO #NAPI #网卡卸载
其它金额
赞赏金额
¥
最低赞赏 ¥0
1
2
3
4
5
6
7
8
9
0
.
原文把活儿甩给网卡:图解 NIC 发送/接收卸载与多队列 CPU 亲和
江苏,8小时前,