Skip to content

Instantly share code, notes, and snippets.

@ashvardanian
Last active October 31, 2025 16:56
Show Gist options
  • Save ashvardanian/96a3a39a85cfbae3a373710038455a0a to your computer and use it in GitHub Desktop.
Save ashvardanian/96a3a39a85cfbae3a373710038455a0a to your computer and use it in GitHub Desktop.
Profiling SSDs for IO-intensive applications
# Based on StackOverflow answer: https://askubuntu.com/a/991311
# For every engine that we may use, performs following benchmarks (in current directory).
# 1. Sequential READ speed with big blocks.
# 2. Sequential WRITE speed with big blocks.
# 3. Mixed random 4K read and write QD1 with sync.
# 4-6. Random 4K read QD1:
# 4. with iodepth=1, numjobs=1
# 5. with iodepth=1024, numjobs=1
# 6. with iodepth=1024, numjobs=4
#
# Full list of engines is available here:
# https://fio.readthedocs.io/en/latest/fio_doc.html#i-o-engine
sudo apt install fio
# LibAIO
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1024 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1024 --direct=1 --numjobs=2 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1024 --direct=1 --numjobs=4 --runtime=60 --group_reporting
# mmap
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=mmap --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=mmap --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=mmap --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=mmap --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=mmap --fsync=1 --iodepth=1024 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=mmap --fsync=1 --iodepth=1024 --direct=1 --numjobs=2 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=mmap --fsync=1 --iodepth=1024 --direct=1 --numjobs=4 --runtime=60 --group_reporting
# io_uring
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=io_uring --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=io_uring --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=io_uring --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=io_uring --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=io_uring --fsync=1 --iodepth=1024 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=io_uring --fsync=1 --iodepth=1024 --direct=1 --numjobs=2 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=io_uring --fsync=1 --iodepth=1024 --direct=1 --numjobs=4 --runtime=60 --group_reporting
# libcufile is only supported on Volta and Ampere
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libcufile --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libcufile --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libcufile --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libcufile --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libcufile --fsync=1 --iodepth=1024 --direct=1 --numjobs=1 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libcufile --fsync=1 --iodepth=1024 --direct=1 --numjobs=2 --runtime=60 --group_reporting
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libcufile --fsync=1 --iodepth=1024 --direct=1 --numjobs=4 --runtime=60 --group_reporting
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment