首页 > 其他 > 详细

LSO, TSO, GSO和网络虚拟化

时间:2014-02-15 14:30:02      阅读:841      评论:0      收藏:0      [点我收藏+]
先来看三个缩写到底具体代表什么:Large Segment Offload (LSO),TCP segmentation offload (TSO), 以及Generic Segmentation Offload (GSO)。

首先来看LSO。我们知道计算机网络上传输的数据基本单位是离散的网包,既然是网包,就有大小限制,这个限制就是MTU(Maximum Transmission Unit)的大小,一般是1518字节。比如我们想发送很多数据出去,经过os协议栈的时候,会自动帮你拆分成几个不超过MTU的网包。然而,这个拆分是比较费计算资源的(比如很多时候还要计算分别的checksum),由CPU来做的话,往往会造成使用率过高。那可不可以把这些简单重复的操作offload到网卡上呢?

于是就有了LSO,在发送数据超过MTU限制的时候(太容易发生了),os只需要提交一次传输请求给网卡,网卡会自动的把数据拿过来,然后进行切,并封包发出,发出的网包不超过MTU限制。

反过来,当网卡收到很多碎片包的时候,也可以辅助自动组合成一段较大的数据,一次性提交给os处理。

很典型的,TCP协议中就考虑了分片存在的情况,往往是切分TCP的数据包,叫做TSO。而一般的情况,则称为LSO或者GSO。
对于其他不支持切片的协议例如UDP,则只能进行IP层上的切片。

这样做,一方面大大降低了CPU利用率,又增强了网卡等转发设备的feature,所以说有时候适当的进行offload很重要!

那么,这三个SO,跟虚拟化有什么联系呢?

在网络虚拟化中,一个最常见的技术就是隧道,这是实现overlay的通用手段。而实现隧道无非就两种思路,一种是把转发信息放到包头上,即封装/解封装(无论VXLAN还是STT都是这个思路);另外一种是由额外的数据库管理,转发时候进行查询。这两种思路各有利弊,这里不细说,如果我们采用封装/解封装的作法,那么可能原来网包并没有超过MTU限制,加上封装包头就超了,这就需要进行切片了。

所以VMware在其旗舰产品NVP中强调可以通过TSO来提高转发性能。

但是显然,前提是网卡能够支持,并且在os中配置打开。

LSO, TSO, GSO和网络虚拟化

原文:http://blog.csdn.net/yeasy/article/details/19204639

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!