【浪潮信息KeyarchOS (KOS)】手把手带你玩转netperf:从配置到多场景性能优化

目录

1 概述

2 安装准备

2.1 操作环境

2.2 软件版本

3 编译安装

4 执行测试

4.1 测试TCP_STREAM

4.2 测试UDP_STREAM

4.3 测试TCP_CRR

4.4 测试网络响应时间

5 数据分析

5.1 数据指标

5.2 数据整理

5.3 数据分析

6 最佳实践

7 常见问题及解决方法


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测试所需端口打开,因此无法进行测试。

解决方法:

执行测试前,将服务器的防火墙关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值