====== scheduling und Prozessgruppen ======
[[linux:Linux]] bietet ausgereifte Möglichkeiten Ressourcen mit Prioritäten zuzuweisen. Dafür sind die "scheduler" (I/O und CPU) verantwortlich die durch die vielen Tools Informationen bekommen wie Ressourcen am effektiv zugewiesen werden sollten.
Den aktuell verwendeten Scheduler zeigt dieser Befehl: grep . /sys/block/sd*/queue/scheduler
====== cgroups ======
FIXME
====== I/O-Scheduler ======
I/O-Scheduler weisen die begrenzten Ressourcen der angeschlossenen Speichersysteme zu.
Um einen bestimmten Scheduler beim Boot zum Standard zu machen muss dem kernel das folgende Argument übergeben werden (am Beispiel deadline): ''elevator=deadline''.
Natürlich geht das auch zur Laufzeit (seit [[linux:Linux]] [[linux:Kernel]] 2.6.10): Jedem Blockgerät kann über das sysfs ((falls nicht gemounted:mount none /sys -t sysfs
))ein anderer scheduler zugewiesen werden.
Auswahlmöglichkeiten und aktuell eingestellte Werte: ''cat /sys/block//queue/iosched'', also z.B. für das Gerät sda: cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]Die Ausgabe zeigt dass noop, anticipatory, deadline, und cfq einstellbar sind, wobei die eckigen Klammern die aktuelle Einstellung anzeigen (hier: cfq).
Dauerhaft lässt sich der Scheduler (Standard: cfq, hier auf deadline) mit grub ändern (Ablauf bei [[debian:Debian]]):
in der ''/etc/default/grub'' die Zeile:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
zu
GRUB_CMDLINE_LINUX_DEFAULT="quiet elevator=deadline"
Anschließend aktualisiert der Befehl ''update-grub'' die Konfigurationsdatei von grub2 (''/boot/grub/grub.cfg'').
Für Virtualisierungsserver können die Standardwerte zu großzügig sein.
Die passenden Einstellungen könnten auch in der ''/etc/sysctl.conf'' vorgenommen werden, **dies funktioniert bei Debian jedoch nicht**:
block/sda/queue/iosched/read_expire = 250 # default: 500
block/sda/queue/iosched/write_expire = 1500 # default: 5000
block/sdb/queue/iosched/read_expire = 250 # default: 500
block/sdb/queue/iosched/write_expire = 1500 # default: 5000
**Stattdessen** ist bei Systemen mit dem alten Sys-V-Init-system die Datei ''/etc/rc.local'' (bei anderen Distributionen auch: ''/etc/rc.d/rc.local'') anzupassen (Beispiel mit sda und sdb):
for DISK in sda sdb
do
# Select deadline scheduler first
echo deadline > /sys/block/${DISK}/queue/scheduler
# Now set deadline scheduler parameters
echo 250 > /sys/block/${DISK}/queue/iosched/read_expire # default: 500
echo 2500 > /sys/block/${DISK}/queue/iosched/write_expire # default: 5000
done
Das **funktioniert auch** bei neueren Systemen **mit systemd**, den Status des Skriptes kann so abgefragt werden:
systemctl status rc-local.service
===== NOOP I/O scheduler =====
Dieser Scheduler macht nichts (no-operation), geeignet vor allem für virtuelle Server wo sich der Wirt um die Verteilung der Schreibzugriffe kümmert.
===== Anticipatory I/O scheduler =====
FIXME
===== Completely Fair Queuing (CFQ) I/O scheduler =====
[[wp>CFQ]] ist oft als Standard-Scheduler voreingestellt, er ermöglicht einen hohen Durchsatz aber weniger Interaktivität, was ihn für Desktops und Datenbankserver weniger geeignet macht.
===== Deadline I/O scheduler =====
Eine Änderung auf den [[wp>Deadline scheduler]] ist schnell erledigt: echo deadline > /sys/block/sda/queue/scheduler
Mit diesem Shellscript können alle zulässigen Geräte auf den deadline-Scheduler umgestellt werden:
#!/bin/bash
scheduler="deadline"
if [ "`id -u`" -ne 0 ]; then
echo you are not root!
exit 1
fi
for dev in /sys/block/*
do
# show available scheduler for device
# cat $dev/queue/scheduler
grep $scheduler "$dev/queue/scheduler" > /dev/null
if [ $? -eq 0 ]
then
echo "setting scheduler $scheduler to $dev."
echo $scheduler > $dev/queue/scheduler
# cat $dev/queue/scheduler
else
echo "scheduler $scheduler not allowed for $dev. Allowed schedulers are: `cat "$dev/queue/scheduler"`"
fi
done
===== Links =====
* **[[http://cromwell-intl.com/linux/performance-tuning/disks.html|Performance Tuning on Linux — Disk I/O]]**
* [[http://www.mjmwired.net/kernel/Documentation/block/switching-sched.txt|Kernel Docs: switching-sched.txt]]
* [[http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/topic/liaat/liaatbpscheduleroverview.htm|I/O schedulers]]
* [[http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/topic/liaat/liaatbpdeadline.htm|Best practice: Optimize block I/O performance by using the Deadline I/O scheduler]]
* [[http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/topic/liaat/liaatbpcfq.htm|Best practice: If you cannot use the Deadline I/O scheduler, configure the CFQ I/O scheduler]]
* [[http://www.wlug.org.nz/LinuxIoScheduler|LinuxIoScheduler]]
* [[http://www.drbd.org/users-guide/s-latency-tuning.html|drbd latency tuning]]
* [[https://www.kernel.org/doc/Documentation/block/deadline-iosched.txt|Deadline IO scheduler tunables]]
* [[http://www.linux-magazin.de/Heft-Abo/Ausgaben/2005/03/Kern-Technik|Kernel- und Treiberprogrammierung mit dem Kernel 2.6 - Kern-Technik]]