Differences between version 14 and predecessor to the previous major change of LinuxIoScheduler.
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 14 | Last edited on Wednesday, December 15, 2010 11:03:05 pm | by ThereseSpade | Revert |
Older page: | version 10 | Last edited on Sunday, October 8, 2006 8:54:34 am | by GeorgePollard | Revert |
@@ -1,58 +1,58 @@
-The 2.6 Linux Kernel included
selectable IO
schedulers. IO Schedulers
control the way the kernel
commits reads and writes to disks -
the intention of providing different schedulers is to allow better optimsation
for different classes of workload.
+The 2.6 LinuxKernel includes
selectable [I/O]
schedulers. They
control the way the [Kernel]
commits reads and writes to disks –
the intention of providing different schedulers is to allow better optimisation
for different classes of workload.
-Without an IO
scheduler, the kernel would basically just issue each request to disk in the order that it received them. This could result in massive thrashing of the disk subsystem -
if one process was reading from one part of the disk, and one writing to another, it
would have to seek back and forth across the disk for every operation. The schedulers
main goal is to optimise disk access times.
+Without an I/O
scheduler, the kernel would basically just issue each request to disk in the order that it received them. This could result in massive HardDisk
thrashing:
if one process was reading from one part of the disk, and one writing to another, the heads
would have to seek back and forth across the disk for every operation. The scheduler’s
main goal is to optimise disk access times.
-An IO
scheduler can use the following techniques to improve performance:
+An I/O
scheduler can use the following techniques to improve performance:
; Request merging: The scheduler merges adjacent requests together to reduce disk seeking
; Elevator: The scheduler orders requests based on their physical location on the block device, and it basically tries to seek in one direction as much as possible.
; Prioritisation: The scheduler has complete control over how it prioritises requests, and can do so in a number of ways
-All IO
schedulers should also take into account resource starvation, to ensure requests eventually do get serviced!
+All I/O
schedulers should also take into account resource starvation, to ensure requests eventually do get serviced!
!! The Schedulers
There are currently 4 available:
-* Noop
Scheduler
-* Anticipatory IO Scheduler ("as scheduler"
)
+* No-op
Scheduler
+* Anticipatory IO Scheduler (AS
)
* Deadline Scheduler
-* Complete Fair Queueing Scheduler ("cfq scheduler"
)
+* Complete Fair Queueing Scheduler (CFQ
)
-! Noop
Scheduler
+! No-op
Scheduler
This scheduler only implements request merging.
-! Anticipatory IO Scheduler ("as scheduler")
+! Anticipatory IO Scheduler
-The anticipatory scheduler is the default scheduler -
if you've not specified one, this is the one that will be loaded. It implements request merging, a one-way elevator, read and write request batching, and attempts some anticapatory
reads by holding off a bit after a read batch if it thinks a user is going to ask for more data. It tries to optimise for physical disks by avoiding head movements if possible -
one downside to this is that it probably give highly erratic performance on database or storage systems.
+The anticipatory scheduler is the default scheduler in older 2.6 kernels –
if you've not specified one, this is the one that will be loaded. It implements request merging, a one-way elevator, read and write request batching, and attempts some anticipatory
reads by holding off a bit after a read batch if it thinks a user is going to ask for more data. It tries to optimise for physical disks by avoiding head movements if possible –
one downside to this is that it probably give highly erratic performance on database or storage systems.
! Deadline Scheduler
-The deadline scheduler implements request merging, a one-way elevator, and imposes a deadline on all operations to prevent resource starvation. Because writes return instantly within linux
, with the actual data being held in cache, the deadline scheduler will also prefer readers -
as long as the deadline for a write request hasn't passed. The kernel docs suggest this is the preferred scheduler for database systems, especially if you have [TCQ] aware disks, or any system with high disk performance.
+The deadline scheduler implements request merging, a one-way elevator, and imposes a deadline on all operations to prevent resource starvation. Because writes return instantly within [Linux]
, with the actual data being held in cache, the deadline scheduler will also prefer readers –
as long as the deadline for a write request hasn't passed. The kernel docs suggest this is the preferred scheduler for database systems, especially if you have [TCQ] aware disks, or any system with high disk performance.
-! Complete Fair Queueing Scheduler ("cfq scheduler"
)
+! Complete Fair Queueing Scheduler (CFQ
)
-The complete fair queueing scheduler implements both request merging and the elevator, and attempts to give all users of a particular device the same number of IO requests over a particular time interval. This should make it more efficient for multiuser systems. It seems that Novel SLES sets cfq as the scheduler by default, as does the latest [Ubuntu] release.
+The complete fair queueing scheduler implements both request merging and the elevator, and attempts to give all users of a particular device the same number of IO requests over a particular time interval. This should make it more efficient for multiuser systems. It seems that Novel SLES sets cfq as the scheduler by default, as does the latest [Ubuntu] release. As of the 2.6.18 kernel, this is the default schedular in kernel.org releases
.
!! Changing Schedulers
-The most reliable way to change schedulers is to set the kernel option '
elevator'
at boot time. You can set it to one of "
as"
, "
cfq"
, "
deadline"
or "
noop"
, to set the appropriate scheduler.
+The most reliable way to change schedulers is to set the kernel option “<tt>
elevator</tt>”
at boot time. You can set it to one of “<tt>
as</tt>”
, “<tt>
cfq</tt>”
, “<tt>
deadline</tt>”
or “<tt>
noop</tt>”
, to set the appropriate scheduler.
-It seems under more recent 2.6 kernels (2.6.11, possibly earlier), you can change the scheduler at runtime by echoing the name of the scheduler into /sys/block/<
devicename>
/queue/scheduler, where devicename is
the base
name of the block device, eg sda for /dev/sda
+It seems under more recent 2.6 kernels (2.6.11, possibly earlier), you can change the scheduler at runtime by echoing the name of the scheduler into <tt>
/sys/block/''$
devicename''
/queue/scheduler</tt>
, where the device
name is the basename
of the block device, eg “<tt>
sda</tt>”
for <tt>
/dev/sda</tt>.
!! Which one should I use?
-I've not personally done any testing on this, so I can't speak from experience yet. The anticipatory scheduler will be the default one for a reason however - it is optimised for the common case. If you've only got single disk systems (ie, no RAID - hardware or software) then this scheduler is probably the right one for you. If it's a multiuser system, you will probably find cfq
or deadline providing better performance, and the numbers seem to back deadline giving the best performance for database systems.
+I've not personally done any testing on this, so I can't speak from experience yet. The anticipatory scheduler will be the default one for a reason however - it is optimised for the common case. If you've only got single disk systems (ie, no RAID - hardware or software) then this scheduler is probably the right one for you. If it's a multiuser system, you will probably find CFQ
or deadline providing better performance, and the numbers seem to back deadline giving the best performance for database systems.
-!! Tuning the IO
schedulers
+!! Tuning the I/O
schedulers
-The schedulers may have parameters that can be tuned at runtime. Read the linux
documentation on the schedulers listed in the [
References|http://www.wlug.org.nz/LinuxIoScheduler#References]
section below
+The schedulers may have parameters that can be tuned at runtime. Read the LinuxKernel
documentation on the schedulers listed in the ''
References''
section below
!! More information
-Read the documents mentioned in the [
References|http://www.wlug.org.nz/LinuxIoScheduler#References]
section below, especially the linux kernel
documentation on the anticipatory and deadline schedulers.
+Read the documents mentioned in the ''
References''
section below, especially the LinuxKernel
documentation on the anticipatory and deadline schedulers.
!! References
* [Tuning Linux 2.6 for the zSeries| http://awlinux1.alphaworks.ibm.com/developerworks/linux390/perf/tuning_rec_dasd_ioScheduler.shtml#begin ]
* [Linux I/O Schedulers|http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20IO%20Schedulers.pdf]
@@ -60,7 +60,9 @@
* /usr/src/linux/Documentation/block/as-iosched.txt
* /usr/src/linux/Documentation/block/deadline-iosched.txt
* [Some Tunable Parameters for the CFQ Scheduler|http://lwn.net/Articles/101029/]
* [2003 Kerneltrap Thread Comparing IO Schedulers (Primarily AS vs. CFQ)|http://www.cs.rice.edu/~ssiyer/r/antsched/shines.html]
+* [Essays|http://www.essayontime.com/services/essay.html]] [on Linux Scheduler|http://www.ibm.com/developerworks/linux/library/l-scheduler/]
+* [Research paper|http://www.essayontime.com/services/research-paper.html] [reference about Process Scheduling|http://oreilly.com/catalog/linuxkernel/chapter/ch10.html].
----
Part of CategoryKernel