This repository contains scripts and tools for benchmarking NVMe storage using different I/O engines, including libaio, io_uring, and SPDK. It also includes performance analysis and results obtained from running these tests.
Experiments- Contains Shell scripts for running benchmarks with different I/O engines, Output files and performance analysis from the benchmarking tests, Installation and testing scripts for SPDK, and Scripts for evaluating RocksDB performance on NVMe storage.Report- LaTeX source files of the performance analysis report, including detailed results, figures, and discussions.
git clone https://github.com/AsyncIOBench/IOBenchmark.git
cd IOBenchmarkEach script runs fio with a specific I/O engine:
script1.sh→ Useslibaioscript2.sh→ Usesio_uringscript3.sh→ UsesSPDK
Run a script using:
chmod +x Experiments/libaio/script1.sh
./Experiments/libaio/script1.shAfter execution, results are saved in Experiments. You can analyze them using:
cat Experiments/libaio/randwrite_1.txtThe repository includes:
- Latency, IOPS, and Bandwidth comparisons for
libaioandio_uring. - NVMe storage behavior under high load.
- SPDK performance evaluation and optimization techniques.
- RocksDB benchmarking on NVMe storage:
- Evaluates how different I/O engines affect database performance.
- Analyzes read/write throughput, latency, and tail latency under various workloads.
- Explores the impact of NVMe storage on key-value database operations.
- Compares sequential and random read/write performance.
Below is the comparison of various performance metrics (Latency, IOPS, and Bandwidth) across different I/O engines (libaio, io_uring, and SPDK).
![]() |
![]() |
|---|---|
| Latency Comparison | IOPS Comparison |
![]() |
![]() |
|---|---|
| Bandwidth Comparison | Overview |



