网卡简介
网卡是计算机上安装的一种硬件设备,又称网络适配器,用于计算机与其他计算机或网络设备进行通信。它提供物理连接,将计算机系统中的数字信号转换为可以传输的模拟信号,并在网络中发送和接受数据包。
网卡带宽性能调优
硬件优化手段
内存
网卡调优对内存条数有一定要求。一般来说,100G带宽以下的网卡,内存条需要满插的一半;100G带宽以上的网卡,内存条需要满插。注意各个内存条的频率和容量需要一致。
海光(HYGON)平台:网卡所在node需要有两条内存(numactl -H命令查询网卡对应的node的内存容量,结合单条内存条容量,可以得到内存条数)。内存频率为2400以上。
网卡槽位
两端网卡建议插在相同的Numa node下的槽位,性能相对较好。
BIOS平台优化手段
推荐的BIOS参数如下,实际测试中按需调整。
1. AMD平台
Advance > AMD CBS > CPU Common Options > Local APIC Mode > x2APIC
//x2APIC模式取消了内存映射方式来读取APIC的寄存器,而是采用MSR的方式,不用再担心内存地址的冲突问题。
Advanced > AMD CBS > CPU Common Options > Performance > CCD/CORE/Thread > Accept > SMT Control > SMT > Disabled
//关闭超线程
Advnaced > AMD CBS > DF Commin Options > Memory Addressing > NUMA nodes per socket > NPS2
Advnaced > AMD CBS > DF Commin Options > ACPI > ACPI SRAT L3 Cache as NUMA Domain > Enabled
//开启高级电源管理
Advanced > AMD CBS > NBIO Common Options > IOMMU > Disabled
//对于200G以上大带宽网卡,建议BIOS下关闭IOMMU,能大幅度提升性能。
Advanced > AMD CBS > NBIO Common Options > Preferred IO > Manual
Advanced > AMD CBS > NBIO Common Options > Preferred IO Bus > Bus Num
//该选项在Preferred IO设置为Manual后才会显示,bus num为网卡的bus号。该选项可对所选I/O设备的流量进行优先排序,并促进PCIe数据包的排序,从而减少开销并提高适配器性能。
Advanced > AMD CBS > NBIO Common Options > SMU Common Options > Determinism Control > Manual
Advanced > AMD CBS > NBIO Common Options > SMU Common Options > Derterminism Slider > Performance
Advanced > AMD CBS > NBIO Common Options > SMU Common Options > APBDIS > 1
//开启APBDIS,将结构时钟解锁到提升的速度。
2. Hygon平台
Advanced > Hygon CBS > NBIO Common Options > IOMMU > Disabled
//对于200G以上大带宽网卡,建议BIOS下关闭IOMMU,能大幅度提升性能。
操作系统优化手段
在测试过程中若网卡性能不佳,可参照如下OS配置按需调整
mellanox网卡
调优前执行mst start启动MFT工具,然后执行以下命令:
mlxconfig -d 31:00.0 –yes set ADVANCED_PCI_SETTINGS=1
mlxconfig -d 31:00.0 –yes set PCI_WR_ORDERING=1
mlxconfig -d 31:00.0 –yes set MAX_ACC_OUT_READ=32
调整最大加速器输出读取数量, CX5:32,CX6:44,CX7:128。.
注:31:00.0为网卡的bus号,设置完成后需重启系统或者重启网卡固件( mlxfwreset -d mlx5_0 r)。
所有厂商网卡
(1)参数设置
#setpci –s 31:00.0 68.W=5000:f000 //31:00.0为ens4f0端口的bus号。
//调整网卡的max read request size,这里设置为4K。
#ethtool -K ens4f0 lro on //ens4f0为网卡端口。
//修改网卡的offload参数状态,该参数为on时,CPU使用率较低,有利于调优。
#ethtool -L ens4f0 combined 63
//修改网卡通道数量,这里设置的是63,可执行ethtool -l ens4f0查看当前环境支持的最大通道数。
#ifconfig ens4f0 mtu 9000
//设置巨型帧,可以提高网卡带宽。以太网口最大MTU值为9000,IB网口最大MTU值为4096。
#ethtool -G ens4f0 rx 8192 tx 8192
//修改网卡的缓冲区大小,可执行ethtool -g ens4f0查看网卡支持的最大缓冲区,将缓冲区设置为支持的最大值。
#ethtool -A ens4f0 rx off tx off
//修改网卡的接收模块RX和发送模块TX为off。
ethtool -K ens4f0 hw-tc-offload on
//开启网卡offload特性,将CPU对数据包的一些处理操作转移到网卡硬件上进行,降低系统CPU的消耗,提高处理性能。
ethtool -K ens4f0 tx-nocache-copy on
//开启网卡tx-nocache-copy特性,通过绕过本地缓存并将用户空间数据直接写入内存来减少CPU周期。
ethtool -K ens4f0 ntuple on
//开启网卡ntuple filtering特性,可在硬件上过滤收到的包,然后将其直接放到特定的接收队列中,以增加CPU处理网络数据时的缓存命中率。
sysctl –w net.core.rps_sock_flow_entries=65536
//接收流转向 (RFS) 扩展了 RPS 行为以提高 CPU 缓存命中率,从而减少网络延迟。
#sysctl -w net.ipv4.tcp_timestamps=0
//禁用TCP时间戳选项以提高CPU利用率。
#sysctl –w net.ipv4.tcp_sack=1
//启用TCP选择性确认选项以提高吞吐量。
sysctl -w net.core.netdev_budget=1200
//设置每次软中断处理的网络包个数,该值过小中断变多效率变低,过大sys会上升,功耗变大。
#sysctl -w net.core.netdev_max_backlog=250000
//增加处理器输入队列的最大长度。
#sysctl -w net.core.busy_poll=50
//针对poll和select设置低延迟busy poll超时。
#sysctl -w net.core.busy_read=50
//针对socket读取设置低延迟busy poll超时。
#sysctl -w net.core.optmem_max=4194304
#sysctl -w net.core.rmem_max=268435456
#sysctl -w net.core.wmem_max=268435456
#sysctl -w net.core.rmem_default=87380
#sysctl -w net.core.wmem_default=87380
//使用setsockopt()增加默认缓冲区大小。
#sysctl -w net.ipv4.tcp_rmem=”4096 87380 4194304“
#sysctl -w net.ipv4.tcp_wmem=”4096 87380 4194304“
//增加内存阈值以防止数据包丢失,这里的4096是为socket发送缓冲区分配的最少字节数;87380是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;4194304是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。
#sysctl –w net.ipv4.tcp_low_latency=1#sysctl –w net.ipv4.tcp_adv_win_scale=1
//为TCP启用低延迟模式。
#service irqbalance stop
//关闭中断,提高CPU性能。关闭中断后,可进一步进行中断绑定操作。这里提供一个中断绑定脚本如下。使用方法:./set_irq_affinity_cpulist.sh 0-31 ens4f0 。0-31为指定核,ens4f0为网卡端口。set_irq_affinity_cpulist.sh是mlx网卡自带脚本,一般位于/usr/sbin路径下。
(2)grub文件修改
BIOS参数IOMMU为Enabled时,对grub文件进行如下设置:
vi /etc/default/grub
在GRUB_CMDLINE_LINUX=””里面增加iommu=pt numa_balancing=disable processor.max_cstate=0,保存并关闭该文件。其中,iommu=pt意为开启数据透传模式,不用经过DMA传输,可提升性能;numa_balancing=disable意为禁用numa均衡,防止增加延时降低性能;processor.max_cstate=0意为禁用CPU的省电模式,可提高性能。
grub2-mkconfig
使修改参数生效(仅在部分os如rhel8.2下可直接使用该命令更新grub文件,大部分的os需要添加参数指向对应文件,例如UEFI模式下:grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg; legacy模式下:grub2-mkconfig -o /boot/grub2/grub.cfg)。
reboot
重启生效。
(3)绑核
#cat /sys/class/net/ens4f0/device/numa_node
//绑核进行打流,查看网卡靠近哪个CPU。
#lscpu
//查看CPU的核分布。
#taskset -c 0-31 iperf -s
例如该张网卡靠近CPU0,且靠近CPU0的核为0-31,那么这里就在服务端绑定0-31核进行打流。
#taskset -c 0-31 iperf -c 6.6.6.1 -t 10 -P 12 -l 64K
同样的,在客户端绑定0-31核进行打流,taskset命令可以将iperf进程绑定至CPU0上执行,-c后接服务端IP,-P后接线程数,这里是12线程,-l后接包大小,这里设置的是64K。(注意:线程数不能大于绑的核数不然性能会下降)。
特殊说明:对于海光平台,iperf的server端绑定网卡所在node核心,client端绑定相邻node核心打流的性能数据较好。




















暂无评论内容