linux kernel 2.6.32 中 tcp_abc 的实现如下:
323 /* RFC3465: ABC
324 * We MAY increase by 2 if discovered delayed ack
325 */
326 if (sysctl_tcp_abc > 1 && tp->bytes_acked >= 2*tp->mss_cache)
327 cnt <<= 1;
如果我理解正确的话,它可以处理延迟 ack,最多只有两个 mss 聚合。但是当多个 ack 数据包被 LRO/GRO 聚合在一起时,这种实现效果很差。
所以我的问题是:
- tcp_abc 会受 Linux 中的 LRO/GRO 影响吗?
- 有什么办法可以解决吗?