服务器网卡,10GE设备相关笔记
连接线
铜线
六类线基本可以满足万兆, 万兆网络一般只在短程使用铜线, 或者完全不用铜线
光纤
根据带宽和距离, 分为OM2, OM3, OM4等, OM2一般用于千兆或者短距离万兆, 长距离万兆使用OM3, OM4.
根据波长类型
常见的光纤有850nm, 1310nm, 1550nm, 其中850nm为多模光纤一般为水蓝色, 1310nm和1550nm为单模, 黄色居多.
根据接头类型
- FC, Ferrule Connector, 其外部加强件是采用金属套,紧固方式为螺丝扣。圆形带螺纹接头,是金属接头, 电信运营商用的比较多.
- ST, Stab & Twist, 多模网络中最常见的连接设备。它具有一个卡口固定架,和一个2.5毫米长圆柱体的陶瓷(常见)或者聚合物卡套以容载整条光纤。插入,然后拧紧. 外壳为圆形,固定方式为螺丝扣.
- SC, Square Connector, 标准方形接头,直接插拔,使用方便。采用工程塑料, 早先年的交换机上的GBIC模块都是用这个接口.
- LC, 与SC接头形状相似, 较SC接头小一些. 路由器常用的SFP, mini GBIC所插的线头都是LC
- DSC, 是SC的一种,不过是把两个SC头连到一起,好处是防误插,不会把收光的口插上收光的线。SC接口可以插到接DSC的插座上,但DSC的接口不能插到SC的插座上
- DLC, 和DSC的原理一样,就是把两个LC连在一起,好处是防误插, SFP模块可以插DLC,也能插LC
- MTRJ, 和LC一样也是小型化的接口,不过用于光纤到桌面的更多。把一收一发两个口做到一起。
目前常用于机房中万兆设备的是DLC-DLC接口,
模块
光纤模块
根据波长类型以及传输距离, 可以分为850nm, 1310nm, 1550nm等, 距离为300m, 1.4km, 10km等. 在网卡和交换机上常用的是LC接头.
1310nm和1550nm常用于远距离传输, 也意味着更大的功率和更大的发热量.
注意 新手使用光模块经常犯的错误是在同一条光纤的两端使用不同参数的模块, 导致连接失败. 在一根光纤上尽量使用同厂家同型号的模块, 以避免出现连接问题.
网卡
常见的千兆网卡
- Realtek 8139: 经典的百兆网卡, 是KVM里虚机的默认网卡
- Realtek 8111系列, 8168, 8169, 这些在普通PC上使用广泛, 在ESXi上需要自己集成社区开发的驱动, ESXi7.0以后不再支持
- Intel E1000: 经典的千兆网卡, KVM的千兆模拟网卡
- Intel EXPI9402PT, 82576芯片, ESXi7.0以后不兼容
- Intel i350 T2/T4, 兼容ESXi7.0
常见的万兆网卡
- Mellanox ConnectX-3
341是单口,342是双口. 价格上单口100, 双口150, 是市面上最便宜的卡. 需要使用转接卡才能接入常见的PCIe插槽, 不支持SR-IOV - Intel X520 SR1/SR2, DA1/DA2
SR和DA的区别仅在于购买时带不带光模块(SR带, DA不带). 82599EN是单口, 82599ES是双口, ESXi和Centos上无需另外安装驱动, 支持SR-IOV. 功率在5 - 10W, 价格上单口180双口320. 性价比最高的卡 - 优肯 UK-A2XGS
82599芯片, 在系统中会被识别为X520, 使用上与Intel X520无异 - Intel X710 DA2 双口 & DA4 四口
在ESXi早期版本中存在问题, 在6.5U1之后似乎正常
https://forum.vyos.io/t/intel-x520-sr2-x520-da2-or-x710-and-xl710/4682/5
If you are using Intel 700-series NICs, be aware that they are very fragile with regards the combination of (kernel_version,driver_version,firmware_version).
Check what kernel and kernel driver you are running and then make sure you have updated the NVM on the card to run something which is compatible. Otherwise you will find mysterious bugs happen after some time (e.g. card stops forwarding packets, or packet loss which goes away when you start running tcpdump).
万兆双口网卡需要使用PCIEx8或PCIEx16的插槽, 如果使用PCIEx4, 需要ver3.0, 否则无法达到线速.
- X1 pcie2.0理论带宽4G,3.0理论带宽8G
- X4 pcie2.0理论带宽16G,3.0理论带宽32G
- X8 pcie2.0理论带宽32G,3.0理论带宽64G
https://community.spiceworks.com/topic/286749-10gb-network-cards-and-pcie-2-0
Will the X540 function if only 4x PCIe lanes are routed to it?
A: Yes, the X540 complies with the PCIe specification so it runs on less than x8 lanes; however with significant throughput performance (about 70%) limitations when both ports are enabled. Intel recommends using x8 lanes of PCIe for optimal X540 performance.
常用检测方法
查看设备信息
通过dmesg查看PCIE设备的速度, 在PCIEx4插槽上的82599, 实际带宽只能到16Gbps
dmesg |grep -i pcie
# 这个是在PCIEx16上的82576
[ 0.285125] pci 0000:01:00.0: 8.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s x4 link at 0000:00:01.0 (capable of 31.504 Gb/s with 8 GT/s x4 link)
# 这个是主板自带的RTL8111
[ 0.287710] pci 0000:04:00.0: 2.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s x1 link at 0000:00:1c.2 (capable of 7.876 Gb/s with 8 GT/s x1 link)
# 这个是PCIEx4上的82599
[ 0.289837] pci 0000:05:00.0: 16.000 Gb/s available PCIe bandwidth, limited by 5 GT/s x4 link at 0000:00:1c.4 (capable of 63.008 Gb/s with 8 GT/s x8 link)
通过netstat -i查看网卡信息
netstat -i
通过lspci
lspci |grep -i ether
ping 检测 MTU
ping 192.168.111.202 -M do -s 8192
# -M do:禁止分片, want:当包过大时分片, dont:不设置分片标志DF flag
# -s 每次ping发送的数据字节数, 默认56+28(ICMP)=84字节. 头+内容不能大于65535, 所以最大值为linux:65507,windows:65500
- 当数据包大于本机网卡MTU时, 会报
ping: local error: Message too long, mtu=xxx
- 当数据包大于外部网络以及对方网卡MTU时, 数据包被丢弃, ping无返回.
MTU说明
在以太网交互设备中, MTU指的是Ethernet maximum frame size, 一个IPv4报头包含
- 设备vlan tag部分: 4 byte - 这个对于设备外部不可见, 可以忽略
- 固定的部分: 20 byte
- 可变长度的部分: 最大40 byte
- 对于UDP, 包头是固定的8 byte
- 对于TCP, 包头由两部分组成, 基本TCP头部为20 byte, 可变长部分为最大40 byte, 所以TCP包头总长度在20 - 60 byte
如果定义的MTU是1500 byte, 那么在硬件设备中传输的最大包要扣除IP包头长度, 包长度为1480 byte, 对于UDP packet, 要去掉8个byte的包头, 最大的数据长度为1472.
iperf3 带宽测试
启动服务端, 如果要指定网口, 需要加--bind或-B参数
iperf3 --server --bind 192.168.111.212
客户端测试命令
# TCP
iperf3 --interval 1 --time 8 --omit 1 --client 192.168.111.211 --verbose --parallel 4 --len 256
# 等效于
iperf3 -i1 -t8 -O1 -c192.168.111.211 -V -P4 -l256
# UDP
iperf3 --interval 1 --time 8 --omit 1 --client 192.168.111.211 --udp --bandwidth 10G --verbose --parallel 4 --len 256
# interval 间隔时间
# time 次数
# omit 忽略开头的N个结果
# verbose 输出更多信息, 建议加上
# parallel 并发连接数
# len 发出的每个数据包的长度, 当长度超出本机MTU时会提示, 因为实际传输时会被网口分段传输
查看RSS通道
查看网卡使用了的RSS通道以及所处的中断
cat /proc/interrupts |grep [网卡名]
性能测试
为测试方便, 将服务端MTU修改为9000
ip link set enp1s0f0 mtu 9000
Windows 10
默认配置测试结果
TCP MTU-64 MTU-84 MTU-600 MTU-1K5 MTU-3K MTU-5K MTU-8K
Parallel-1 444M 863M 8.32G 8.38G 8.18G 7.09G 8.01G
Parallel-2 475M 842M 8.53G 9.46G 9.59G 9.77G 9.81G
Parallel-4 696M 780M 6.97G 9.14G 9.59G 9.79G 9.81G
UDP MTU-64 MTU-84 MTU-600 MTU-1K5 MTU-3K MTU-5K MTU-8K
Parallel-1 407M 634M 2.25G 3.09G 3.41G 3.56G 3.58G
Parallel-2 355M 638M 2.85G 3.92G 4.24G 4.65G 4.67G
Parallel-4 347M 548M 3.34G 4.62G 5.37G 5.28G 5.35G
Centos7.9
测试命令
# TCP
iperf3 --interval 1 --time 8 --omit 1 --client 192.168.111.211 --verbose --parallel 4 --len 256
# UDP
iperf3 --interval 1 --time 8 --omit 1 --client 192.168.111.211 --udp --bandwidth 10G --verbose --parallel 4 --len 256
测试结果
TCP len-128 len-256 len-512 len-1K len-1K5 len-3K len-5K len-8K
Parallel-1 578M 1.14G 2.12G 3.49G 5.58G 9.33G 8.89G 9.41G
Parallel-2 694M 1.24G 2.38G 4.19G 6.88G 9.41G 9.41G 9.41G
Parallel-4 924M 1.63G 3.09G 5.17G 6.12G 9.41G 9.41G 9.41G
UDP len-128 len-256 len-512 len-1K len-1K5 len-3K len-5K len-8K
Parallel-1 324M 635M 1.25G 2.36G 2.78G 3.72G 4.03G 4.46G
Parallel-2 388M 734M 1.50G 2.75G 3.15G 4.77G 6.17G 7.03G
Parallel-4 427M 831M 1.67G 3.08G 3.30G 4.96G 6.38G 7.14G
对Centos7的性能优化
默认系统参数
sysctl -a|grep net.core
...
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
...
增加 net.core.rmem_max, rmem_default, wmem_max, rmem_default
默认为 212992 (208K), 修改为2129920 (2080K), 这个配置在网络MTU为标准的1500时, 能增加长度为3000字节以上的包的吞吐量
[root@202v2 ~]# sysctl -w net.core.rmem_max=2129920
net.core.rmem_max = 2129920
[root@202v2 ~]# sysctl -w net.core.wmem_max=2129920
net.core.wmem_max = 2129920
[root@202v2 ~]# sysctl -w net.core.wmem_default=2129920
net.core.wmem_default = 2129920
[root@202v2 ~]# sysctl -w net.core.rmem_default=2129920
net.core.rmem_default = 2129920
将配置持久化
/etc/sysctl.conf 文件增加配置
net.core.rmem_max=2129920
net.core.rmem_default=2129920
net.core.wmem_max=2129920
net.core.wmem_default=2129920增大网卡txqueuelen
ifconfig enp1s0f0 txqueuelen 10000
启用packet chain
https://www.ibm.com/docs/en/aix/7.2?topic=tuning-udp-packet-chaining
UDP packet chaining causes IP to build the entire chain of fragments and pass that chain down to the Ethernet device driver in one call. This improves performance by reducing the calls down through the ARP and interface layers and to the driver. This also reduces lockand unlock calls in SMP environment. It also helps the cache affinity of the code loops. These changes reduce the CPU utilization of the sender.
通过ifconfig查看是否带CHAIN标识
# 启用
ifconfig en0 pktchain
# 关闭
ifconfig en0 -pktchain
应用中调整UDP包长度
IP数据包长度超过MTU时, 发送方IP层就需要分片(fragmentation), 将数据包分成若干片, 使每一片小于MTU. 在接收方IP层则需要进行数据报的重组. 在IP层分片并重组的效率比在应用层约束数据包长度的效率更高, 在这种情况下
- 对于UDP, 报文长度增大能提高系统的性能, 但是当某一片数据在传输中丢失时,接收方无法重组数据包, 导致整个UDP数据包被丢弃, 所以原则是: 网络质量好丢包率低, 则使用长一点的UDP包; 网络质量差, 则UDP包长度不要超过MTU. 在内网环境, 为了达到10Gbps带宽, 可以将UDP长度提升到3倍以上MTU大小, 对于外网环境, 可以使用2倍MTU.
- 对于TCP, TCP丢包可以自动重传, 所以不存在UDP包的丢弃问题. TCP包长度增大一样能提高系统性能, 但是分包和错误重组可能会耗费时间,使传送时间延长,长度到一定程度后反而影响性能.
参考
- 华为服务器Intel 82599网卡优化说明, 写得很详细
https://support.huawei.com/enterprise/en/doc/EDOC1000117211/63ff002b/network-optimization-suggestions - 计算集群的延迟优化
https://pdfs.semanticscholar.org/457d/b5167aa62b021658bc562f71ab6e31c2ec97.pdf - 网卡降低延迟, 包含82599
https://blog.cloudflare.com/how-to-achieve-low-latency/ - Linux网络性能调优
https://decodezp.github.io/2019/01/22/test5-linux-network-performance-optimization/ - udp压测
https://www.dazhuanlan.com/2019/12/20/5dfc8f1f4cbe2/ - udp压测
https://cloud.tencent.com/developer/article/1758720?from=information.detail.linux udp 优化
服务器网卡,10GE设备相关笔记的更多相关文章
- linux驱动开发之块设备学习笔记
我的博客主要用来存放我的学习笔记,如有侵权,请与我练习,我会立刻删除.学习参考:http://www.cnblogs.com/yuanfang/archive/2010/12/24/1916231.h ...
- 通过Nethogs查看服务器网卡流量情况
在日常运维工作中,会碰到服务器带宽飙升致使网站异常情况.作为运维人员,我们要能非常清楚地了解到服务器网卡的流量情况,观察到网卡的流量是由哪些程序在占用着. 今天介绍一款linux下查看服务器网卡流量占 ...
- Python之路【第二十三篇】:Django 初探--Django的开发服务器及创建数据库(笔记)
Django 初探--Django的开发服务器及创建数据库(笔记) 1.Django的开发服务器 Django框架中包含一些轻量级的web应用服务器,开发web项目时不需再对其配置服务器,Django ...
- HTTPS证书申请相关笔记
申请免费的HTTPS证书相关资料 参考资料: HTTPS 检测 苹果ATS检测 什么是ECC证书? 渠道2: Let's Encrypt 优点 缺点 Let's Encrypt 的是否支持非80,44 ...
- Xamarin设备相关图片尺寸要求
Xamarin设备相关图片尺寸要求 Xamarin跨平台开发,要兼顾iOS.Android.尤其是图片方面,各个平台有对应的不同要求.在iOS中,需要提供没有后缀(设备无关单位尺寸).@2x(双倍 ...
- 监控linux服务器网卡流量
监控linux服务器网卡流量 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 前言:众所周知,我们安装zabbix服务器 ...
- 视频处理控件TVideoGrabber视频捕捉设设备相关问题
选择一个视频捕捉设备 首先设置 VideoSource = vs_VideoCaptureDevice来选择一个视频捕捉设备作为一个视频源. 通过指定VideoDevice属性来选择当前的视频捕捉设备 ...
- Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等. Cordova还提供了一组统一的JavaScript类库,以及为这 ...
- 第三章 CUDA设备相关
这章介绍了与CUDA设备相关的参数,并给出了了若干用于查询参数的函数. 章节代码(已合并): #include <stdio.h> #include "cuda_runtime. ...
- 网络时钟服务器,NTP授时设备,北斗网络校时服务器,GPS时间同步器
网络时钟服务器,NTP授时设备,北斗网络校时服务器,GPS时间同步器 网络时钟服务器,NTP授时设备,北斗网络校时服务器,GPS时间同步器 论述当下网络时间同步的重要性 北京华人开创科技发展有限公 ...
随机推荐
- 【mysql】 解决 auto_increment 字段 Column count doesn't match value count at row 1
1, 表结构 man +-------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PR ...
- JDBC针对SQLServer的sendStringParametersAsUnicode=false的验证
JDBC针对SQLServer的sendStringParametersAsUnicode=false的验证 背景 部分客户的SQLServer数据库出现了大量死锁的情况. 虽然部分客户并没有反馈死锁 ...
- [转帖]jmeter(八)断言
https://www.cnblogs.com/pachongshangdexuebi/p/11582891.html jmeter中有个元件叫做断言(Assertion),它的作用和loadrunn ...
- 批量删除一个月为tag的镜像的办法
第一步获取镜像列表 这是一个最简单的列转行. docker images |grep 20220401 |awk 'BEGIN{ORS=","}{print $1}' 第二步执行双 ...
- TypeScript数组类型定义
第一种方式:可以在元素类型后面接上 [],表示由此类型元素组成的一个数组: var arr: number[] = [1, 2, 3]; //数字类型的数组 var arr2: string[] = ...
- 手写promise实现自定义封装多个回调函数的执行
自定义封装多个回调函数的执行 <script src="./Promise.js"></script> let p = new Promise((resol ...
- elementui更改Slider 滑块颜色样式
<div class="con-slider"> <el-slider :disabled="disabledFlag" @change=&q ...
- Seata分布式事务 (理论与部署相结合)
分布式事务--Seata 分布式事务 1. 本地事务与分布式事务 1.1 本地事务 本地事务,也就是传统的单机事务.在传统数据库事务中,必须要满足四个原则: 1.2 分布式事务问题 分布式事务,就是指 ...
- docker 安装minio
1.拉取镜像 docker pull minio/minio 2.运行容器 docker run -d -p 9000:9000 --name=minio --restart=always -e &q ...
- 5.7 Windows驱动开发:取进程模块函数地址
在笔者上一篇文章<内核取应用层模块基地址>中简单为大家介绍了如何通过遍历PLIST_ENTRY32链表的方式获取到32位应用程序中特定模块的基地址,由于是入门系列所以并没有封装实现太过于通 ...