Hackbench 是一个内核调度程序的基准测试和压力测试工具,旨在测量进程间通信(IPC)、线程切换、系统调度等相关的时延性能。它通过模拟多进程或多线程环境,执行一系列的数据交换和任务调度操作,从而评估操作系统在处理大量并发任务时的效率。
一、工作原理
hackbench 的工作原理相对简单,通过模拟大量并发的任务交互来制造系统负载。它通过创建多个进程或线程,这些进程或线程之间会不断交换数据,形成一个模拟的并发任务负载。具体来说,hackbench 主要通过以下步骤来执行:
· 数据流模型:创建多个“发送者”(sender)和“接收者”(receiver),通过管道或Socket传递固定大小的消息。
· 压力指标:统计所有任务完成所需的时间——时间越短,表明调度器效率越高。
二、主要特点
1. 轻量级设计:Hackbench 的实现非常简洁,但却能够精准反映出内核在 IPC 和任务调度方面的效率。
2. 多线程支持:支持多线程并发运行,便于模拟复杂场景下的工作负载。
3. 多进程支持:支持多进程并发运行,可以帮助评估进程间通信(IPC)性能。
4. 灵活性高:用户可以通过命令行参数自定义消息大小、运行时间等设置,以适应不同的测试需求。
5. 免费开源:Hackbench 是完全免费且开放源代码,便于修改和扩展以满足特定需求。
三、安装与使用
1.安装步骤
1)解压缩文件
unzip hackbench-main.zip
2)进入解压目录并编译
cd /home/ hackbench-main
gcc -g -Wall -O2 -o hackbench hackbench.c -lpthread
3)使用
./hackbench -pTl 4000
2.参数含义
-g --groups=NUM 定义启动多少组发送者和接受者,默认值10
-f --fds=NUM 定义每个子进程应该使用多少文件描述符,实际是该值的2倍,默认值20
-l --loops=LOOPS 每个发送者/接收者对 应该发送多少条信息,默认值100
-s --datasize=SIZE 设置每条信息中发送的数据量,默认值100
-F --fifo 主线程使用 SCHED_FIFO 调度策略
-p --pipe 使用管道而不是套接字发送数据,默认使用套接字
-T --threads 发送/接收者都是线程进行操作,父线程和子线程共享进程资源
-P --process 发送/接收者都是进程,父进程和子进程各自有独立的空间
-h --help 帮助信息
3.具体示例
./hackbench -p –T
以线程模式运行,使用管道发送数据,使用 10 个组,每个组使用 40 个文件描述符(10*40== 400 tasks)
每个发送者将传递 100 条 100 字节的消息 时间:0.040s
./hackbench -l 200 -s 512 -g 15 -f 25 –P
在进程模式下运行,使用套接字发送数据,使用 15 个组,每个组使用 50 个文件描述符 (15*50== 750 tasks)
每个发送方/接收方执行 200 条消息, datasize 设置为 512 字节
每个发送者将传递 200 条 512 字节的消息 时间: 0.191s