服务器网卡性能调优及丢包问题处理

性能调优概览 

1、本调优是在“网卡性能调优常用步骤和技巧 v1.0”基础上进行的补充, 对于 v1.0 已经有的调优说明部分,这里就一笔带过,不做过多的说明。需要的时 候直接参考 V1.0 版本即可 

2、总结归纳一下,网卡性能调优主要是增加网卡的带宽性能和避免网络数据传 输的 drop/error。跟网卡性能相关的地方有“(1)网卡 firmware、 (2)网卡 driver、 (3)OS kernel、(4)CPU 处理能力、(5)BIOS 选项的设置、(6)网卡本身功 能参数的设置等”。 

3、目前曙光在用的网卡有 Intel、Mellanox、Broadcom,由于不同的厂商他们的 网卡参数设置不太一样,所以本文档会根据厂商的不同分别调优 

4、由于曙光有 Intel 平台、AMD 平台、Hygon 平台,每个平台的架构也不太一样, 所以本文档也会根据 CPU 平台的不同分别调优。

 

一、基本配置要求

-

1. 服务器:建议选择两台配置完全一样的服务器,方便后面 Debug; 

2. CPU:建议选择型号比较高的 cpu,因为 cpu 的处理能力直接关系到网卡 性能; 

3. 内存:单颗 CPU 最少要搭配 2 根 16G 以上内存,内存双通道,保证内存 不存在瓶颈。 

4. PCIe 插槽:建议将网卡插在 CPU0 的 Slot 上,最好是主板的 Slot 上,尽量 不要插在 Riser 的 slot 上。避免因为 Riser 信号弱影响网卡性能。另外,要保 证主板上 slot 的 Lane 数大于网卡的 Lane 数,例如 PCIe Gen3 X8 的网卡必须要插在大于等于 PCIe Gen3 X8 的 slot 上。 

5. 光纤模块和光纤线:对 光口网卡而言,模块和光纤线要匹配,例如多模光 模块要搭配多模线缆,单模光模块要搭配单模线缆。 

6. Firmware 和 Driver:在进行网卡性能调优前,一定记得将网卡的 firmware 和 Driver 升级到当前最新的版本。 

7. OS 选择:为降低系统对网卡性能的影响,建议使用 Linux 系统进行调优 (这里建议使用 Centos7.4),尽量不要使用 Windows OS 进行性能测试。 

8. 其他:网卡的性能测试中间尽量不要使用交换机,排除交换机参数配置及 交换能力的因素干扰。 

二、主机 BIOS 设置 

1. BIOS 版本:使用最新的 BIOS 版本进行测试 

2. 电源设置:在 BMC 中修改电源选项,将电源模式设置为“performance” 模式;(当然,也可以在 BIOS 中进行设置) 

-

3. CPU 模式:P-State=enable   C-State=disable 

4. 超频模式:Turbo Mode=enable 

-

5. 网络虚拟化:SR-IOV Support=Disable 

6. CPU 虚拟化技术:VT-D=Disable  ----根据需要,视情况而定 

CPU Configuration---IIO Configuration---Intel VT for Directed I/O (VT-D) 

-

7. 超线程模式:Hyper-Threading=Disable 

-

-

三、OS 的配置(以 Centos7 为例) 

1. 关闭防火墙(略) 

2. 关闭 NetworkManager 服务(略)

3. 设置 CPU 模式为 performance 

    cpupower -c all frequency-set -g performance 

4. 闭虚拟内存分区 swapoff –a(重启后失效); 

5. 内核参数设置(注意,一般内核参数不需要设置,且这写参数的数值也不 是固定的) 添加以下参数到/etc/sysctl.conf 文件末尾:  net.core.wmem_max=12582912  

net.core.rmem_max=12582912  

net.ipv4.tcp_rmem= 10240 87380 12582912  

net.ipv4.tcp_wmem= 10240 87380 12582912  

net.ipv4.tcp_window_scaling = 1  

net.ipv4.tcp_timestamps = 1  

net.ipv4.tcp_sack = 1  

net.ipv4.tcp_no_metrics_save = 1 

net.core.netdev_max_backlog = 5000  

net.ipv4.route.flush=1 

添加完成后使用以下命令使其立即生效:sysctl –p。 

6. 设置网卡中断数量

1)查看网卡驱动名称:ethtool –i ethX,如 Intel 万兆网卡,驱动名称为 ixgbe; 

2)查看驱动参数:modinfo ixgbe,查看其中类似 num_queues 或 RSS 这 样关于队列个数的参数; 

3)重新加载驱动: 

rmmod ixgbe 

modprobe ixgbe num_queues=**备注:其中,**是单个 CPU 的物理核数

7. 中断绑定(中断绑定脚本) 

1)停止 irqbalance 服务的:systemctl disable irqbalance,systemctl stop irqbalance。 

2)使用 intel 的驱动中 scripts 目录下的 set_irq_affinity 进行中断配置 (方法三选一): 

  1. 使用所有的核:set_irq_affinity -x all ethX 
  2. 只使用本地 NUMA 绑定的 core:set_irq_affinity -x local ethX 
  3. 选择特定的核: 
>确定网卡所在 CPU NUMA Node 

>cat /sys/class/net/eno2/device/numa_node  

>lscpu 查看对应 numa node 所在 CPU 核,并将中断绑定到这些 CPU 核上 

>set_irq_affinity 0-1,23-25 ethX 

备注:Intel/Mellanox/Broadcom 都有自己的中断绑定脚本,基本思路都是一 样,但是指令参数有稍微的区别,在使用的时候主要查看使用说明即可。 

8. 线程绑定

1)测试网卡的性能或者丢包,通常会用到 iperf 或者 netperf 等工具,例如: 

2)numactl --physcpubind=0-7 --localalloc iperf -s -p 5201 备注:该命令可以绑定 iperf -s 这个进程会运行在 cpu core 的 0-7 上。 

3)numactl --physcpubind=0-7 iperf -c 192.168.95.20 -p 5201 -P 8 -i 5 -t 120s  备注: 该命令可以绑定 iperf -c 这个进程会运行在 cpu core 的 0-7 上。 netperf -H 192.168.1.2 -l 60 -t TCP_STREAM -T 0,0  –p 12800,12800 -P 0 -- -N -n -m 64k 

4)netperf -H 192.168.1.2 -l 60 -t TCP_STREAM -T 0,0  –p 12800,12800 -P 0 -- -N n -m 64k  备注:该命令中的-T 0,1 表示该进程运行在本机服务器 cpu 的 0 core, 对端的服务器运行在 cpu 的 1 core 上。 

5)如果 cpu 单 core 处理能力有限,可以运行多个 iperf 或者 netperf,并分布到不 同的 cpu core 上,从而提升网卡的整体性能。 

9. 网卡参数设置 

ethtool -C ethX adaptive-rx off adaptive-tx off 关闭中断自适应 

ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 84 tx-usecs 84 中断上报时间的调整,建议使用 84us 

ethtool -G ethX rx 4096 tx 4096 设置网卡 rx 和 tx 的缓存大小(不同信号 的网卡的缓存大小也不一样) 

ethtool -A ethX rx off tx off 

Ifconfig ethx mtu 9000 

./mlnx_tune -p HIGH_THROUGHPUT  ---该命令仅用于 Mellanox 的网卡 

tuned-adm profile throughput-performance--该命令仅用于Broadcom网卡 

10. CPU 绑核操作 

注意,对于前面提到的网卡中断绑定以及线程绑定,最好都要绑定在同 一个 CPU 上,因为不同的 cpu 相互之间通信需要通过 UPI 总线,增加延迟和 性能。所以对于 Intel CPU 可以根据网卡差的 PCIe slot 所在的 cpu,决定绑定 的时候也选择对应的 CPU core 上。 

对于 AMD 或者 Hygon 的 CPU,由于每个 CPU 由四个 Die 组成,每个 Die 又对应不同的 PCIe slot,所以,在做绑定时也尽量选择 slot 所对应的 cpu Die 上。 

网卡设置 

  1. 设置 MTU:ifconfig ethX mtu 9000(注意:两端服务器都要设置才有效,且如果通过交换机连接,在交换机上也要设置MTU为9000或大于9000; 重启后失效); 
  2. 设置 LRO:ethtool -K ethX lro on(重启后失效); 

四、Windows 系统配置(略)

请参考 OA 下发的“网卡性能调优常用步骤和技巧 v1.0” 

五、网卡测试常用的工具 

1、Iperf(比较简单,建议使用 iperf 测试网卡的性能)  

iperf 测试必须在 client 端和 server 端同时执行下面命令 

Server:numactl --physcpubind=0-7 --localalloc iperf -s -p 5201

Client:numactl --physcpubind=0-7 --localalloc iperf -c 192.168.95.20 -p 5201 -P 8 -i 5 -t 120s 

2、Netperf 

Netperf 测试必须在 client 端和 server 端同时执行下面命令

 Server:  netserver –p 12800 

Client:netperf -H 192.168.1.2 -l 60 -t TCP_STREAM -T 0,0  –p 12800,12800  -P 0 -- -N -n -m 64k 

注意: -T 后面的 0,0 是指定的 client 端和 server 端运行该进程的 CPU 的 core,为了避免 cpu 性能导致的网卡性能低,所以一般都会在 client 端运行多个 netperf 进程,并且将 -T 后面 设置成不同的 cpu core。至于其他更加详细的参数介绍请自行查找相关的资料。 

六、网卡常用的命令 

1、Ifconfig 

Linux 中用于显示或配置网络设备(网络接口卡)的命令,全称 network interfaces configuring。 Ifconfig ethx (查看某一端口的发包、丢包情况) Rx/Tx packet dropped, overruns 

2、Ethtool 

Linux 下用于查询及设置网卡参数的命令。 Ethtool –S ethx (显示 NIC- and driver-specific 的统计参数,如网卡接收/发 送的字节数、接收/发送的广播包个数等) Rx/tx_dropped, rx/tx_fifo_errors, rx_missed_errors,rx_no_buffer_count…  

3、Netstat  

在内核中访问网络连接状态及其相关信息的程序,它能提供 TCP 连接,TCP 和 UDP 监听,进程内存管理的相关报告。 Netstat –I (查看系统下所有网口的发包、丢包情况) Rx/Tx packet dropped, overruns 

4、Sar 

Linux 上最为全面的系统性能分析工具之一。 sar -n EDEV (输出网络设备状态的统计信息,查看网络设备故障) rxerr/s, txerr/s, rxdrop/s, txdrop/s  

5、watch 

A.watch –d -n 0 ‘ifconfig ethX’ 

实时查看 Rx/Tx packet dropped, overruns 

-

B. watch –d -n 0 ‘ethtool –S ethX | column’ 

实时查看 Rx/tx_dropped, rx/tx_fifo_errors, rx_missed_errors, rx_no_buffer_count…  

-

C. watch -d -n 0 netstat –i 

实时查看 Rx/Tx packet dropped, overruns,与 ifconfig ethx 显示类似 

-

-

D. sar -n EDEV 

实时查看每秒丢包,ctrl+C 会显示平均每秒丢包数 

 

-

Ifconfig |grep drop/err

ethtool –S ethx |grep drop/miss/fail/error

Ethtool –S ethx |grep _err

Sar –n EDEV

Netstat -i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值