====== 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/schedulernoop 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]]