On 2021/07/06 9:17, Damien Le Moal wrote: > This series improves libaio engine support for IO priority, adding > options to allow for mixed priority workloads to be specified more > easily and to match the kernel supported IO priority features. > > The first 3 patches are small cleanup and fixes in the manpage and > fiograph tool. > > Patch 4 and 5 introduce some helper functions to simplify the code in > the followup patches. > > Patch 6 changes the cmdprio_percentage option to allow specifying > different percentages for reads and writes. > > Patch 7 and 8 introduce the aioprioclass, aioprio and aioprio_bssplit. > These together allow a script to specify different IO priorities for > reads and writes of different sizes with different percentages. > > Patch 9 relaxes restrictions on the cmdprio_percentage option to allow > jobs to execute AIOs using a default priority as set with ioprio_set() > (as the kernel supports this). > > Patch 10 introduces the log_prio option to log each IO priority value, > allowing users to do per-priority level performance analysis with > complex workloads using many jobs. > > Finally, patch 11 adds a couple of example scripts to illustrate the use > of the new options introduced. > > Comments are as always most welcome. Hi Jens, Any comment on this series ? We have been using this for a while now internally and in the field to test ATA NCQ priority with good results. I am also planning to re-use this to add support for the Command Duration Limits feature (ATA & SCSI) using a new priority class (kernel patching cooking, but this will need some more time as the specifications must stabilize first. One thing that can be considered missing with this series is a full set of per-priority level statistics (IOPS, BW, etc). But that is a major change and so this is not talked here. > > Damien Le Moal (11): > manpage: fix formatting > manpage: fix definition of prio and prioclass options > tools: fiograph: do not overwrite input script file > os: introduce ioprio_value() helper > options: make parsing functions available to ioengines > libaio,io_uring: improve cmdprio_percentage option > libaio: introduce aioprio and aioprioclass options > libaio: introduce aioprio_bssplit > libaio: relax cdmprio_percentage constraints > fio: Introduce the log_prio option > examples: add libaio priority use examples > > HOWTO | 57 +++++++-- > backend.c | 1 + > cconv.c | 2 + > client.c | 2 + > engines/filecreate.c | 2 +- > engines/filedelete.c | 2 +- > engines/filestat.c | 2 +- > engines/io_uring.c | 33 +++-- > engines/libaio.c | 210 ++++++++++++++++++++++++++++--- > eta.c | 2 +- > examples/aio-prio-bssplit.fio | 17 +++ > examples/aio-prio-bssplit.png | Bin 0 -> 48709 bytes > examples/aio-prio-percentage.fio | 17 +++ > examples/aio-prio-percentage.png | Bin 0 -> 48752 bytes > fio.1 | 76 ++++++++--- > fio.h | 5 + > init.c | 4 + > io_u.c | 14 ++- > io_u.h | 10 +- > iolog.c | 45 +++++-- > iolog.h | 16 ++- > options.c | 50 ++++---- > os/os-android.h | 24 ++-- > os/os-dragonfly.h | 1 + > os/os-linux.h | 24 ++-- > os/os.h | 4 + > server.h | 3 +- > stat.c | 75 +++++------ > stat.h | 9 +- > thread_options.h | 20 +++ > tools/fiograph/fiograph.conf | 4 +- > tools/fiograph/fiograph.py | 4 +- > 32 files changed, 574 insertions(+), 161 deletions(-) > create mode 100644 examples/aio-prio-bssplit.fio > create mode 100644 examples/aio-prio-bssplit.png > create mode 100644 examples/aio-prio-percentage.fio > create mode 100644 examples/aio-prio-percentage.png > -- Damien Le Moal Western Digital Research