Problem
Ich habe kürzlich Ubuntu 16.04 LTS (Kernel 4.8.0-52) auf einem Lenovo T460p mit einem i7-6820HQ, 32 GB RAM und einer 512 GB Micron 1100 SSD installiert. Ich habe während der Installation das Kontrollkästchen für die vollständige Festplattenverschlüsselung aktiviert und das Standard-Partitionierungslayout verwendet. Im Allgemeinen ist die Leistung großartig.
Im Laufe der Zeit liefen meine Builds jedoch ungefähr doppelt so lange. Während Teilen des Builds, in denen große Dateien geschrieben werden, muss jede (nicht erstellte) Aufgabe, die Festplatten-E / A erfordert, viel warten. Dazu gehört das Starten neuer Programme, das Laden von Seiten in Firefox usw. In Firefox kann ich beispielsweise durch die Benutzeroberfläche navigieren, die Registerkarten wechseln und alles ist in Ordnung. Wenn ich jedoch einem Link folge, wird die gesamte Benutzeroberfläche gesperrt, bis sich die Dinge beruhigt haben.
Zusammenfassend lässt sich sagen, dass Builds nach einiger Zeit plötzlich länger dauern und der Computer an bestimmten Stellen während des Builds grundsätzlich unbrauchbar ist.
Was kann ich tun, um dieses Problem zu diagnostizieren oder zu beheben?
Informationen zur Fehlerbehebung
Starten Sie nicht oft neu, damit das System oft mehrere Tage in Betrieb ist, bevor ich auf dieses Problem stoße. Sobald ich es getroffen habe, versuche ich ein wenig, das Problem herauszufinden, und starte dann neu, damit ich weiterarbeiten kann.
Das einzige, was das Problem behebt, ist ein Neustart des Computers. Ich habe versucht, alle Anwendungen zu beenden, mich abzumelden und wieder anzumelden und den Puffercache zu löschen (die Dreschflegel-Theorie, dass bei der Verwendung von Speicherplatz-Festplatten-Synchronisierungen häufiger vorkommt), aber nur ein Neustart funktioniert.
Bei weitem habe ich versucht, diese Antwort zu lösen, aber es gab keine Verhaltensänderung.
Beim Ausführen
iotop
wird derdmcrypt_write
Thread mit 99% E / A angezeigt, wenn Probleme auftreten. Wenn ich nicht das Problem auftritt, sehe ich auchdmcrypt_write
mit einem relativ hohen IO% an die Spitze Pop , aber es bleibt nicht sehr lange dort.Wenn ich renne,
dd if=/dev/urandom of=$HOME/bigfile bs=10k count=200k; sync
wenn die Dinge normal funktionieren,dmcrypt_write
springe ich für ein oder zwei Sekunden nach oben, aber es ist nicht annähernd die gleiche Dauer wie bei einem meiner Builds.Ein vollständiger Build generiert ungefähr 1,4 GB Daten. Es ist ein Java-Projekt mit mehreren Modulen. Es werden also viele kleine Dateien sowie einige größere JAR-Dateien erstellt, die all diese kleinen Dateien zusammenfassen.
Es ist immer genügend Speicher verfügbar und die Swap-Partition wird nicht verwendet.
Ich habe Mitarbeiter mit ähnlichen Computern (T460p), auf denen auch Ubuntu ausgeführt wird und bei denen dieses Problem nicht auftritt. Sie alle scheinen jedoch unterschiedliche SSD-Marken / -Modelle zu haben .
Aktualisieren
Das Problem ist gerade wieder aufgetaucht, also habe ich basierend auf der Antwort auf diese Frage weitere Tests durchgeführt.
- Das Dateisystem ist immer noch nicht mit der
discard
Option gemountet, daher habe ich stattdessenfstrim
angenommen, dass dies der Aktivierung derdiscard
Option etwas ähnlich wäre - Ich habe nicht genug Zeit genommen, als das Problem zum ersten Mal auftrat, aber nach dem Ausführen
fstrim
schienen die Build-Geschwindigkeiten wieder normal zu sein ... aber nach Abschluss des Builds wird derdmcrypt_write
Thread aktiviert und macht das System für einen bestimmten Zeitraum unbrauchbar. Die gesamte Zeit zum Erstellen und zur Nutzung des Systems scheint ungefähr dieselbe zu sein wie zuvor. - Ich habe
/proc/sys/vm/dirty_ratio
auf 2 und/proc/sys/vm/dirty_background_ratio
1 gewechselt und einige Builds ausgeführt. Die Builds dauerten länger als normal - ungefähr so lange wie beim letzten Mal, als ich auf dieses Problem stieß, aber das System schien nicht so stark zu blockieren. Durch Zurücksetzen auf 20 und 10 wurde das oben erwähnte Verhalten wiederhergestellt. - Bei einem sauberen Start habe ich versucht,
/proc/sys/vm/dirty_ratio
auf 2 und/proc/sys/vm/dirty_background_ratio
1 zu setzen, und die Zeit war vergleichbar mit 20 und 10.
quelle
echo 1 | sudo tee /proc/sys/vm/dirty_background_ratio && echo 2 | sudo tee /proc/sys/vm/dirty_ratio
die Systemlast von unbrauchbaren 30+ auf etwa 13-14 reduziert, ohne über einen längeren Zeitraum zu blockieren.