Hi all,
In the second part of my performance tweaks series I would like to
publish
testing results of an IO queue, which uses new io_uring API [1] instead
of
libaio. Implementation of a low-level engine io_uring.cc [2] fully
replaces aio.cc by exposing the same API. To enable io_uring the
following
option has to be set to true: bluestore_iouring.
For testing I use fio objectstore engine with the following basic
config:
rw=randwrite
iodepth=16
nr_files=1
numjobs=1
size=256m
bluestore_min_alloc_size = 4096
bluestore_max_blob_size = 65536
bluestore_block_path = /dev/ram0
bluestore_block_db_path = /dev/ram1
bluestore_block_wal_path = /dev/ram2
bluestore_iouring=false
4k IOPS=25.5k, BW=99.8MiB/s, Lat=0.374ms
8k IOPS=21.5k, BW=168MiB/s, Lat=0.441ms
16k IOPS=17.2k, BW=268MiB/s, Lat=0.544ms
32k IOPS=12.3k, BW=383MiB/s, Lat=0.753ms
64k IOPS=8358, BW=522MiB/s, Lat=1.083ms
128k IOPS=4724, BW=591MiB/s, Lat=1.906ms
bluestore_iouring=true
4k IOPS=29.2k, BW=114MiB/s, Lat=0.331ms
8k IOPS=30.7k, BW=240MiB/s, Lat=0.319ms
16k IOPS=27.4k, BW=428MiB/s, Lat=0.368ms
32k IOPS=22.7k, BW=709MiB/s, Lat=0.475ms
64k IOPS=15.6k, BW=978MiB/s, Lat=0.754ms
128k IOPS=9572, BW=1197MiB/s, Lat=1.223ms
Overall IOPS increase is the following:
4k +14%
8k +42%
16k +59%
32k +89%
64k +85%
128k +102%
[1] https://lwn.net/Articles/776428/
[2] https://github.com/rouming/ceph/commits/bluestore-iouring
--
Roman