Anrufe zu Sync / Fsync werden nach 30 Minuten Betriebszeit langsamer

7

Nach 30 Minuten Betriebszeit mit Ubuntu 14.04 mit einer Hybrid-SSD sehe ich viele Prozesse, die die Verwendung von E / A blockieren iotop. Dies ist während des Schreibens von Datenträgern der Fall. Wenn ich beispielsweise eine leere Datei in gedit öffne und schließe, kann das Schließen aufgrund der Einstellungen für das Schreiben von dconf 2 Sekunden dauern. Dies wirkt sich auf ähnliche Weise auf andere Apps aus. das ganze System ziemlich stark verlangsamen.

Mit strace konnte ich dies auf einen fsync-Aufruf zurückführen und von dort aus mit dem Befehl sync reproduzieren.

syncUm es noch einmal zusammenzufassen: Das wiederholte Ausführen vom Terminal aus kann in der Größenordnung von 1 bis 2 Sekunden erfolgen, jedoch NUR nach 30 Minuten Betriebszeit.

Um dies zu beweisen, habe ich ein Skript erstellt, das die Betriebszeit in Sekunden gegen die für die Ausführung der Synchronisierung benötigte Zeit ausgibt, und es jede Sekunde ausgeführt:

while true;
do
cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync;
sleep 1;
done;

Ich habe das obige Skript ausgeführt, ungefähr eine Stunde gewartet (das System wurde inaktiv gelassen) und dann die Ergebnisse in Gnuplot aufgezeichnet (y = Zeit in Sekunden, um die Synchronisierung auszuführen, x = Betriebszeit in Sekunden):

Synchronisationszeit gegen Betriebszeit aufgetragen

Der Zeitpunkt, zu dem der Graph Spitzen aufweist, liegt bei 1780 (1780/60 = ungefähr 30 Minuten).

Außer dem Skript sollte zu diesem Zeitpunkt nichts auf die Festplatte geschrieben werden. Daher sollte sich nach der ersten Synchronisierung so gut wie nichts im Seitencache befinden. Bei jeder nachfolgenden Synchronisierung wird genau das geschrieben, was in das Skript geschrieben wird. Dies entspricht ungefähr 100 Byte oder damit.

Dieses Problem besteht nach einem Neustart weiterhin. Beispiel: Wenn ich 30 Minuten auf die Verlangsamung warte und dann neu starte, ist die Verlangsamung immer noch vorhanden. Wenn ich herunterfahre und dann neu starte, verschwindet das Problem bis 30 Minuten später.

Eine weitere Kuriosität ist, dass ich, als ich das obige Diagramm untersuchte und einen Bereich vergrößerte, in dem die Verlangsamung auftritt, Folgendes bekam:

Synchronisationszeit gegen Betriebszeit aufgetragen, vergrößert

Die Spitzen und Täler wiederholen sich - dies tritt fast genau alle 10 Sekunden von Talsohle zu Talsohle auf, und auch die Spitzen knicken, wenn sie abfallen.

Ich habe auch hdparm-Tests ( hdparm -t /dev/sdaund hdparm -T /dev/sda) vor der Verlangsamung durchgeführt:

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

und während der Verlangsamung:

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

Könnte dies bedeuten, dass dies tatsächlich mit dem Systembus und nicht mit der Festplatte zu tun hat, wenn gezeigt wird, dass tatsächliche Festplattenlesevorgänge nicht ausgeführt werden, zwischengespeicherte Lesevorgänge jedoch?

Hier sind die Lösungen, die ich ausprobiert habe:

  • Ändern Sie die Spindown-Einstellungen der Festplatte. Möglicherweise wurde die Festplatte in den Energiesparmodus versetzt:

    hdparm /dev/sda -S252 #(set it to 5 hours before spindown)
    
  • Ändern Sie den Journalling-Typ des Dateisystems in "Zurückschreiben" anstatt "Bestellt", damit wir Leistungsverbesserungen erhalten. Dies löst das Problem jedoch nicht, da es die 30-minütige verlangsamungsfreie Verfügbarkeit nicht erklärt.

  • Deaktiviert CRON, da es nach ungefähr 30 Minuten auftritt.

  • Die CPU-Auslastung ist in Ordnung und vollständig im Leerlauf, sodass keine Prozesse verantwortlich gemacht werden können. Ich habe jedoch versucht, jeden Dienst einschließlich des Sitzungsmanagers (lightdm) herunterzufahren. Dies führt zu nichts, da ich glaube, dass das Problem niedriger ist.

  • Die Analyse neuer Prozesse, die nach 30 Minuten eingehen, zeigt keine Änderungen an. Ich habe die Ausgabe von PS vorher und nachher geändert, und es gibt keinen Unterschied.

Dies begann erst vor ungefähr 2 Wochen, es wurde nichts installiert und es wurden zu dieser Zeit keine Updates durchgeführt. Ich denke, dieses Problem ist viel niedriger, daher würde ich mich über eine Hilfe hier sehr freuen, da ich keine Ahnung habe. Es wäre hilfreich, mich in die richtige Richtung zu weisen. Gibt es beispielsweise eine Möglichkeit zu untersuchen, was aus dem Seiten-Cache gelöscht wird?

Das Schreib-Caching ist auf der betreffenden Festplatte aktiviert. Ich habe auch versucht, Schreibbarrieren zu deaktivieren. SMART-Daten auf der Festplatte weisen auf keine Probleme mit der Festplatte selbst hin. Ich habe jedoch den Verdacht, dass die Festplatte etwas Geheimnisvolles tut, da sie nach dem Neustart weiterhin besteht.

BEARBEITEN:

Ich habe getan:

watch -n 1 cat /proc/meminfo

... um zu sehen, wie sich der Speicher ändert, insbesondere wenn man die schmutzige Zeile und die Rückschreibzeile betrachtet, von denen ich glaube, dass sie der Festplattenpuffer der Festplatte sind. Sie alle bleiben größtenteils bei Null und sind wahrscheinlich 300 kb. Durch das Aufrufen der Synchronisierung werden diese wie erwartet auf 0 zurückgesetzt, aber während der Verlangsamung sperrt das Aufrufen der Synchronisierung, wenn keine fehlerhaften Seiten und keine KB im Festplattenpuffer vorhanden sind, weiterhin E / A. Was könnte die Synchronisierung noch tun, wenn der Seiten-Cache nicht geleert und der Cache geschrieben werden kann?

alex.p
quelle
Welche Dateisysteme verwenden Sie?
Peterph
ext4, Eintrag in fstab: / dev / mapper / ubuntu-root / ext4-Fehler = remount-ro 0 1
alex.p
Sie können ein versuchen warmes uptime Boot nach 15 Minuten. Oder lassen Sie das System 15 Minuten lang auf dem Startbildschirm oder pausieren Sie während des Startvorgangs, während sich die Festplatte dreht, bevor Sie den Startvorgang abschließen. Wenn die nächste Spitze nach weiteren 15 Minuten liegt, ist dies die Festplatte. Wenn es nach 30 vollen Minuten nach Abschluss des Startvorgangs ist, liegt dies am Betriebssystem ( abgesehen von einem seltsamen magischen Festplatten-Timer beim Start des Betriebssystems ).
LSerni
Vielen Dank für die Vorschläge, das Laufwerk ist verschlüsselt und ich habe bis zu dem Punkt gebootet, an dem das Laufwerk als verschlüsseltes Gerät bereitgestellt wird, und es an der Kennwortabfrage belassen und nach 15 Minuten gestartet. Ich denke, dies hätte den gleichen Effekt wie von Ihnen vorgeschlagen und es dauert nur 15 Minuten, um den gleichen Effekt nach dem Mounten zu erzielen. Daher stimme ich Ihnen zu, dass es sich um ein mögliches HD-Problem handelt, obwohl ich vermute, dass ein Teil des Kernels vorhanden ist ist auch an diesem Punkt am Leben.
alex.p
2
@KjetilJorgensen du hast es gelöst! Oder mich zumindest auf die Antwort verwiesen. Das Problem schien darauf zurückzuführen zu sein, dass SMART-Daten für die Festplatte aktiviert wurden. Durch Ausschalten wurde sudo smartctl --smart=off /dev/sdadas Problem behoben. Interessanterweise habe ich SMART-Daten wieder eingeschaltet und das Problem besteht nicht weiter. Daher kann ich nur davon ausgehen, dass sich die SMART-Daten in einem inkonsistenten Zustand befanden, und sie durch Aus- und Einschalten zurücksetzen. Wenn Sie es als Antwort hinzufügen, akzeptiere ich Ihre Antwort. Vielen Dank für die Hilfe sehr geschätzt.
Alex.p

Antworten:

3

Die Symptome stimmen sehr gut mit einem größtenteils gesättigten E / A-System überein. Da jedoch die E / A-Belastung von der Seite des Betriebssystems / des Benutzerbereichs größtenteils ausgeschlossen ist, besteht eine weitere Möglichkeit darin, dass das Laufwerk Selbsttests für sich selbst ausführt, einschließlich des Lesens aus allen Sektoren. Dies sollte von smartctl abfragbar / abstimmbar sein (mindestens eine Stelle ist smartctl -c zum Abfragen).

Warum es jetzt kommt und geht und plötzlich beginnt:

  • Das Laufwerk hat eine bestimmte Phase seines Lebens durchlaufen (Anzahl der geschriebenen Sektoren, Zeitaufwand usw.), und die Firmware auf dem Laufwerk hat einen dieser Scans ausgelöst
  • Ich glaube, dass dies auch über smartctl ausgelöst werden kann, so dass es möglich ist, dass ein automatisierter Prozess es ausgelöst hat
  • Wenn einer dieser Scans ausgelöst und als aktiv oder gestartet markiert wird und das Laufwerk eine bestimmte Zeit lang eingeschaltet war, wird es entweder von Anfang an erneut ausgelöst oder dort fortgesetzt, wo es aufgehört hat
Kjetil Jorgensen
quelle