AISLoader Composer
May 18, 2026 ยท View on GitHub
This directory contains scripts and ansible playbooks to benchmark an AIS cluster using multiple hosts running aisloader, controlled by ansible. To collect system metrics we optionally use netdata, a free and open source data aggregator deployed as a container on the AIS nodes.
Prerequisites
- python3 and pip3 available in your path
- ansible installed:
python3 -m pip install --user ansible - aisloader installed on each of the hosts it will run on
- Build the aisloader binary (
make aisloaderfrom the aistore source root) - Update the inventory file in
common.shand aisloader path insetup_aisloader.shand run the script to copy the aisloader binary to each of the client nodes
- Build the aisloader binary (
- network access to each of the
aisloaderhosts - network access from each of the
aisloaderhosts to any AIS proxy in the cluster - if netdata is used, docker must be installed on each AIS target node. Use provided install_docker.sh script.
Configuration
- Set up an ansible hosts configuration file (the current scripts all use inventory/inventory.yaml). This file must have a section
aisloader_hostsand a sectiontarget_hosts. Update the reference to this hosts file in common.sh. - Set up stats monitoring
- Modify the
GRAFANA_HOSTvariable in common.sh to set the machine that will host grafana and graphite. - Ensure docker is installed and accessible on each target host. The provided
install_docker.shwill do this automatically. - Run
start_grafana.shandstart_netdata.shto start the containers to collect and display aisloader and system statistics. - Configure your benchmarks
- Modify the
run_get_benchandrun_put_benchscripts as needed to set object sizes, benchmark durations, bucket names, and other options. These variables can also be set at runtime via the command line. - Configure the number of worker threads each aisloader instance will use in playbooks/vars/bench.yaml.
- Run
configure_aisloader.shto update the TCP settings on the aisloader hosts. This is necessary to enable a very large number of outbound connections (to the AIS cluster) without exhausting the number of local ports available. - To run individual benchmarks, use the
run_get_benchandrun_put_benchscripts. For an example running multiple variations of benchmarks, see run_all.sh. - The parse_results Python script can be used to summarize the results exported to the
/outputdirectory.
Optional
- To run disk benchmarks, uncomment the desired sections from the disk_bench.sh and run the
disk_bench.yamlplaybook with thetarget_hostsvariable. This will trigger fio benchmarks on the corresponding AIS targets. - To view grafana dashboards with metrics sent by
aisloaderandnetdata, use your browser to accessgrafana_host(seegrafana_hostargument in the scripts). Note that the default grafana port is3000. Then you can optionally import the included throughput dashboard ingrafana_dashboards. - To view individual host
netdatadashboards, use your browser to access the host's IP at thenetdatadefault port19999.
Notes
- The
getbenchmarks expect data to already exist in the clusters. Either populate the bucket or use theputbenchmark first. - Note that individual
aisloaderhosts do not communicate with each other. Secondly, when runningputworkloadsaisloaderwill create destination bucket iff the latter does not exist. That's why it is recommended to create buckets prior to writing (into those buckets) from multipleaisloaders. - None of the
aisloaderruns use thecleanupoption. For all supported options, simply runaisloaderor check aisloader's readme. - To debug, add
-vvvto the ansible-playbook command in common.sh to get the full command that is run on each host. - fio
rand_writeis destructive and cannot (shall not!) be used in combination with theallow_mounted_writeoption. Therand_writeoption is commented out in both the ansible playbook and the script.