网络性能优化GSO/GIO研究
性能检测工具安装
# curl -O http://downloads.es.net/pub/iperf/iperf-3.0.6.tar.gz
# tar axf iperf-3.0.6.tar.gz
# cd iperf-3.0.6
# ./bootstrap.sh
# ./configure
# make -j $(nproc)
# make install
基本命令
### 网卡参数查询
# ethtool -k <dev>
### 网卡参数配置
# ethtool -K <dev> <tso/gso/gro/ufo> <on/off>
### 启动监听服务
# iperf3 -s
### 发送测试数据
# iperf3 -c <srv> -l <size>
### 网卡抓包
# tcpdump -i <dev> <udp/tcp> -v
测试
测试环境网络拓扑
br-ex用于ssh连接,br-mgmt上网卡用于测试
不启用GSO/GIO
网卡配置
Host A
选项 | 状态 |
---|---|
tcp-segmentation-offload | off |
generic-segmentation-offload | off |
generic-receive-offload | off |
udp-fragmentation-offload | off |
Host B
选项 | 状态 |
---|---|
tcp-segmentation-offload | off |
generic-segmentation-offload | off |
generic-receive-offload | off |
udp-fragmentation-offload | off |
测试步骤
### Host B
# tcpdump -i em1 tcp -v
# iperf3 -s
### Host A
# tcpdump -i eno1 tcp -v
# iperf3 -c 92.0.0.240 -l 2000
### 测试部分结果如下Host A & Host B相同
14:11:12.099562 IP (tos 0x0, ttl 64, id 35338, offset 0, flags [DF], proto TCP (6), length 1500)
host-92-0-0-240.as43234.net.47050 > host-92-0-0-241.as43234.net.targus-getdata1: Flags [.], cksum 0xbfaf (incorrect -> 0x686c), seq 33370646:33372094, ack 1, win 229, options [nop,nop,TS val 13486141 ecr 13531163], length 1448
14:11:12.099563 IP (tos 0x0, ttl 64, id 35339, offset 0, flags [DF], proto TCP (6), length 1500)
host-92-0-0-240.as43234.net.47050 > host-92-0-0-241.as43234.net.targus-getdata1: Flags [.], cksum 0xbfaf (incorrect -> 0x2b13), seq 33372094:33373542, ack 1, win 229, options [nop,nop,TS val 13486141 ecr 13531163], length 1448
14:11:12.099804 IP (tos 0x0, ttl 64, id 63470, offset 0, flags [DF], proto TCP (6), length 52)
host-92-0-0-241.as43234.net.targus-getdata1 > host-92-0-0-240.as43234.net.47050: Flags [.], cksum 0xadf6 (correct), ack 33359062, win 1720, options [nop,nop,TS val 13531164 ecr 13486140], length 0
### 通过测试结果可以看出,2000字节的数据包被拆分成两个包
启用TSO/GSO/GIO
网卡配置
Host A
选项 | 状态 |
---|---|
tcp-segmentation-offload | on |
generic-segmentation-offload | on |
generic-receive-offload | on |
udp-fragmentation-offload | off |
Host B
选项 | 状态 |
---|---|
tcp-segmentation-offload | on |
generic-segmentation-offload | on |
generic-receive-offload | on |
udp-fragmentation-offload | off |
测试步骤
### Host B
# tcpdump -i em1 tcp -v
# iperf3 -c 92.0.0.240 -l 5000
### Host A
# tcpdump -i eno1 tcp -v
# iperf3 -s
### 测试部分结果如下
### Host B(发送端seq 41190502:41213670)
host-92-0-0-241.as43234.net.43976 > host-92-0-0-240.as43234.net.targus-getdata1: Flags [.], cksum 0x1488 (incorrect -> 0x9555), seq 41190502:41213670, ack 1, win 229, options [nop,nop,TS val 15504851 ecr 15459784], length 23168
15:12:09.859303 IP (tos 0x0, ttl 64, id 62667, offset 0, flags [DF], proto TCP (6), length 52)
host-92-0-0-240.as43234.net.targus-getdata1 > host-92-0-0-241.as43234.net.43976: Flags [.], cksum 0x3bc8 (correct), ack 40724246, win 16852, options [nop,nop,TS val 15459784 ecr 15504810], length 0
15:12:09.859553 IP (tos 0x0, ttl 64, id 62668, offset 0, flags [DF], proto TCP (6), length 52)
host-92-0-0-240.as43234.net.targus-getdata1 > host-92-0-0-241.as43234.net.43976: Flags [.], cksum 0x3078 (correct), ack 40727142, win 16852, options [nop,nop,TS val 15459784 ecr 15504810], length 0
### Host A
14:44:05.781627 IP (tos 0x0, ttl 64, id 28209, offset 0, flags [DF], proto TCP (6), length 1500)
host-92-0-0-241.as43234.net.43976 > host-92-0-0-240.as43234.net.targus-getdata1: Flags [.], cksum 0xc904 (correct), seq 41190502:41191950, ack 1, win 229, options [nop,nop,TS val 15504851 ecr 15459784], length 1448
14:44:05.781631 IP (tos 0x0, ttl 64, id 29535, offset 0, flags [DF], proto TCP (6), length 40)
host-92-0-0-240.as43234.net.targus-getdata1 > host-92-0-0-241.as43234.net.43976: Flags [R], cksum 0x80af (correct), seq 1314350815, win 0, length 0
14:44:05.781872 IP (tos 0x0, ttl 64, id 28210, offset 0, flags [DF], proto TCP (6), length 2948)
host-92-0-0-241.as43234.net.43976 > host-92-0-0-240.as43234.net.targus-getdata1: Flags [.], cksum 0xc557 (incorrect -> 0x9be3), seq 41191950:41194846, ack 1, win 229, options [nop,nop,TS val 15504851 ecr 15459784], length 2896
14:44:05.781876 IP (tos 0x0, ttl 64, id 29536, offset 0, flags [DF], proto TCP (6), length 40)
host-92-0-0-240.as43234.net.targus-getdata1 > host-92-0-0-241.as43234.net.43976: Flags [R], cksum 0x80af (correct), seq 1314350815, win 0, length 0
### 可以看出接收端和发送端的length都超过了mtu 1500,说明GSO和GRO都生效了
启用GSO/GIO
网卡配置
Host A
选项 | 状态 |
---|---|
tcp-segmentation-offload | off |
generic-segmentation-offload | on |
generic-receive-offload | on |
udp-fragmentation-offload | off |
Host B
选项 | 状态 |
---|---|
tcp-segmentation-offload | on |
generic-segmentation-offload | on |
generic-receive-offload | on |
udp-fragmentation-offload | off |
测试步骤
### Host B
# tcpdump -i em1 tcp
# iperf3 -s
### Host A
# tcpdump -i eno1 tcp
# iperf3 -c 92.0.0.240 -l 5000
### 测试部分结果如下
15:32:41.857417 IP host-92-0-0-240.as43234.net.51572 > host-92-0-0-241.as43234.net.targus-getdata1: Flags [.], seq 59386070:59387518, ack 1, win 229, options [nop,nop,TS val 16691752 ecr 16736846], length 1448
15:32:41.857540 IP host-92-0-0-240.as43234.net.51572 > host-92-0-0-241.as43234.net.targus-getdata1: Flags [.], seq 59387518:59388966, ack 1, win 229, options [nop,nop,TS val 16691752 ecr 16736846], length 1448
15:32:41.857542 IP host-92-0-0-241.as43234.net.targus-getdata1 > host-92-0-0-240.as43234.net.51572: Flags [.], ack 59388966, win 1786, options [nop,nop,TS val 16736849 ecr 16691752], length 0
### 但是iperf显示的cwnd(拥塞窗口)比全部关闭是要大,但是小于全部开启
### Host B
# tcpdump -i em1 udp
# iperf3 -s
### Host A
# tcpdump -i eno1 udp
# iperf3 -c 92.0.0.240 -u -l 5000
网络性能优化GSO/GIO研究的更多相关文章
- Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...
- Linux网络性能优化方法简析
Linux网络性能优化方法简析 2010-12-20 10:56 赵军 IBMDW 字号:T | T 性能问题永远是永恒的主题之一,而Linux在网络性能方面的优势则显而易见,这篇文章是对于Linux ...
- 携程App的网络性能优化实践
首先介绍一下携程App的网络服务架构.由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现.网络通讯属于基础&业务框架层中基础设施的一 ...
- 转:携程App的网络性能优化实践
http://kb.cnblogs.com/page/519824/ 携程App的网络性能优化实践 受益匪浅的一篇文章,让我知道网络交互并不是简单的传输和接受数据.真正的难点在于后面的性能优化 下面对 ...
- AIX网络性能优化简介
在AIX 中,网络性能的优化可从以下几方面进行: 网络内存(network memory)的调整 socket 缓冲区 (socket buffer) 的调整 网络接口(network interfa ...
- KVM总结-KVM性能优化之网络性能优化
前面已经介绍了KVM CPU优化(http://blog.csdn.net/dylloveyou/article/details/71169463).内存优化(http://blog.csdn.net ...
- linux 网络性能优化
最近在对程序进行调优,涉及到了网络通信,学习了一下对网络调优的方法,网上的资料很多,针对软件优化方面,大体上主要有两种方式:一是网卡参数,另一个是内核参数. 一. 网卡参数优化 针对网卡参数优化,需要 ...
- FreeBsd网络性能优化方案sysctl
以下是阿盛的配置 sysctl net.inet.tcp.msl= sysctl net.inet.tcp.mssdflt= sysctl net.inet.tcp.minmss= sysctl ne ...
- 常用CSS优化总结——网络性能与语法性能建议
在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知道的都说出来.页面优化明显不是一两句能够说完的,这两天总结了一下 ...
随机推荐
- Java for LeetCode 102 Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- DataGridView自定义RichTextBox列
https://www.codeproject.com/Articles/31823/RichTextBox-Cell-in-a-DataGridView-2 RichText是用图片显示的,当Sel ...
- [2018-10-10]记录一下Vue的一个问题
最近用vue typescript SPA 做管理后台(ABP官网导出的vue项目模板),遇到一个错误,找了好久,虽然有相关资料,但发现都没解决,这里自己记录一下. Failed to mount c ...
- 《高性能Javascript》 Summary(二)
第四章.算法和流程控制 Algorithms And Flow Control 原因:代码整体结构是执行速度的决定因素之一.代码量少不一定运行速度快,代码量多不一定运行速度慢.性能损失与组织代码和具体 ...
- Google IO 2019 Android 太长不看版
Google I/O 2019, 这里有个playlist是所有Android开发相关的session视频合集: Android & Play at Google I/O 2019 当然啦每个 ...
- matlab字符串链接的三种方式
1.fprintf()函数: a='I love you,'; b='China'; c=123; fprintf('%s%s\n',a,b); fprintf('%s%s*****%d\n',a,b ...
- php设计模式课程---9、桥接模式是什么
php设计模式课程---9.桥接模式是什么 一.总结 一句话总结: 一个类没干完,另外一个类接着给它干完 实质是类的拼接,也就是用类的组合代替了类的继承,因为类的组合可以有很多种方式,所以桥接就是类的 ...
- JQuery UI - resizable调整区域大小
JQuery UI - resizable ·概述 resizable插件可以让选中的元素具有改变尺寸的功能. 官方示例地址:http://jqueryui.com/demos/resizable ...
- AOP和IOC的作用(转)
AOP和IOC的作用 转载▼ IOC:控制反转,是一种设计模式.一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制:第二层是依赖注入:将相互依赖的对象分离,在spring配置文 ...
- storm相关技术
There are two kinds of nodes on a Storm cluster: the master node and the worker nodes. 有两种节点,主节点和wor ...