The Linux kernel’s I/O scheduler determines the order disk read/write requests are actually processed — and the right choice genuinely depends on whether you’re running on an SSD or a spinning HDD.
# Check the current scheduler for a device
cat /sys/block/sda/queue/scheduler
# Change it temporarily
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler
# Persistent change via a udev rule
echo 'ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="mq-deadline"' | \
sudo tee /etc/udev/rules.d/60-scheduler.rules
Why It Matters for HDDs vs SSDs
- HDDs — benefit genuinely from schedulers that reorder requests to minimize physical read-head movement (like the older CFQ or deadline schedulers)
- SSDs — have near-uniform access time regardless of “location,” so request reordering for seek-time optimization provides little to no benefit; simpler, lower-overhead schedulers (like
none/noopormq-deadline) are usually the better choice
Modern kernels using the multi-queue block layer (mq-deadline, kyber, none) generally auto-select a reasonable default based on detected device type — manual tuning is worth doing specifically for latency-sensitive database workloads where the difference is actually measurable, not as a blanket “optimization” on every system.