内核网络协议栈offload功能盘点

TSO
TCP Segmentation Offload的缩写,只针对TCP包发送,超过 MTU 大小的报文不需要在协议栈分段,直接offload到网卡,由网卡硬件实现分段,降低 CPU 负载。除了TSO,还有一个LSO(Large Segment Offload),LSO的定义相对于TSO更加宽泛一些,不仅仅只是指TCP包,不过一般可以近似认为二者是同一个概念,猜测可能是硬件上网卡很难做到针对所有协议都可以offload的特性,所以内核中并没有针对这个特性的功能实现。

UFO
UDP Fragmentation offload的缩写,和TSO类似,只针对UDP包发送。

GSO
Generic Segment Offload的缩写,它是 TSO 的软件实现,延迟大报文分段时机到 IP 层结束或者设备层发包前,不同版本内核实现不同。

LRO
Large Receive Offload的缩写,在接收网络包时,由网卡硬件实现网络包的聚合,聚合成一个大的数据包在上报到内核协议栈中去处理,从而减少协议栈的处理压力提升性能。

GRO
Generic Receive Offload,是 LRO 功能的软件实现版本,通过将接收到的多个数据包聚合成一个大的数据包,然后传递给网络协议栈处理,以减少上层协议栈处理开销,提高系统性能。

RSS
Receive-Side Scaling (RSS), 基于多个硬件接收队列执行接收操作,多CPU同时处理,提升接收性能。

RPS
Receive Packet Steering,和RSS类似,区别在于RPS是软件实现的队列,利用软件来做接收数据分发,多CPU同时处理。

RFS
Receive flow steering,相对于RPS来说进一步提高了cache hit的性能。

XPS
Transmit Packet Steering缩写,和RSS/RPS相对应,对于有多队列的网卡,建立 CPU 与 tx queue 的对应关系,而对于只有单队列的网卡,则没有优化作用。

XDP
基于ebpf实现,只作用于接收操作,在hook点协议栈处理之前,可以在进入协议栈之前处理一些包的策略,从而offload协议栈的负载到更底层。

TC
基于ebpf实现,只作用于发送操作,实现QOS和流控功能。

checksum offload
对于TCP层和UDP层的checksum计算,可以offload到网卡中利用硬件进行计算,从而减少checksum计算带来的一些计算开销。
使用 ethtool -k 可以查看对应网卡的checksum offload特性支持情况:

generic-segmentation-offload: on
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页