欢迎来到天天文库
浏览记录
ID:27698814
大小:160.24 KB
页数:10页
时间:2018-12-05
《linux网络堆栈的排队机制》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux网络堆栈的排队机制在任何网络堆栈或设备屮,数据包的队列都是非常重要。这些队列使得不在同一时刻加载的模块能够相互通信,并且能提高网络性能,同时也会间接影响到网络延时的长短。本文章通过阐述IP数据包在Linux网络中的排队机制,来解释两个问题:>BQL—类新特性是如何减小网络延时的。>如何控制已减小延时后的缓存。下面这张图(和它的变形)将会在文屮不断的出现,用以说明具体的概念。IPStackQueueingDisciplineDriverQueue-niiiiiiiiiinPJeMJO/驱动队列(环形缓存区)驱动队列位于IP数据栈和网卡之间。驱动队列
2、使用先进先出算法,并通过环形缓存区实现一可以哲时把环形缓存区当做一个固定大小的缓存器。这个队列屮不含任何来自包(分组)的数据,直接参与排队的是描述符(descriptor)。这些描述符指向“内核套接字缓存”(socketkernelbuffers,简写为SKBs),SKB中含有在整个内核处理过程中都要使用的数据包。Q.IlitIPStackQueueingDiscipline•nniniiBBDriverQueuePJeMJssslated进入驱动队列的数据,来自IP数据栈,在IP数据桟里所有的IP数据包都要进行排队。这S数据包可以从本地获得,当某个网卡在
3、网络中充当路由器时,数据包也可以从网卡上接收,找到路巾后再发出去。从IP数据栈中进入驱动队列的数据包,先由硬件使之出列,再通过数据总线发送到网卡上,以进行传输。驱动队列的用处在于,只要系统有数据需要传输时,数据能够马上被传送到网卡进行及吋传输。大致意思就是,驱动队列给ZIP数据栈•-个排队的地方,通过硬件来对数据进行不同时的排队。实现这个功能的另一种做法是,只要当物理传输媒介准备好传输数裾时,网卞•便马上向IP数据栈申请数据。但是因为对IP数据找的数据申请,不可能马上得到相应,所以这种办法会浪费掉大量宝贵的传输资源,使吞吐量相应地降低。还有另-•种正好相反
4、的办法一在IP数据栈准各好要传输的数据包后,进行等待,直到物理传输媒介做好传输数据的准备为止。但是这种做法同样也不理想,因为在等待时IP数据栈被闲置,没有办法做别的工作。栈中的超大数据包多数网卡都有最大传输单位(MTU),川来表示能够被物理媒介传输的最大帧数。以太网的默认MTU为1500字节,也有一些支持JumboFrames的以太网MTU能够达至U9000多字节的。在IP数据栈中,MTU同时也是数据包传输的极限大小。比如,有个应用需要向TCP接口传送2000字节的数据,这时,IP数据栈就必须创建两个数据包来传送它,因为单个MTU小于2000字节。所以在进
5、行较大数据的传输时,MTU如果相对较小,那么大量数据包就会被创建出来,并且它们都要在物理媒介上传输到驱动队列屮。为了避免因为MTU大小限制而出现的大量数据包,Linux内核对传输大小进行了多项优化:TCP段装卸(TCPsegmentationoffload,简称TSO),UDP碎片装卸⑴DPfragmentationoffload,简称UFO)和类型化段装卸(genericsegmentationoffload,简称GSO)。这些优化办法,使得IP数据栈能够创建比MTU更大的数据包。对于IPv4来说,优化后能够创建出S大含65536的数据包,并且这些数据包
6、和MTU大小的数据包一样能够进入驱动队列排队。在使用TSO和UFO优化时,由网卡将较大的数据包拆分成能够传输的小数据包。对于没有该硬件拆分功能的网卡,GSO优化能够通过软件来实现相同的功能,在数据包进入驱动队列前迅速完成数据包拆分。我在前面提过,驱动队列中能包含描述符的数量是一定的(但描述符可以指向不同大小的数据包)。所以,TSO,UFO和GSO等优化措施将数据包增大,也不完全是件好事,因力这些优化也会使驱动队列中进行排队的字节数增大了许多。图像3是一个与图像2的对比图。SKBSKBIPStackQueueingDiscipline•OHiinnBDriv
7、erQueueNICPJeMJOjsSWMd虽然接下来我要将重点放在传输路径(transmitpath)上了,但是这里还是要再强调一下,Linux在数据接收端同样有类似TSO、UFO和GSO的优化措施。这些接收端优化措施同样也能将每个数据包的大小限制增大。具体来说,类型接收装卸(genericreceiveoffload,简称GRO)使网卡能够将接收到的若干数据包合并成一个大数据包后,再传给IP数据栈。在传送数据包吋,GRO能将原始数据包重组,使之符合IP数据包首尾连接的属性。GRO同样也会带來副作用:较大的数据包在传送时,可能会被拆分成了若干较小的数据包
8、,这时,就会有多个数据包在同-•数据流中同吋进行排队。较大的数据包
此文档下载收益归作者所有