hackbench8
Scheduler benchmark/stress test
Usage
hackbench [{-f | --fds
NUM}]
[{-F | --fifo}]
[{-g | --groups
NUM}]
[{-h | --help}]
[{-l | --loops
LOOPS}]
[{-p | --pipe}]
[{-s | --datasize
SIZE}]
[{-T | --threads}]
[{-P | --process}]
# SPDX-License-Identifier: GPL-2.0-or-later
Overview
Hackbench is both a benchmark and a stress test for the Linux kernel scheduler. It's main job is to create a specified number of pairs of schedulable entities (either threads or traditional processes) which communicate via either sockets or pipes and time how long it takes for each pair to send data back and forth.
Options
These programs follow the usual GNU command line syntax, with long options starting with two dashes ("--").
A summary of options is included below.
-
-f, --fds=NUM -
Defines how many file descriptors each child should use. Note that the effective number will be twice the amount you set here, as the sender and receiver children will each open the given amount of file descriptors.
-
-F,--fifo -
Change the main thread to SCHED_FIFO after creating workers. This allows the management thread to run after many workers are created.
-
-g, --groups=NUM -
Defines how many groups of senders and receivers should be started
-
-h, --help
-
-l, --loops=LOOPS -
How many messages each sender/receiver pair should send
-
-p, --pipe -
Sends the data via a pipe instead of the socket (default)
-
-s, --datasize=SIZE -
Sets the amount of data to send in each message
-
-T, --threads -
Each sender/receiver child will be a POSIX thread of the parent.
-
-P, --process -
Hackbench will use fork() on all children (default behaviour)
Shows a simple help screen
Examples
Running hackbench without any options will give default behaviour, using fork() and sending data between senders and receivers via sockets.
user@host: ~ $ hackbench
Running in process mode with 10 groups using 40 file descriptors each (== 400 tasks)
Each sender will pass 100 messages of 100 bytes
Time: 0.890
To use pipes between senders and receivers and using threads instead of fork(), run
user@host: ~ $ hackbench --pipe --threads (or hackbench -p -T)
Running in threaded mode with 10 groups using 40 file descriptors each (== 400 tasks)
Each sender will pass 100 messages of 100 bytes
Time: 0.497
Set the datasize to 512 bytes, do 200 messages per sender/receiver pairs and use 15 groups using 25 file descriptors per child, in process mode.
user@host: ~ $ hackbench -s 512 -l 200 -g 15 -f 25 -P
Running in process mode with 15 groups using 50 file descriptors each (== 750 tasks)
Each sender will pass 200 messages of 512 bytes
Time: 4.497
Releases
9 releases since Debian 6.0 (Squeeze); the text changed 2 times.
--datasize since Debian 12 (Bookworm);
--fds since Debian 12 (Bookworm);
--fifo since Debian 12 (Bookworm);
--groups since Debian 12 (Bookworm);
--loops since Debian 12 (Bookworm);
-F since Debian 12 (Bookworm);
-f since Debian 12 (Bookworm);
-g since Debian 12 (Bookworm);
-h since Debian 12 (Bookworm);
-l since Debian 12 (Bookworm);
-s since Debian 12 (Bookworm).