Different I/O requirements may benefit from changing from the Ubuntu distro default. A quick start guide to select a suitable I/O scheduler is below. The results are based on running 25 different synthetic I/O patterns generated using fio on ext2, ext3, ext4, xfs and btrfs with the various I/O schedulers using the 4.19 kernel.
Note: deadline is used below for deadline or mq-deadline, noop is used for noop or none depending on the multiqueue capablity of your device.
Section 1. SSD
1st choice 2nd choice avoid Random I/O: cfq/deadline bfq Sequential I/O: deadline none bfq Database I/O: deadline none bfq General I/O: deadline none bfq
It is worth noting that there is little difference in throughput between the cfq/deadline/mq-deadline/kyber I/O schedulers when using fast multi-queue SSD configurations or fast NVME devices. In these cases it may be preferable to use a noop/none I/O scheduler to reduce CPU overhead.
Section 2. HDD
1st choice 2nd choice avoid Random I/O: deadline bfq/cfq bfq/none Sequential I/O: deadline bfq none Database I/O: deadline bfq/none General I/O: deadline bfq none
Avoid using the none/noop I/O schedulers for a HDD as sorting requests on block addresses reduce the seek time latencies and neither of these I/O schedulers support this feature.
Of course, your usecase may differ, the above are just suggestions to start with based on some synthetic tests. You may find other choices with adjustments to the I/O scheduler tunables produce better results.