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 john
Ausgabe 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.
quelle
Antworten:
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.
quelle
Es gibt einige Dinge, die Sie überprüfen können, um die SSD-Leistung unter Linux zu verbessern.
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.
Ü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.
Write-through-V-Write-Back-Caching. Dies ist etwas esoterischer, aber Sie können die
hdparm
fü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.quelle
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.conf
entweder zu ändernum 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
Beachten Sie, dass sich die
*_ratio
Einstellungen auf den Prozentsatz des verfügbaren Arbeitsspeichers beziehen. Wenn Sie eine bessere Kontrolle wünschen, verwenden Sie die*_bytes
Einstellungen. Ich persönlich verwende folgende Konfiguration für meine Workstation:Dies begrenzt den Cache für Hintergrundschreibvorgänge auf 50 MB und erzwingt synchrones Schreiben, wenn sich 200 MB im Cache befinden.
quelle