文中的重点是网卡的LRO导致接收端的ACK延时,从而使发送端的TCP的vegas算法,认为网络情况不佳,因而降低了发送速率。我对此产生的疑问是GRO和TSO,都是在数据包前做的offload,将多个数据包汇集成一个报文,同样会有延时。因此,我针对这个问题,与作者在微博上简单讨论了几句。作者的经验是GRO和TSO都没有问题,但没有明显的证据说明。
后面自己多看了一些东西。GRO和TSO确实不应该出问题,因为LRO是硬件实现,没有考虑到协议栈部分,包括一些协议的标志位。而软件是实现的GRO和TSO不一样,其实现比LRO要健壮的多。以GRO为例,甚至为上层协议栈开了接口,可以由上层协议栈判断是否结束GRO。
虽然目前我还没有阅读相关代码。但从GRO的实现上,基本上可以分析,在林文中的环境下,如果是GRO,TCP协议栈会及时结束GRO,及时发送ack,从而避免文中的问题。