ARTICLE · 1342641
网卡如何提高网络吞吐:队列、卸载、旁路与
网卡如何提高网络吞吐:队列、卸载、旁路与
网卡如何提高网络吞吐:队列、卸载、旁路与
想提网卡吞吐,光买贵网卡没用。真正卡住速度的,是链路、网卡并行能力、PCIe 总线和内核协议栈。
先算笔账:100 吉比特链路上跑 64 字节小包,每秒要处理近 1.5 亿个包。一颗 CPU 核走完整内核栈,每秒最多扛两三百万个。想跑满线速,得砸几十颗核——这还不算内存和锁竞争。大包看 PCIe,小包才考真本事。
提升吞吐就三招:把逐包成本摊成批量,把 CPU 的活塞给硬件,再把单核拆成多核并行。
多队列和 RSS 能把连接分到不同核上。但同一条流永远进同一个队列,保序是对的,代价是一条 TCP 连接只能吃一个核。隧道内层哈希没配好,整条隧道也会退化成单核。发送方向还得配 XPS 和多队列 qdisc,不然多个核抢同一把锁,发也发不满。
中断合并能省下大量 CPU,代价是延迟变高。TSO、校验和这些卸载功能,能把分段、算和的活甩给网卡。但抓包会看到巨型包,容易误判;LRO 会把多个包揉成一个,转发设备开了会失真。巨帧也能大幅减少包数,可丢包重传代价更大,混跑小包还会拖累尾延迟。
想再往上,就得绕开内核。RDMA 让远端 CPU 完全不参与;DPDK 把网卡交给用户态独占轮询;AF_XDP 和 XDP 折中,保留内核管理面。链路聚合看着加宽了,单条流还是被哈希钉死在一个口上,救不了单流。
吞吐不是把参数拉满,而是找准瓶颈,只改那一层。
原文网卡如何提高网络吞吐:队列、卸载、旁路与总线约束
四川,2小时前,















































































