天天看点

协议栈对GSO和TSO,UFO的支持

TSO效率的节省源于对大包只走一次协议栈,而不是多次.

尽可能晚的推迟分段(segmentation), 最理想的是在网卡驱动里分段,在网卡驱动里把大包(super-packet)拆开,组成SG list,或在一块预先分配好的内存中重组各段,然后交给网卡。

假设网卡驱动的设置如下,并且网卡也支持这些功能:

dev->features |= NETIF_F_SG | NETIF_F_ALL_CSUM;

dev->features |= NETIF_F_TSO | NETIF_F_UFO | NETIF_F_FRAGLIST;

TCP层里的 tcp_push_one()中,若真的进行了tso_fragment(sk, skb, limit, mss_now),是个有损协议栈效率的事,但unlikely这个宏的限定,说明真进行tso_fragment()的几率不是很大,否则就用 likely()了