目录
1 概述
浪潮信息KOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服务器操作系统,支持x86、ARM等主流架构处理器,性能和稳定性居于行业领先地位,具备成熟的 CentOS 迁移和替换能力,可满足云计算、大数据、分布式存储、人工智能、边缘计算等应用场景需求。详细介绍见官网链接https://www.ieisystem.com/kos/product-kos-xq.thtml?id=12126
netperf是一种网络性能测量工具,主要针对基于TCP或UDP的传输,netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(Bulk Data Transfer)模式和请求/应答(Request/Reponse)模式。
netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果:在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能。
2 安装准备
2.1 操作环境
操作系统版本:KOS 5.8 sp2u1(5.10.134-17.2.2.kos5.x86_64)
测试架构:x86_64,8核4G虚拟机
2.2 软件版本
Netperf 2.5.0
3 编译安装
将netperf-netperf-2.5.0.tar.gz压缩包拷贝至需要测试的服务器中
解压安装包
tar -xvf netperf-2.5.0.tar.gz
切换至解压后目录
cd netperf-netperf-2.5.0
编译、安装
./configure && make && make install
备注:编译、安装时需要系统默认安装GCC环境,建议在安装操作系统时,选择开发者工具方式安装。
验证安装
客户端:netperf -h
服务端:netserver -h
netperf常用测试参数解释如表1所示。
表1 netperf参数
netperf参数 | |
---|---|
-a send,recv | 设置本地发送,recv缓冲区对齐方式 |
-A send,recv | 设置远程发送,recv缓冲区对齐方式 |
-B brandstr | 指定要发出简短输出的字符串 |
-c [cpu_rate] | 报告本地CPU占用率 |
-C [cpu_rate] | 报告远程CPU使用率 |
-d | 增加调试输出 |
-D time,[units] | 至少间隔显示中间结果,默认单位为每秒 |
-f | 设置输出单元 |
-F | 用指定文件中的数据预填充缓冲区 |
-H | 指定目标机器和/或本地ip |
-j | 保留额外的定时统计信息 |
-l testlen | 指定测试时长 |
-L name | 指定本地ip|名称和地址族 |
-o send,recv | 设置本地发送,recv缓冲区偏移量 |
-O send,recv | 设置远程发送,recv缓冲区偏移量 |
-n numcpu | 设置CPU util的处理器数量 |
-N | 不建立控制连接,只做发送端 |
-p port | 指定netserver端口号和/或本地端口 |
-s seconds | 测试设置和测试启动之间的等待时间 |
-S | 在数据连接上设置SO_KEEPALIVE |
-t testname | 指定要执行的测试 |
-T lcpu,rcpu | 请求netperf/netserver绑定到本地/远端cpu |
-W send,recv | 设置发送缓冲区、recv缓冲区的个数 |
-y local,remote | 设置socket优先级 |
-Y local,remote | 设置IP_TOS。使用十六进制。 |
-Z passphrase | 设置并传递给netserver一个密码短语 |
netserver参数 | |
-L | 指定netserver监听地址 |
-p | 指定netserver监听端口(缺省时,12865端口) |
-4 | 指定IPv4协议 |
-6 | 指定IPv6协议(缺省时,IPv6协议) |
-d | 增加调试输出 |
-f | 不要为每个测试生成子进程,要连续运行 |
-L name,family | 使用name来选择监听地址和family |
4 执行测试
在进行网络性能相关测试时可以使用netperf进行相关测试。
4.1 测试TCP_STREAM
将一端作为服务端,执行以下命令
netserver
图1 服务端效果
将另一端作为客户端,执行以下命令
netperf -H $serverip -l 60 -t TCP_STREAM //100.2.252.178为运行netserver主机IP地址
图2 测试TCP_STREAM
4.2 测试UDP_STREAM
在服务端执行以下命令
netserver 效果见图4
在客户1端执行以下命令
netperf -H $serverip -l 60 -t UDP_STREAM //100.2.252.178为运行netserver主机IP地址
图3 测试UDP_STREAM
4.3 测试TCP_CRR
在服务端执行以下命令
netserver 效果见图4
在客户端执行以下命令
netperf -H $serverip -l 60 -t TCP_RR //100.2.252.178为运行netserver主机IP地址
图4 测试TCP_RR
在服务端执行以下命令
netserver 效果见图4
在客户端执行以下命令
netperf -H $serverip -l 60 -t TCP_CRR //100.2.252.178为运行netserver主机IP地址
图5 测试TCP_CRR
4.4 测试网络响应时间
在服务端执行以下命令
netserver 效果见图4
在客户端执行以下命令
netperf -H 100.2.252.178 -t omni -- -d rr -l 60 -O "throughput, throughput_units, min_latency, max_latency,mean_latency"
图7 测试网络响应时间
5 数据分析
5.1 数据指标
netperf测试,常用数据指标如表2所示
表2 数据指标
指标 | 说明 | 模式 |
---|---|---|
TCP_STREAM(Mb/秒) | 发送批量的TCP数据分组,以确定数据传输过程中的吞吐量。 | 批量输出传输模式 |
UDP_STREAM(Mb/秒) | 发送批量的UDP数据分组,以确定数据传输过程中的吞吐量。 | 批量输出传输模式 |
TCP_RR(次/秒) | TCP_RR方式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。 | 请求/应答模式 |
TCP_CRR(次/秒) | 与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。 | 请求/应答模式 |
UDP_RR(次/秒) | UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以交易率一定会有相应的提升。 | 请求/应答模式 |
5.2 数据整理
测试TCP_STREAM
记录Throughput 10^6bits/sec的值
测试UDP_STREAM
记录Throughput 10^6bits/sec的值
测试TCP_RR
记录Trans. Rate per sec的值;
测试TCP_CRR
记录Trans. Rate per sec的值;
测试UDP_RR
记录Trans. Rate per sec的值;
测试网络响应时间
记录mean_latency值
5.3 数据分析
网络响应时间越低越好,TCP_STREAM、UDP_STREAM、TCP_CRR、TCP_RR、UDP_RR值越高越好。
6 最佳实践
TCP_STREAM最佳实践
服务端:numactl -C 5 -m 0 netserver
绑定网卡硬中断至某个core,具体流程如下:
cat /proc/interrupts查看当前网卡中断分布位置:
图 8 查看中断分布情况
systemctl stop irqblance.service 中止中断均衡服务
echo X > /proc/irq/Y/smp_affinity_list X代表需要指定的core,Y代表需要绑定的中断号--将硬中断绑定在指定core上
图 9 客户端效果
注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响TCP_STREAM。
调整ring buffer缓冲区:sysctl -w net.core.wmem_max=4096
启用接收端缩放窗口(Receive Window Scaling):sysctl -w net.ipv4.tcp_window_scaling=1
调整TCP拥塞算法:sysctl -w net.ipv4.tcp_congestion_control=cubic
禁用TCP长时间干扰:sysctl -w net.ipv4.tcp_low_latency=1
UDP_STREAM最佳实践
服务端命令:同上
绑核绑中断:同上
客户端命令:numactl -C 4 -m 0 netperf -t UDP_STREAM -H 100.2.252.178 -l 60
图 10 客户端效果
注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响TCP_STREAM。
使用-b参数指定带宽,万兆网卡一般指定10G.
使用-m参数指定字节长度,mtu值为1500时一般指定-m为1427
使用-C参数增加并发数
上述三个参数使用方式为netperf -t UDP_STREAM -H 100.2.252.178 -b 10G -- -m 1427 -C 8 -l 60
TCP_RR最佳实践
服务端命令:同上
绑核绑中断:同上
客户端命令:numactl -C 4 -m 0 netperf -t TCP_RR -H 100.2.252.178 -l 60
图 11 客户端效果
注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响TCP_RR。
使用-r参数指定消息大小
使用-C参数增加并发数
上述参数使用方式为netperf -t TCP_RR -H 100.2.252.178 -r 1024 -C 8 -l 60
UDP_RR最佳实践
服务端命令:同上
绑核绑中断:同上
客户端命令:numactl -C 4 -m 0 netperf -t UDP_RR -H 100.2.252.178 -l 60
图 12 客户端效果
注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响UDP_RR。
使用-r参数指定消息大小
使用-C参数增加并发数
上述参数使用方式为netperf -t UDP_RR -H 100.2.252.178 -r 1024 -C 8 -l 60
TCP_CRR最佳实践
服务端命令:同上
绑核绑中断:同上
客户端命令:numactl -C 4 -m 0 netperf -t TCP_CRR -H 100.2.252.178 -l 60
图 13 客户端效果
注:因本次实验是在虚拟机上进行,若后续使用直连的方式进行测试可考虑以下几种方式是否影响UDP_RR。
使用-r参数指定消息大小
使用-C参数增加并发数
上述参数使用方式为netperf -t TCP_CRR -H 100.2.252.178 -r 1024 -C 8 -l 60
时延最佳实践
服务端命令:同上
绑核绑中断:同上
客户端命令:numactl -C 4 -m 0 netperf -H 100.2.252.178 -t omni -- -d rr -l 60 -O "throughput, throughput_units, min_latency, max_latency,mean_latency"
图 14 客户端效果
7 常见问题及解决方法
如果netserver启动时端口被占用,则会报以下错误:
解决方法:
指定一个未使用的端口给netserver,如:netserver -p 49999
由于操作系统防火墙默认情况下,未将netperf测试所需端口打开,因此无法进行测试。
解决方法:
执行测试前,将服务器的防火墙关闭