通用接收卸载(GRO) 是 Linux 中的一种软件技术,用于聚合属于同一流的多个传入数据包。链接的文章声称 CPU 利用率降低了,因为不是每个数据包单独遍历网络堆栈,而是单个聚合数据包遍历网络堆栈。
然而,如果你看一下 GRO 的源代码,感觉它本身就像一个网络堆栈。例如,传入的 TCP/IPv4 数据包需要经过:
每个函数执行解封装并查看相应的帧/网络/传输标头,正如“常规”网络堆栈所期望的那样。
假设机器不执行防火墙/NAT 或其他明显昂贵的每个数据包处理,那么“常规”网络堆栈中的“GRO 网络堆栈”可以加速的速度如此之慢?