Benchdrill is a benchmarking tool based on Machinery (revision fdcbe0f of 2017-5-31), an asynchronous task queue/job queue based on distributed message passing. It allows to load charges thanks to Machinery’s workers, which are distributed with in a Docker Swarm. It is possible to send jobs in parallel to the workers through the queue. Workers which will execute them and return the result as soon as they are ready. They can run tools as Filebench.
Workers can be scaled up or down thanks to Docker, by scaling up or down the benchdrill-worker
service with the docker service scale
command.
First you need Go 1.8 and Docker v17.06. Then, after cloning this repository with Git, run the following commands in a terminal in the root directory of Benchdrill:
$ docker pull wolphinproject/benchdrill
$ ./stack/benchdrill-network
$ ./stack/benchdrill-deploy
Benchdrill commands are run with stack/benchdrill-cli
. Currently there are 2 commands with Benchdrill: send_cmd_args
and send_cmd_file
. The first one send a command to a worker, possibly with arguments, the second one allows to send the content of a local file given as an argument to a worker, which will save the content on a file then use it.
Two benchmark tools are currently supported: Sysbench and Filebench. Below two commands you can run, given as examples.
$ ./stack/benchdrill-cli send_cmd_args "sysbench --time=5 cpu run"
This command will send the command quoted to a single worker, which will run a built-in CPU test of Sysbench for 5 seconds.
$ ./stack/benchdrill-cli --times 3 send_cmd_file "filebench -f" < readfiles.f
This command will send the command quoted 3 times as 3 separate and identical tasks executed simultaneously (thanks to the --times
option); it will run the test written in readfiles.f
(provided in the repository as an example).
Both Redis and Worker services are in a Docker Swarm. A Swarm is a cluster in which each node has a Docker engine. A node can be a manager or a worker. In Swarm mode concepts are not about containers but about services. A service is the task a manager or a worker has to execute. It can be several identical containers distributed across nodes. In our case, the Redis service is composed of a unique container, but the Worker service has several identical containers and can be scaled up or down with a docker service scale
command. More information about Docker Swarm here.
Mozilla Public License 2.0