[[Vorlage(Archiviert, "Bei aktuellen SSD braucht man sich über das Setzen des besten I/O-Schedulers keine Gedanken mehr zu machen. Erkennt der Kernel die SSD als solche, verzichtet dieser auf einige Eigenarten, die bei herkömmlichen Festplatten sinnvoll waren.")]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Editor: Einen Editor verwenden] }}} [[Inhaltsverzeichnis(3)]] {{{#!vorlage hinweis Dieser Artikel ist Teil der Artikelserie [:SSD:], welche das Thema [wikipedia:Solid_State_Drive:Solid State Drives] behandelt. Dieser Artikel geht in allen Beschreibungen davon aus, dass die SSD als '''/dev/sda''' im System eingebunden ist. Die Befehle müssen bei davon abweichenden Systemen daher gegebenenfalls angepasst werden. }}} [[Bild(Wiki/Icons/SSD.png, 48, align=left)]] Es gibt verschiedene [:Bootoptionen:], die man dem Kernel beim Rechnerstart übergeben kann. Für den Einsatz von SSDs kann man ebenfalls einige dieser Optionen nutzen. So kann man zum Beispiel den [wikipedia:Festplatten-Scheduler:I/O-Scheduler], der ein Bestandteil von Betriebssystemen ist und die zeitliche Abfolge („Scheduling“) von Lese- und Schreibaufträgen an Festplatten und andere Speichergeräte regelt, beeinflussen. = I/O-Scheduler = Linux nutzt den [wikipedia:Completely_Fair_Scheduler:Completely Fair Scheduler] (CFQ). Dieser wird verwendet, um die Priorität von Programmabläufen auf Kernelebene zu verwalten und ist seit [:Kernel:] 2.6.23 im Einsatz. Allerdings ist der CFQ auf maximale Performance bei konventionellen, magnetischen Laufwerken ausgerichtet. So kann es bei SSD in manchen Fällen beim Schreiben von großen Dateien dazu kommen, dass andere Applikationen, die ebenfalls versuchen, Dinge auf die SSD zu schreiben, so lange warten müssen, bis die große Datei fertig geschrieben wurde. Dies lässt sich sehr einfach durch einen Test des Kernels herausfinden. '''Bei aktuellen SSD braucht man sich über das Setzen des besten I/O-Schedulers keine Gedanken mehr zu machen. Erkennt der Kernel die SSD als solche, verzichtet dieser auf einige Eigenarten, die bei herkömmlichen Festplatten sinnvoll waren.''' == Zusammenspiel Kernel und Scheduler == Ob der Kernel die SSD als solche erkennt, kann man sehr einfach in einem Terminal [1] überprüfen. Dazu gibt man den folgenden Befehl ein: {{{#!vorlage Befehl cat /sys/block/sda/queue/rotational }}} Erscheint als Ausgabe eine Null (`0`), so erkennt der Kernel die SSD bereits als SSD. Andernfalls können die nachfolgenden Änderungen helfen. == Art des Schedulers == Um zu erfahren, welche Scheduler-Optionen der Kernel nutzt, verwendet man den folgenden Befehl im Terminal: {{{#!vorlage befehl cat /sys/block/sda/queue/scheduler }}} Die Ausgabe zeigt folgende Ausgabe an: {{{ noop deadline [cfq] }}} Die in den eckigen Klammern stehende Option ist die zurzeit vom Betriebssystem genutzte Option. Die Optionen `noop` bzw. insbesondere `deadline` eignen sich für SSD besser. Allerdings muss man dabei auf die übrige Hardware des Rechners Rücksicht nehmen. === Exkurs - Definitionen der Scheduler === Die einzelnen I/O-Scheduler sind wie folgt definiert: * CFQ: Der Standard-Algorithmus der meisten Linux-Distributionen ist auf konventionelle Festplatten (HDD) zugeschnitten. CFQ versucht, die zur Verfügung stehende I/O-Bandbreite gleichmäßig zwischen allen Prozessen aufzuteilen. * NOOP: Der noop-Algorithmus versucht, so wenig Prozessorleistung wie möglich zu verbrauchen, fungiert nach dem [wikipedia:First_In_–_First_Out:FIFO]-Prinzip und erwartet, dass der jeweilige [wikipedia:Controller_(Hardware):Hardware-Conroller] die einzelnen Requests bearbeitet. * Deadline: Dieser Scheduling-Algorithmus nutzt eine Warteschlange, die I/O-Requests nach Priorität sortiert, um so jedem Request in einer garantierten Zeit abarbeiten zu können. Weitere Informationen zum I/O-Scheduler kann man im Abschnitt [#Links Links] finden. = I/O-Scheduler temporär setzen = Man kann diese Optionen vorerst nur temporär (bis zum nächsten Neustart) ausprobieren und parallel Geschwindigkeitstests (siehe [:Festplatten-Geschwindigkeitstest:]) durchführen. Im Terminal gibt man dazu einen der folgenden Befehle ein: * Für die Option `deadline`: {{{#!vorlage befehl echo deadline | sudo tee /sys/block/sda/queue/scheduler }}} * Für die Option `noop`: {{{#!vorlage befehl echo noop | sudo tee /sys/block/sda/queue/scheduler }}} * Für die Option `cfq`: {{{#!vorlage befehl echo cfq | sudo tee /sys/block/sda/queue/scheduler }}} Nach jedem Wechsel des Schedulers sollte man nun ein paar Geschwindigkeitstests durchführen (nicht nur einen, um das Ergebnis nicht zu verfälschen). Was man im Regelfall sofort erkennen kann, ist, dass die Optionen `noop` und `deadline` schneller als der Standard `cfq` sind. Ob dann `noop` oder `deadline` zum Einsatz kommen, hängt von persönlichen Vorlieben und der eingesetzten Hardware ab. = Scheduler dauerhaft setzen = {{{#!vorlage hinweis Wird im Rechner nur eine SSD eingesetzt, empfiehlt sich die Verwendung einer [:Bootoptionen:Bootoption]. Nutzt man hingegen einen Mix aus konventionellen Festplatten (HDD) und einer SSD, sollte man entweder '''sysfsutils''' oder das [wikipedia:Virtuelles_Dateisystem:Virtuelle Dateisystem] nutzen. }}} Man kann den I/O-Scheduler auf die Optionen `noop` oder `deadline` setzen, wenn man nur eine Festplatte in Betrieb hat, dies eine SSD ist und externe Laufwerke gelegentlich nutzt (gilt auch für USB-Sticks). == GRUB 2 == Nutzt man [:GRUB_2:], fügt man in '''/etc/default/grub''' (Zeile: `GRUB_CMDLINE_LINUX`) die Bootoption `elevator=noop` oder `elevator=deadline` hinzu, so dass es wie folgt aussieht: {{{ GRUB_CMDLINE_LINUX="elevator=noop" }}} bzw. {{{ GRUB_CMDLINE_LINUX="elevator=deadline" }}} Danach darf man nicht vergessen, die Änderungen mit folgendem Befehl zu aktivieren: {{{#!vorlage befehl sudo update-grub }}} == Sysfsutils == Hat man dagegen mehrere Festplatten bzew. einen Mix aus HDD und SSD, sollte man das Paket '''sysfsutils''' installieren und die folgende Zeile in '''/etc/sysfs.conf''' eintragen: {{{ block/sda/queue/scheduler = noop }}} Nach einem Neustart sind die Änderungen dauerhaft aktiv. == rc.local == Möchte man keine Bootoptionen setzen, kann man alternativ in einem Editor mit Rootrechten auch einen Eintrag in [:rc.local:/etc/rc.local] setzen, welche im Normalfall leer ist. Vor der Zeile {{{ exit 0 }}} trägt man ein: * Für die Option `noop`: {{{echo noop > /sys/block/sda/queue/scheduler}}} * Für die Option `deadline`: {{{echo deadline > /sys/block/sda/queue/scheduler}}} * Für die Option `cfq`: {{{echo cfq > /sys/block/sda/queue/scheduler}}} Des Weiteren kann man mit dem sogenannten fifo_batch experimentieren. Anwender berichten teilweise von einem weiteren Performance-Zuwachs. Dazu trägt man folgende Zeile ebenfalls in '''/etc/rc.local''' ein: {{{ echo 1 > /sys/block/sda/queue/iosched/fifo_batch }}} Die I/O-Requests werden dabei in „Batches“ gruppiert. Diesem Batch (sequentielle Bearbeitung von Aufgaben – siehe [wikipedia:Stapelverarbeitung:]) wird der Wert `1` zugewiesen. Dies bewirkt eine sehr niedrige Latenz und erzeugt ein „first-come-first-served“-Verhalten (siehe [wikipedia:First_In_–_First_Out:First In – First Out]) des Schedulers. = Links = * Informationen zum Scheduler: * [wikipedia_en:Completely Fair Scheduler:] * [http://www.linuxhowtos.org/System/iosched.htm linuxhowtos.org: Information on how to change the I/O scheduler at runtime] {en} * [http://blog.nexcess.net/2010/11/07/changing-your-linux-io-scheduler/ Changing Your Linux I/O Scheduler] {en} - Blogbeitrag, 11/2010 * [http://www.redhat.com/magazine/008jun05/features/schedulers/ Choosing an I/O Scheduler...] {en} - Red Hat Magazine, 06/2005 * [uf_thread:1464706:SSD benchmark of I/O schedulers] {en} - ubuntuforums.org ## * [http://kerneltrap.org/node/3851 kerneltrap.org: Linux: Modular IO Schedulers] {en} * [http://www.mjmwired.net/kernel/Documentation/block/deadline-iosched.txt#33 Deadline IO scheduler tunables] {en} - Kernel-Dokumentation zu fifo_batch * [http://everflux.de/ubuntu-desktop-tuning-mit-elevatordeadline-1681/ Ubuntu: Desktop tuning mit elevator=deadline] {de} - Blogbeitrag, 11/2010 * [https://www.thomas-krenn.com/de/wiki/Linux_I/O_Scheduler Linux I/O Scheduler] {de} - Beitrag in der ThomasKrenn Wiki #tag: Hardware, System