offload

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

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

LSO/LRO

LSO/LRO,分别对应到发送和接收两个方向,即 Large Segment Offload 和 Large Receive Offload。

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

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

一般的,LSO 和 LRO 主要面向 TCP 报文。

GSO/GRO

Generic Segmentation Offload 和 Generic Receive Offload,分别比 LSO 和 LRO 更通用,自动检测网卡支持特性,支持分包则直接发给网卡,否则先分包后发给网卡。新的驱动一般用 GSO/GRO。

TSO/UFO

TCP Segmentation Offload 和 UDP fragmentation offload,分别对应 TCP 报文和 UDP 报文。

很典型的发送模式,TCP 协议中就考虑了分片存在的情况,往往是切分 TCP 的数据包,叫做 TSO。而一般的情况,则称为 LSO 或者 GSO。

对于其他不支持切片的协议例如 UDP,则只能进行 IP 层上的切片。

TSO (tcp-segmentation-offload)

从名字来看很直观,就是把tcp分段的过程转移到网卡中进行。当网卡支持TSO机制时,可以直接把不超过滑动窗口大小的payload下传给协议栈,即使数据长度大于MSS,也不会在TCP层进行分段,同样也不会进行IP分片,而是直接传送给网卡驱动,由网卡驱动进行tcp分段操作,并执行checksum计算和包头、帧头的生成工作。

UFO(udp-fragmentation-offload)

是一种专门针对udp协议的特性,主要机制就是将IP分片的过程转移到网卡中进行,用户层可以发送任意大小的udp数据包(udp数据包总长度最大不超过64k),而不需要协议栈进行任何分片操作。目前貌似没找到有支持UFO机制的网卡,主要是应用在虚拟化设备上。

GSO(generic-segmentation-offload)

相对于TSO和UFO,GSO机制是针对所有协议设计的发送模式,更为通用。同时,与TSO、UFO不同的是,GSO主要依靠软件的方式实现,对于网卡硬件没有过多的要求。其基本思想就是把数据分片的操作尽可能的向底层推迟直到数据发送给网卡驱动之前,并先检查网卡是否支持TSO或UFO机制,如果支持就直接把数据发送给网卡,否则的话再进行分片后发送给网卡,以此来保证最少次数的协议栈处理,提高数据传输和处理的效率。

接收模式除了LRO、GRO,多核服务器中的网卡还推荐考虑 RSS(Receive Side Scaling),将网流分配到多个 RSS 队列上,多个队列绑定到不同的核心上,分散负载。

RSS(Receive Side Scaling)

具备多个RSS队列的网卡,可以将不同的网络流分成不同的队列,再将这些队列分配到多个CPU核心上进行处理,从而将负荷分散,充分利用多核处理器的能力,提交数据接收的能力和效率。

可以通过 ethtool -k eth0 命令来查看各个选项的当前状态;
通过 ethtool -K eth0 gso off/on 这样的命令来开关。

# ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: ontx-checksum-ipv4: ontx-checksum-ip-generic: off [fixed]tx-checksum-ipv6: ontx-checksum-fcoe-crc: off [fixed]tx-checksum-sctp: off [fixed]
scatter-gather: ontx-scatter-gather: ontx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: ontx-tcp-segmentation: ontx-tcp-ecn-segmentation: off [fixed]tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-ipip-segmentation: off [fixed]
tx-sit-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-mpls-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]

VXLAN

在网络虚拟化中,一个最常见的技术就是隧道,这是实现overlay的通用手段。而实现隧道无非就两种思路,一种是把转发信息放到包头上,即封装/解封装(无论VXLAN还是STT都是这个思路);另外一种是由额外的数据库管理,转发时候进行查询。

VXLAN 现在已经是常见的二层虚拟化实现技术,但是由于它需要对每个数据包都进行封装、解封装等操作,导致基于软件的解决方案效率不高。而且如果我们采用封装/解封装的作法,那么可能原来网包并没有超过MTU限制,加上封装包头就超了,这就需要进行切片了。 现在已经有网卡开始支持对 VXLAN 进行一些辅助操作,包括封装、解封装,以及 checksum 计算等。

网络虚拟化中的 offload 技术:LSO/LRO、GSO/GRO、TSO/UFO、RSS、VXLAN相关推荐

  1. OSF SDN在云计算网络虚拟化中的应用

    感谢张卫峰老师辛勤付出. 今天讲的这些我基本不懂,需要多学习. SDN对云计算网络很重要 当前OpenStack Neutron的问题 SDN网络虚拟化方案一览 OVS的子项目OVN介绍 盛科DVNP ...

  2. 以太网卡TSO、GSO、LRO、GRO描述及相关配置

    文章目录 以太网卡TSO.GSO.LRO.GRO描述及相关配置 硬件包拆分与合并 TSO(TCP Segmentation Offload ) UFO(UDP Fragmentation Offloa ...

  3. 网络虚拟化技术与NFV

    一.虚拟化技术概述 1.虚拟化技术简介 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独 ...

  4. 网络协议栈TSO/UFO/GSO/LRO/GRO/RSS特性

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 网卡多队列技术与RSS功 ...

  5. SDN系统方法 | 8. 网络虚拟化

    第8章 网络虚拟化 如第2章所述,网络虚拟化和本书介绍的其他部分有所不同,这是SDN第一个成功的商业用例.网络虚拟化可以在服务器上实现,通常不需要物理网络中的交换机提供任何帮助.网络虚拟化可以实现为现 ...

  6. KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  7. 华为dra路由方式分为relay和proxy_华为云计算(3)——网络虚拟化

    ​关注微信公众号IT小组,获取更多干货知识~ 一.网络虚拟化 网络虚拟化在介绍网络虚拟化之前,需要考虑一个问题--为什么需要网络虚拟化呢?之所以要对网络进行虚拟化,是因为在没有进行虚拟化之前,每个服务 ...

  8. 网络虚拟化基础协议之Geneve

    网络虚拟化最基础的技术莫过于分层(Overlay.Underlay),要实现分层有两种手段.一个是映射(Mapping),一个是封装(Encapsulation). 映射,主要思路是转发时替换报文语义 ...

  9. Hyper-V 3.0网络虚拟化PART 4:私有交换机

    在前面的文章中我们已经了解了Hyper-V虚拟交换机的外部交换机和内部交换机,其实看到这里相信大家都差不多明白外部和内部虚拟交换机的区别和用途了,那么今天我们就一起来看下最后一种交换机--私有交换机. ...

  10. neutron中网络虚拟化技术的应用

    声明:  本博客欢迎转载,但请保留原作者信息!  作者:柯晓东  团队:华为杭州OpenStack团队 Neutron依赖的组件多,看起来太麻烦.买了某本珠玑的书,该书字间距太大,唠嗑比较多,知识普及 ...

最新文章

  1. unity3d 2019中文版
  2. Color Pilot 5中文版
  3. JavaScript基本概念(下)
  4. suse linux 11 HBA信息,HP BL660 GEN8 SUSE 11 查询HBA信息 驱动版本 固件版本 设备名称
  5. 给大家介绍一个好用的数据分析框架
  6. 生物研究中不得缺少的数字概念
  7. 打开Jupyter Notebook 时报错:EnvironmentLocationNotFound: Not a conda environment:
  8. java 枚举 面试题_java 枚举(面试题)基本知识总结即简例
  9. linux下undefined reference to 、`pthread_create‘,undefined reference to `pthread_join‘
  10. wr885n虚拟服务器设置,动态IP设置:选择动态IP(以太网宽带
  11. uoml文档交换服务器,文档处理系统和方法
  12. OFD文件结构--OFD.xml
  13. 6、深思数盾加密狗使用小记
  14. 【冰糖Python】深度森林 DeepForest
  15. 计算机查看正在运行的程序,win7系统查看当前正在运行程序状态的方法
  16. 业务安全之接口调用安全
  17. java+mysql基于JSP0801报刊订阅系统(java,web)
  18. python统计元音字母个数_Quzh[python]统计元音字母——输入一个字符串,统计处其中元音字母的数量。...
  19. win10企业版2016长期服务版本---低配置电脑最适合的win10版本
  20. 利用CSS设置文字的阴影效果

热门文章

  1. 图片怎么转换到Excel表格?偷偷安利一个好用的方法
  2. SPF算法计算过程--例
  3. YOUTUBE API调用 JAVA
  4. 古今地名对照总表 按笔划数排序 强烈推荐的资料
  5. 查找重复姓名的SQL语句
  6. Science Advances:恐惧学习中内侧前额叶和杏仁核theta振荡同步活动
  7. Python基础教程:教你制作一个汇率换算程序
  8. 计算机硬盘发展现状,固态硬盘的发展现状
  9. 看英语数据手册很难?5步帮你搞定!
  10. 数位板软件测试工资,一位强迫症患者对板子的深度剖析,绘王H950P数位板测评...