I/O schedulers are used to optimize reads/writes on disk.
There are three types of I/O schedulers (also called I/O elevators) in RHEL 7:
- CFQ (Completely Fair Queuing) promotes I/O coming from real time processes and uses historical data to anticipate whether an application will issue more I/O requests in the near future (causing a slight tendency to idle).
- Deadline attempts to provide a guaranteed latency for requests and is particularly suitable when read operations occur more often than write operations (one queue for reads and one for writes, I/Os are dispatched based on time spent in queue).
- Noop implements a simple FIFO (first-in first-out) scheduling algorithm with minimal CPU cost.
With RHEL 7, the default I/O Scheduler is now CFQ for SATA drives and Deadline for everything else.
This is because Deadline outperforms CFQ for faster storage than SATA drives.
More details are available in the RHEL 7 Performance Tuning Guide.
Configuration at boot
To define a global I/O scheduler (here cfq) at boot, type:
# grubby --update-kernel=ALL --args="elevator=cfq"
Configuration for a particular disk
To get the current configuration of a disk (here /dev/sda), type:
# more /sys/block/sda/queue/scheduler noop deadline [cfq]
To assign an I/O scheduler (here deadline) to a particular disk (here /dev/sda), type:
# echo deadline > /sys/block/sda/queue/scheduler
Note: This could be set permanently through the rc-local service.
To check the new configuration, type:
# more /sys/block/sda/queue/scheduler noop [deadline] cfq
Source: RHEL 7 Performance Tuning Guide.
You can also read IBM Best Practices for KVM starting at page 25.
RedHat provides some suggestions concerning the I/O scheduler to use in a virtualized environment.