Starke Schreibaktivitäten auf der SSD beeinträchtigen die Systemleistung

13

Mir ist aufgefallen, dass bei umfangreichen Schreibanwendungen das gesamte System langsamer wird. Um dies weiter zu testen, habe ich dies ausgeführt, um eine (relativ) CPU-arme, hohe Festplattenaktivität durchzuführen:

john -incremental > file_on_SSD

Dadurch werden zehntausende Zeichenfolgen pro Sekunde in eine Datei auf meiner Systemfestplatte gepumpt.

Wenn dies geschieht, bleibt die Maus hängen, TTYs reagieren nicht mehr, Anwendungen "verblassen" und im Allgemeinen wird der gesamte Computer unbrauchbar. Wenn ich schließlich Control + C kann john, kehrt das System nach einigen Sekunden zu voller Stärke zurück.

Dies ist ein extremes Beispiel, aber ich habe ähnliche Probleme mit etwas weniger schreibintensiven Aktivitäten wie dem Kopieren großer Dateien aus schnellen Quellen oder dem Transcodieren.

Meine Hauptfestplatte ist eine recht schnelle SSD ( OCZ Agility 60GB ) mit EXT4. Wenn ich die johnAusgabe mit EXT4 auf eine mechanische Platte schreibe, treten bei mir nicht die gleichen Verlangsamungen auf, obwohl die Rate viel langsamer ist (SSD macht ~ 42.000 Wörter pro Sekunde, mechanische 8.000 W / s). Der Durchsatz kann relevant sein. Die mechanische Scheibe hat auch nichts mit dem System zu tun. Es sind nur Daten.

Und ich verwende Kernel 2.6.35-2, aber ich habe dieses Problem bemerkt, da ich diese SSD bekam, als ich wahrscheinlich .31 oder etwas aus dieser Zeit verwendete.

Was ist der Grund für die Verlangsamung? EXT4 Problem? Kernel-Problem? SSD-Problem? Alles das oben Genannte? Etwas anderes?

Wenn Sie der Meinung sind, dass ich einen zusätzlichen Test durchführen muss, schreiben Sie einfach einen Kommentar und sagen Sie mir, was ich tun soll, und ich werde das Ergebnis an die Frage anhängen.

Oli
quelle
Vielleicht sollten Sie auch erwähnen, welche SSD Sie verwenden. Nicht alle SSDs sind gleich.
Cristian Ciupitu
@Cristian: Hinzugefügt. Es ist eine OCZ-Beweglichkeit.
Oli

Antworten:

12

Dies ist seit einiger Zeit ein bekanntes Problem. Die Verwendung eines SSD-optimierten FS wie Btrfs kann hilfreich sein, jedoch nicht.

Letztendlich handelt es sich um einen Fehler in den IO-Scheduler- / Speicherverwaltungssystemen. Vor kurzem gab es einige Patches, die dieses Problem beheben sollen. Siehe Behoben: Das Linux-Desktop-Reaktionsfähigkeitsproblem?

Diese Patches werden möglicherweise irgendwann in den Mainline-Kernel gelangen, aber im Moment müssen Sie wahrscheinlich Ihren eigenen Kernel kompilieren, um dieses Problem zu beheben.

Zifre
quelle
2
Wenn ich das richtig verstehe, sollten die Patches dafür in Linux 2.6.37 sein .
28.
1

Es gibt einige Dinge, die Sie überprüfen können, um die SSD-Leistung unter Linux zu verbessern.

  1. Setzen Sie den Einhängepunkt auf 'noatime'. Zusätzliche Aktivitätsaktualisierungszugriffszeiten werden in der Regel in den meisten Anwendungsfällen verschwendet. Insbesondere wenn Sie kontinuierlich einzelne Zeilen in eine Datei pumpen, erzwingen Sie bei jedem Zugriff mehrere Aktualisierungen des Dateisystems.

  2. Überprüfen Sie den Aufzug. Der Standardaufzug für die meisten Distributionen ist für zufallsgesteuerte Spinnplattformen eingerichtet. Für SSDs ist keine zusätzliche Logik erforderlich. Wenn Sie also den Aufzug auf noop einstellen, kann die Leistung verbessert werden, indem die Hardware die Schreibvorgänge verwaltet.

  3. Write-through-V-Write-Back-Caching. Dies ist etwas esoterischer, aber Sie können die hdparmfür das Gerät verwendete Caching-Methode überprüfen . Das Write-Back-Caching kann sich im Vergleich zum Write-Through positiv auf die SSD-Leistung auswirken.

nzwulfin
quelle
Könnten Sie @nzwulfin etwas mehr über das Einstellen von Aufzügen schreiben?
Grzegorz Wierzowiecki
Es scheint, dass die SSD-Leistung in Ordnung war. Es ist der ganze Rest, der leidet.
Thorbjørn Ravn Andersen
0

Ihr Datei-Caching ist wahrscheinlich falsch auf Ihre Arbeitslast abgestimmt. Leider ist der Linux-Kernel so dumm, dies nicht automatisch zu handhaben, und die Standardeinstellungen sind ziemlich schlecht, wenn Sie über viel RAM verfügen und genügend langsame Blockgeräte verwenden. Weitere Informationen finden Sie unter https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ .

Ich würde vorschlagen, /etc/sysctl.confentweder zu ändern

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

um den RAM-Druck, der durch das Schreib-Caching verursacht wird, stark zu reduzieren, damit der Kernel andere Aufgaben besser erledigen kann. Dadurch wird eine verbesserte Latenz für einen geringeren Durchsatz eingetauscht.

Eine andere Möglichkeit besteht darin, das Zwischenspeichern zu erhöhen. Wenn Ihr Prozess jedoch die ganze Zeit über ständig neue Daten schreibt, tritt eine sehr schlechte Latenz auf, wenn der Cache jemals voll wird. Wenn Sie es versuchen möchten, können Sie so etwas tun

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

Beachten Sie, dass sich die *_ratioEinstellungen auf den Prozentsatz des verfügbaren Arbeitsspeichers beziehen. Wenn Sie eine bessere Kontrolle wünschen, verwenden Sie die *_bytesEinstellungen. Ich persönlich verwende folgende Konfiguration für meine Workstation:

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

Dies begrenzt den Cache für Hintergrundschreibvorgänge auf 50 MB und erzwingt synchrones Schreiben, wenn sich 200 MB im Cache befinden.

Mikko Rantalainen
quelle