{"id":50385252,"url":"https://github.com/stackhpc/ansible-collection-fio-perfkit","last_synced_at":"2026-05-30T14:31:13.918Z","repository":{"id":83224994,"uuid":"592428127","full_name":"stackhpc/ansible-collection-fio-perfkit","owner":"stackhpc","description":null,"archived":false,"fork":false,"pushed_at":"2024-01-10T08:14:58.000Z","size":51,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-14T22:50:15.502Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stackhpc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-01-23T17:59:11.000Z","updated_at":"2024-01-05T12:50:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"d16e41e0-6326-4ee3-8ba2-ff84ca0dc7ae","html_url":"https://github.com/stackhpc/ansible-collection-fio-perfkit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stackhpc/ansible-collection-fio-perfkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-collection-fio-perfkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-collection-fio-perfkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-collection-fio-perfkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-collection-fio-perfkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackhpc","download_url":"https://codeload.github.com/stackhpc/ansible-collection-fio-perfkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackhpc%2Fansible-collection-fio-perfkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33696681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-30T14:31:13.077Z","updated_at":"2026-05-30T14:31:13.912Z","avatar_url":"https://github.com/stackhpc.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ansible-collection-fio-perfkit\n\nAn ansible collection for benchmarking network filesystem aggregate performance using `fio`, the [flexible IO](https://fio.readthedocs.io/en/latest/) tester.\n\n### Installation\n\n```\npython3 -m venv venv\nsource venv/bin/activate\npip install ansible\u003e=9.0\nansible-galaxy collection install git+https://github.com/stackhpc/ansible-collection-fio-perfkit.git\n```\n\n### Usage\n\n#### Ansible inventory\n\nCreate a simple Ansible inventory, specifying a single `control` host, and as many network filesystem `fs_client` hosts as required. \n\nThe control `host` may be `localhost`, but the control host must be able to connect to port 8765 on all `fs_client` hosts. \n\nEqually, the control host may be one of the filesystem clients, but output plots will be generated on the control host and must be retrieved.\n\nFor io500 tests, a single `io500` group of hosts participating in the io500 test should be created. The first host\nlisted in the group wil coordinate the io500 MPI jobs.\n\n```\n[control]\nlocalhost ansible_connection=local # Must be able to connect to port 8765 on all clients\n\n[fs_clients]\nfs-client[01-30]\n\n[device_clients]\nosd[01-30]\n\n[io500]\nfs-client[01-30]\n```\n\n#### Ansible playbook\nAn example Ansible playbook to use with `ansible-collection-fio-perfkit`:\n```yaml\n---\n- name: Run device tests\n  hosts: device_clients\n  gather_facts: true\n  tasks:\n    - name: Test conncurrent IO to all devices on a host\n      ansible.builtin.import_role:\n        name: stackhpc.fio_perfkit.fio_perfkit_single_host\n      tags:\n        - single-host\n      vars:\n        fio_perfkit_single_host_config:\n          - devices:\n              - /dev/vdb\n              - /dev/vdc\n            max_numjobs: 4\n            bs: 1M\n            rw: write\n            runtime: 2\n            filesize: 2M\n\n    - name: Test conncurrent IO from multiple processes to a single device on a host\n      ansible.builtin.import_role:\n        name: stackhpc.fio_perfkit.fio_perfkit_single_device\n      tags:\n        - single-device\n      vars:\n        fio_perfkit_single_device_config:\n          - device: /dev/vdb\n            max_numjobs: 4\n            bs: 1M\n            rw: write\n            runtime: 2\n            filesize: 2M\n\n- name: Run filesystem tests\n  hosts: fs_clients,control\n  gather_facts: true\n  tasks:\n    - name: Test a mix of read/write IO to a shared filesystem from many clients\n      ansible.builtin.import_role:\n        name: stackhpc.fio_perfkit.fio_perfkit_fs_mixed_io\n      tags:\n        - fs-mixed-io\n      vars:\n        fio_perfkit_fs_mixed_io_config:\n        # Test the product of fio_bs_list, fio_read_mix and fio_random_mix\n        # Ranges for fio_read_mix and fio_random_mix are calculated\n          fio_directory: /mnt/scratch # Target directory for fio tests\n          fio_runtime: 5 # fio runtime\n          fio_numjobs: 2 # fio numjobs\n          fio_size: 1M # fio filesize\n          fio_nrfiles: 2 # fio nrfiles\n          fio_bs_list: # List of blocksizes to test\n            - 1M\n          fio_read_mix:\n            start: 0\n            end: 100\n            step: 50\n          fio_random_mix:\n            start: 0\n            end: 100\n            step: 50\n\n    - name: Test the aggregate performance of a shared filesystem from many clients\n      ansible.builtin.import_role:\n        name: stackhpc.fio_perfkit.fio_perfkit_fs_aggregate_io\n      tags:\n        - fs-aggregate-io\n      vars:\n        fio_perfkit_fs_aggregate_io_config:\n          # Test the product of fio_bs_list and fio_rw_list\n          fio_directory: /mnt/scratch # Target directory for fio tests\n          fio_runtime: 5 # fio runtime\n          fio_numjobs: 2 # fio numjobs\n          fio_size: 1M # fio filesize\n          fio_nrfiles: 2 # fio nrfiles\n          fio_bs_list: # List of blocksizes to test\n            - 1M\n            - 32k\n          fio_rw_list: # List of rw modes to test\n            - read\n            - write\n\n- name: Run io500 tests\n  hosts: io500\n  gather_facts: true\n  tasks:\n    - name: Run the io500 tests\n      ansible.builtin.import_role:\n        name: stackhpc.fio_perfkit.io500\n      tags:\n        - io500\n      vars:\n        io500_test_path: \"/mnt/share\"\n        io500_stonewall_time: 300\n```\n\n### Benchmarks\nAll benchmarks are time-based - they run for as long as specified in `fio_runtime`. Additionally, the number of files to test IO over (`fio_nrfiles`), the number of IO threads (`fio_numjobs`) and the file size (`fio_size`) can be adjusted.\n\n#### Single device performance\nUse fio to test a single device with multiple jobs. This is useful for testing Ceph OSD host db/wal disks.\n\n\u003e [!WARNING]  \n\u003e This test may break any existing filesystems on the target devices!\n\n#### Single host, multiple device performance\nUse fio to test all devices on a host. This is useful for testing the aggregate performance of all OSD disks on OSD hosts. \n\n\u003e [!WARNING]  \n\u003e This test may break any existing filesystems on the target devices!\n\n#### Aggregate Performance\nFilesystem clients are added to the benchmark in turn from one filesystem client, to all filesystem clients. Each clients' contribution to filesystem bandwidth and IOPs is measured and plotted. The benchmark comprises a two-dimensional parameter sweep across multiple IO block-sizes and IO modes.\n\nUseful for measuring saturation of filesystem performance. \n\n#### Mixed IO\nAll filesystem clients participate in a range of benchmarks. A three-dimensional parameter sweep from 100% read to 100%\nwrite, from 100% random to 100% sequential IOs, and across multiple IO block-sizes is used to assemble the benchmark.\n\n#### io500\nRun the io500 using OpenMPI and [io500-singularity](https://github.com/stackhpc/io500-singularity). All members of the\n`[io500]` group will participate in the benchmark, and the first host will act as the MPI coordinator.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackhpc%2Fansible-collection-fio-perfkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackhpc%2Fansible-collection-fio-perfkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackhpc%2Fansible-collection-fio-perfkit/lists"}