iperf极致调优

1、环境搭建

被测机与压力机直连,网卡安装好驱动,配置相同网段IP,被测机与压力机OS内安装好相同版本iperf/iperf3软件。

关闭防火墙:systemctl stop firewalld

禁用防火墙:systemctl disable firewalld

服务端:iperf3 -s -B 10.10.10.1

客户端:iperf3 -c 10.10.10.1 -i 2 -t 60 -P n

说明:UDP测试需要加 -u 选项,UDP默认带宽1 Mbit/sec,加-b 0参数将不会限制带宽

2 调优思路

一般服务器网卡调优可以从几个方面优化,硬件PCIEX16或者X8,BIOS设置,具体应用,OS层面,内核层面

2.1、BIOS设置调优

2.1.1 服务器开启高性能模式

 Performance

2.1.2 PCIE Max Payload Size大小配置(鲲鹏)

128B修改为256B/512B

说明:网卡自带的内存和CPU使用的内存进行数据传递时,是通过PCIE总线进行数据搬运的。Max Payload Size为每次传输数据的最大单位(以字节为单位),它的大小与PCIE链路的传送效率成正比,该参数越大,PCIE链路带宽的利用率越高。

2.2、NIC硬件缓冲区或循环缓冲区调优

2.2.1开启网卡巨帧,减少数据分片数量

ip link set dev eth0 mtu 9000

ifconfig eth0 txqueuelen 2000 //在高速网络中可以调大

2.2.2 server端和client端同时打开TCP数据段卸载功能

ethtool -K eth0 tso on

ethtool -K eth0 gro on  //gro克服了lro的缺点,后续驱动都是用gro

说明:开启之后将由网卡进行TCP数据分片,TSO是作用在发送端网卡对TCP数据包进行分片,GRO是作用在接收端网卡对接收到的TCP数据包进行聚合动作。

2.2.3 调整rx和tx的ring buffer大小

ethtool -C eth0 adaptive-rx off adaptive-tx off //关闭自适应调节

ethtool -G eth0 rx 8192 tx 8192 //数值依照实际修改

说明:对于大吞吐量场景可以适当调大

2.2.4 调整中断聚合参数

ethtool -C eth0 rx-usecs N rx-frames N tx-usecs N tx-frames N

说明:建议对吞吐量要求高的场景,可以将rx-usecs和rx-frames的值设置较大;对延时要求高的场景,rx-usecs和rx-frames的值设置较小

2.3、硬中断和软中断队列调优

2.3.1进程绑核

systemctl stop irqbanlance

cat /sys/class/net/eth0/device/numa_node

taskset -c cpu iperf3 xxx

numactl --cpunodebind=netdev:eth0 --membind=netdev:eth0 iperf3 xxx

说明:taskset绑核只能绑定CPU[1] ,numactl绑核,这种方法可以将iperf进程同时绑定在网卡所在的node和最近的内存中。

2.3.2 中断绑核

设置网卡多队列

ethtool -L eth0 combined n

查看网卡所在的numa节点

cat /sys/class/net/eth0/device/numa_node

查看网卡中断号

一般网卡:cat /proc/interrupts |grep eth0 |awk -F: '{print $1}'

mlx: cat /proc/interrupts| grep -E ${bus} | awk -F ':' '{print $1}' //bus为网卡的bus-info

将中断号绑定到网卡所在CPU上

echo cpu-num > /proc/irq/中断号/smp_affinity_list

2.4、应用程序和socket以及内核参数调优

2.4.1 Linux系统性能修改为低延迟网络策略

tuned-adm profile network-latency

2.4.2 cpu频率策略改为性能模式

cpupower frequency-set -g performance

2.4.3 调整跑的iperf线程数,不断调整达到最优 (-P 选项)

iperf3 xxx -P n

2.4.4 内核参数调优

net.core.rmem_default = 212992: 每一个TCP socket默认的用于TCP接收的数据缓存大小

net.core.rmem_max = 212992:每一个TCP socket最大的接收数据缓的最大缓存

net.core.wmem_default = 212992:每一个TCP socket默认的用于TCP发送数据的缓存大小

net.core.wmem_max = 212992:每一个TCP socket最大的用于数据发送的缓存

以上值都偏小,可以适当按倍数调整(x10),UDP则修改UDP对应的缓冲参数

sysctl -w net.core.netdev_budget=600 增加软中断处理时间

net.ipv4.tcp_rmem TCP连接的读缓存

net.ipv4.tcp_wmem TCP连接的写缓存

内核参数还有很多,不同情况下效果不同,还需要读者自己摸索


查看绑定的CPU是否成功

 ps axo pid,cmd,psr |grep iperf3 //查看iperf进程使用的是哪个CPU,核数不跳动说明绑核成功。

以上参数对于单口单向跑网卡iperf测试可以很轻松达标,对于双口双向同时跑的情况,还需要看具体软硬件情况

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值