Hi everyone,
I am pleased to announce that I have just imported the source code for a
new benchmarking utility named HALoad.
HALoad is a lightweight, multi-threaded traffic generator designed to
benchmark HTTP infrastructures under heavy loads. Built onto HAProxy's
architecture, it shares its parent engine's efficient handling of
connections and natively supports HTTP/1, HTTP/2, and HTTP/3 (QUIC/TCP).
The primary design goal is to provide a modernized alternative to legacy
tools like h1load, extending benchmarking capabilities to newer
protocols. Notably, HALoad introduces the concept of concurrent,
independent HTTP client tasks ("users"). Each simulated user will
instantiate as many backend server connections as there are target URLs
specified on the command line.
One of its main strengths is that it does not require any configuration
file one the command line. Instead, it uses HAProxy's internal HTX
format to abstractly manipulate HTTP elements independently of the wire
protocol. This allows it to generate unified requests and process
responses seamlessly across HTTP/1.1, HTTP/2, or HTTP/3, dynamically
deriving its memory configuration from basic command line inputs.
Compilation:
The compilation process mirrors standard HAProxy builds, specifying
"haload" as the compilation target:
# standard build
$ make -j $(nproc) TARGET=linux-glibc haload
# with TLS/SSL support
$ make TARGET=linux-glibc USE_OPENSSL=1 haload
# with HTTP/3 over QUIC support
$ make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_QUIC=1 haload
Quick examples:
A 30-second test using 4 threads simulating 10 distinct users
$ ./haload -t 4 -u 10 -d 30 http://127.0.0.1:8888/
Feel free to check out the detailed documentation now available in
doc/haload.txt for advanced usage, positional arguments, and in memory
configuration dumping (-C) etc.
Feedback and test reports are welcome!
Regards,
Fred