Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:scheduling-und-prozessgruppen [2015/11/09 16:47] – [I/O-Scheduler] stlinux:scheduling-und-prozessgruppen [2015/11/09 16:53] (aktuell) st
Zeile 1: Zeile 1:
 +====== 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: <code bash>grep . /sys/block/sd*/queue/scheduler</code>
 +
 +====== 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:<code bash>mount none /sys -t sysfs</code>))ein anderer scheduler zugewiesen werden.
 +
 +Auswahlmöglichkeiten und aktuell eingestellte Werte: ''cat /sys/block/<device>/queue/iosched'', also z.B. für das Gerät sda: <code bash>cat /sys/block/sda/queue/scheduler</code><file>noop anticipatory deadline [cfq]</file>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:
 +<file>GRUB_CMDLINE_LINUX_DEFAULT="quiet"</file>
 +zu
 +<file>GRUB_CMDLINE_LINUX_DEFAULT="quiet elevator=deadline"</file>
 +
 +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**:
 +<file>
 +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
 +</file>
 +**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):
 +
 +<code bash>
 +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
 +</code>
 +Das **funktioniert auch** bei neueren Systemen **mit systemd**, den Status des Skriptes kann so abgefragt werden:
 +<code bash>systemctl status rc-local.service</code>
 +
 +===== 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: <code bash>echo deadline > /sys/block/sda/queue/scheduler</code>
 +
 +Mit diesem Shellscript können alle zulässigen Geräte auf den deadline-Scheduler umgestellt werden:
 +<code bash>
 +#!/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
 +</code>
 +
 +===== 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]]