目录
1 概述
浪潮信息KOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服务器操作系统,支持x86、ARM等主流架构处理器,性能和稳定性居于行业领先地位,具备成熟的 CentOS 迁移和替换能力,可满足云计算、大数据、分布式存储、人工智能、边缘计算等应用场景需求。详细介绍见官网链接https://www.ieisystem.com/kos/product-kos-xq.thtml?id=12126
Hackbench 是内核调度程序的基准测试和压力测试,也是 rt-tests 套件的一部分,通过线程的重复设置和拆卸来强调内存子系统的某些部分,它在一定程度上强调进程间通信(例如本地套接字、管道),可用于生成系统负载,同时测量延迟。
2 安装准备
2.1 操作系统环境
操作系统版本:KOS 5.8 sp2u1(5.10.134-17.2.2.kos5.x86_64)
测试架构:x86_64,8核4G虚拟机
2.2 工具版本
Hackbench 2.3
3 编译安装
首先,确保你的系统是基于Linux的系统,比如Ubuntu、CentOS等。
打开终端,首先创建一个hackbench的文件夹用来存放源码文件:
cd /home
mkdir Hackbench
cd /home/Hackbench
接下来,拉取Hackbench的源码文件。使用以下命令将源码文件拉取到本地:
git clone https://github.com/Ansen88/hackbenchv2.3.git
编译:
cd /home/hackbench/hackbenchv2.3
gcc -g -Wall -O2 -o hackbench hackbench.c -lpthread
验证安装:
./hackbench -pTl 4000
出现以下结果即为安装完成,可以使用了:
将hackbench复制到/usr/bin:
cp ./hackbench /usr/bin/
接下来就可以直接在终端使用hackbench了。
4 执行测试
参数说明:
“-f --fds=NUM number of fds” —— 定义每个子进程应该使用多少文件描述符,实际是该值的2倍(发送和接收各用 NUM 个数量的描述符)
“-F --fifo use SCHED_FIFO for main thread” ——主线程使用 SCHED_FIFO 调度策略
“-g --groups=NUM number of groups to be used” —— 定义启动多少组发送者和接受者
“-l --loops=LOOPS how many message should be send” —— 每个发送者/接收者对 应该发送多少条信息
“-p --pipe send data via a pipe” —— 使用管道而不是套接字发送数据
“-s --datasize=SIZE message size” —— 设置每条信息中发送的数据量
“-T --threads use POSIX threads” —— 发送/接收者都是线程进行操作
“-P --process use fork (default)” —— 发送/接收者都是进程
生成负载:
hackbench <num_groups> <num_processes>
<num_groups> 是要创建的进程组数量, <num_processes> 是每个进程组中的进程数量。也可以在命令的末尾添加&,可以使Hackbench在后台运行。
使用hackbench测试网络性能:
首先我们打开终端,来使用hackbench运行5个进程组,每个进程组都包含一个管道,每个进程组中运行500个线程:
./hackbench --pipe 5 --thread 500
其中--pipe 5表示运行5个进程组,每个进程组包含一个管道用于模拟进程间的通信,这个参数控制了并发运行的进程组数量;--thread 500表示每个进程组中运行500个线程,每个线程在进程组的管道中发送和接收数据,模拟并发的读写操作。
我们来测试该负载下系统的性能:
也可以将thread换成process,表示每个进程组中运行500个进程:
./hackbench --pipe 5 --process 500
或者以套接字形式,去掉参数--pipe:
./hackbench 5 --process 500
通过不同的参数我们得到的结果也不一样,我们可以在相同配置环境下的不同系统中执行,来对比系统间的性能情况
5 结果分析以及参数建议
Hackbench参数调优:
-f参数:定义每个子进程应该使用多少文件描述符,实际是该值的2倍(发送和接收各用 NUM 个数量的描述符)。给的数值越大结果时间越长,不定义的话默认为40,根据测试指标给定对应值即可
-F参数:主线程使用 SCHED_FIFO 调度策略,对结果影响不大,测试时需要使用该策略的话加上即可。
-g参数:定义启动多少组发送者和接受者。给的数值越大结果时间越长,不定义的话默认为10,根据测试指标给定对应值即可。
-l参数:每个发送者/接收者对 应该发送多少条信息。给的数值越大结果时间越长,根据测试指标来定义即可。
-p参数:使用管道而不是套接字发送数据。该参数在使用时需要加上,可以缩短一半时间。
-s参数:设置每条信息中发送的数据量,给的数值越大结果时间越长,根据测试指标来定义即可。
-T参数:发送/接收者都是线程进行操作。该参数对结果影响不大,只是以线程方式,根据测试指标决定是否要加。
-P参数:发送/接收者都是进程。该参数对结果影响不大,只是以进程方式,根据测试指标决定是否要加。