Linux
分类: LINUX
2014-12-03 21:58:04
TSO(TCP Segmentation Offload),利用网卡对TCP数据包分片减轻CPU负荷的一种技术,也叫 LSO (Large segment offload),如果数据包的类型只能是 TCP,则被称之为 TSO。TSO针对TCP,支持 TSO功能的同时硬件需要支持TCP校验计算和分散/聚集 (Scatter Gather) 功能,目前很多网卡支持TSO特性。
UFO(UDP-fragmentation-offload),类似于TSO,但目前很少网卡支持UFO。
GSO(Generic Segmentation Offload),比TSO更通用支持任意四层协议,尽可能推迟分片至发送到网卡驱动前,此时检查网卡是否支持分片(TSO/UFO)。如支持直接发到网卡,不支持就进行分片再发往网卡。此时大数据包只走一次协议栈,不需要分割成几个包分别走,提高了效率。 LRO(Large Receive Offload),通过将接收到的多个TCP数据聚合成一个大的数据包传递给协议栈处理,以减少上层协议栈处理开销,提高系统接收TCP数据包的能力。
GRO(Generic Receive Offload),基本思想跟LRO类似,克服了LRO的一些缺点,更通用,LRO缺点如下:
1. 数据包合并可能会破坏一些状态
2. 数据包合并条件过于宽泛,导致某些情况下本来需要区分的数据包也被合并了,这对于路由器是不可接收的
3. 在虚拟化条件下,需要使用桥接功能,但 LRO 使得桥接功能无法使用
4. 实现中,只支持 IPv4 的 TCP 协议
而GRO 的合并条件更加严格和灵活,并且在设计时就考虑支持所有的传输协议,因此后续的驱动,都应该使用 GRO 的接口而不是 LRO,内核可能在所有先有驱动迁移到 GRO 接口之后将 LRO 从内核中移除。
RSS(Receive Side Scaling),网卡的新特性,俗称多队列。具备多个RSS队列的网卡,可以将不同的网络流分到不同队列,再分别将这些队列分配到多个CPU核心上进行处理,从而将负荷分散,充分利用多核处理器的能力。