网卡offload功能介绍

 

offload 是将本来该操作系统进行的一些数据包处理(如TCP分段、IP分片、重组、checksum、TCP协议处理等)放到网卡硬件中去做, 降低系统 CPU 消耗的同时,提高处理的性能。

 

普通网卡用软件方式进行一系列TCP/IP相关操作,因此,会在三个方面增加服务器的负担,这三个方面是:数据复制、协议处理和中断处理。

网卡offload功能介绍_第1张图片

 

1)TSO (TCP-Segmentation-Offload):将TCP分段工作交由网卡驱动执行,该特性需要网卡硬件支持。使能TSO后,操作系统可以将一个不超过64K字节(包含IP头长度和以太头长度在内)的任意大小的TCP报文传给网卡驱动,由网卡驱动层执行TCP分段、Checksum 计算和包头、帧头生成以及封装等工作,这样就消除了TCP分段工作带给CPU的负担。被TCP分段后的每个TCP Segment,都需要封装TCP头,TCP头部中有Checksum(校验和),因此TSO通常需要Checksum Offload支持,即由网卡驱动层同时完成TCP校验工作。

 

2)UFO(UDP-Fragmentation-Offload):TSO针对TCP报文分段处理,UFO将对UDP报文进行IP分片的工作交由网卡驱动层处理。

 

3)GSO(Generic-Segmentation-Offload): GSO相对TSO和UFO更为通用,可支持所有协议报文。GSO会首先确认网卡是否支持TSO,如果网卡支持且使能TSO,则将TCP分段交由网卡驱动层处理;否则由GSO在将报文发送给网卡驱动之前执行分片。GSO可以理解为TSO的补充。

 

4)LRO(Large-Receive-Offload):在接收网络数据时,网卡将接收到的TCP Segments执行报文重组,将合并后的大包传给操作系统。这样省去CPU在小包重组工作中的开销,提升服务器的接收效率。和TSO一样,LRO也需要网卡设备支持。LRO在做数据和信息合并时,因为收到信息有限,会出现合并后小包报文头中信息丢失等问题。鉴于LRO的局限性,一些网卡已经不再支持LRO。

LRO可能会丢失重要的数据,例如数据发送方在Header加了一些字段来区分不同的网络包。合并可能导致这些字段的丢失,因为合并之后只有一个Header了。而且当操作系统需要转发数据时,合并之后的网络包可能需要重新被分段/片。再重新分成小包,原来Header里面的差异字段就彻底丢失了。因为LRO的局限性,在一些最新的网卡上,LRO已经被删除了。

 

5)GRO(Generic Receive Offload):GRO是与GSO相对的接收方特性。GRO不依赖物理网卡,支持更加丰富类型的协议报文。GRO运行在操作系统内核中,在做小包合并时掌握的信息较LRO更多,合并规则也更加严谨,避免了合并后数据信息丢失等问题,GRO已逐渐取代LRO。

 

6)ToE(TCP/IP Offload Engine):是一门使用硬件代替软件来处理TCP/IP协议的技术,从而将CPU从TCP/IP协议处理负担中解放出来,降低CPU负载,提高了网络性能;同时也为没有TCP/IP协议处理能力的系统提供了一种解决方案。

 

7)COE(Checksum Offload Engine):支持硬件checksum 计算和校验

 

你可能感兴趣的:(Linux,网络协议栈开发,Ethernet,Linux,Driver,网卡)