Ich bin ratlos und hoffe, dass jemand anderes die Symptome dieses Problems erkennt.
Hardware: neuer Dell T110 II, Dual-Core-Pentium G850 mit 2,9 GHz, integrierter SATA-Controller, eine neue kabelgebundene Festplatte mit 500 GB und 7200 U / min in der Box, andere Laufwerke im Inneren, aber noch nicht montiert. Kein RAID. Software: Neue virtuelle CentOS 6.5-Maschine unter VMware ESXi 5.5.0 (Build 1746018) + vSphere Client. 2,5 GB RAM zugewiesen. Auf der Festplatte hat CentOS angeboten, sie einzurichten, und zwar als Volume innerhalb einer LVM-Volume-Gruppe, mit der Ausnahme, dass ich auf ein separates / home verzichtet habe und einfach / und / boot habe. CentOS ist gepatcht, ESXi gepatcht, die neuesten VMware-Tools sind auf der VM installiert. Keine Benutzer im System, keine laufenden Dienste, keine Dateien auf der Festplatte, sondern die Installation des Betriebssystems. Ich interagiere mit der VM über die virtuelle VM-Konsole in vSphere Client.
Bevor ich fortfuhr, wollte ich überprüfen, ob ich die Dinge mehr oder weniger vernünftig konfiguriert habe. Ich habe den folgenden Befehl als root in einer Shell auf der VM ausgeführt:
for i in 1 2 3 4 5 6 7 8 9 10; do
dd if=/dev/zero of=/test.img bs=8k count=256k conv=fdatasync
done
Dh, wiederholen Sie einfach den Befehl dd 10 Mal, was dazu führt, dass die Übertragungsrate jedes Mal gedruckt wird. Die Ergebnisse sind beunruhigend. Es fängt gut an:
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 20.451 s, 105 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 20.4202 s, 105 MB/s
...
aber nach 7-8 davon wird es dann gedruckt
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GG) copied, 82.9779 s, 25.9 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 84.0396 s, 25.6 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 103.42 s, 20.8 MB/s
Wenn ich längere Zeit warte, z. B. 30-45 Minuten, und es erneut ausführe, geht es wieder auf 105 MB / s zurück und nach mehreren Runden (manchmal ein paar, manchmal 10+) sinkt es auf ~ 20- Wieder 25 MB / s.
Aufgrund der vorläufigen Suche nach möglichen Ursachen, insbesondere VMware KB 2011861 , habe ich den Linux- E / A-Scheduler auf " noop
" anstatt auf "Standard " geändert . cat /sys/block/sda/queue/scheduler
zeigt, dass es in Kraft ist. Ich kann jedoch nicht sehen, dass es einen Unterschied in diesem Verhalten gemacht hat.
Wenn Sie die Festplattenlatenz in der vSphere-Benutzeroberfläche darstellen, werden Zeiträume mit hoher Festplattenlatenz angezeigt, die während der Zeiten, in denen der niedrige Durchsatz gemeldet wird, 1,2 bis 1,5 Sekunden betragen dd
. (Und ja, die Dinge reagieren ziemlich unempfindlich, während das passiert.)
Was könnte das verursachen?
Ich bin mir sicher, dass dies nicht auf einen Ausfall der Festplatte zurückzuführen ist, da ich auch zwei andere Festplatten als zusätzliches Volume im selben System konfiguriert habe. Zuerst dachte ich, ich hätte etwas mit diesem Volume falsch gemacht, aber nachdem ich das Volume aus / etc / fstab auskommentiert und neu gestartet und die Tests auf / wie oben gezeigt ausprobiert hatte, wurde klar, dass das Problem anderswo liegt. Es ist wahrscheinlich ein ESXi-Konfigurationsproblem, aber ich bin nicht sehr erfahren mit ESXi. Es ist wahrscheinlich etwas Dummes, aber nachdem ich versucht habe, dies über mehrere Tage hinweg viele Stunden lang herauszufinden, kann ich das Problem nicht finden, also hoffe ich, dass mich jemand in die richtige Richtung weisen kann.
(PS: Ja, ich weiß, dass diese Hardware-Kombination als Server keine Geschwindigkeitsprämien gewinnt, und ich habe Gründe, diese Low-End-Hardware zu verwenden und eine einzelne VM auszuführen, aber ich denke, das ist nicht der Punkt für diese Frage [es sei denn es ist eigentlich ein Hardwareproblem].)
ADDENDUM 1 : Beim Lesen anderer Antworten wie dieser habe ich versucht, sie oflag=direct
zu ergänzendd
. Es macht jedoch keinen Unterschied im Ergebnismuster: Anfangs sind die Zahlen für viele Runden höher, dann fallen sie auf 20-25 MB / s. (Die anfänglichen absoluten Zahlen liegen im Bereich von 50 MB / s.)
ADDENDUM 2 : Das Hinzufügen sync ; echo 3 > /proc/sys/vm/drop_caches
zur Schleife macht überhaupt keinen Unterschied.
ADDENDUM 3 : Um weitere Variablen herauszunehmen, führe ich sie jetzt dd
so aus, dass die von ihr erstellte Datei größer ist als der RAM-Speicher auf dem System. Der neue Befehl lautet dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct
. Die anfänglichen Durchsatzzahlen bei dieser Version des Befehls betragen ~ 50 MB / s. Sie fallen auf 20-25 MB / s, wenn die Dinge nach Süden gehen.
ADDENDUM # 4 : Hier ist die Ausgabe der iostat -d -m -x 1
Ausführung in einem anderen Terminalfenster, während die Leistung "gut" ist, und dann wieder, wenn sie "schlecht" ist. (Während das läuft, renne ich dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct
.) Erstens, wenn die Dinge "gut" sind, zeigt es Folgendes:
Wenn die Dinge "schlecht" laufen, iostat -d -m -x 1
zeigt dies:
ADDENDUM # 5 : Auf Vorschlag von @ewwhite habe ich versucht, tuned
mit verschiedenen Profilen zu arbeiten und habe es auch versucht iozone
. In diesem Anhang berichte ich über die Ergebnisse von Experimenten, bei denen untersucht wurde, ob unterschiedliche tuned
Profile Auswirkungen auf das dd
oben beschriebene Verhalten hatten. Ich habe versucht , das Profil zu ändern zu virtual-guest
, latency-performance
und throughput-performance
, halten alles andere gleich, nach jeder Änderung neu zu starten, und dann jedes Mal ausgeführt wird dd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct
. Es hatte keinen Einfluss auf das Verhalten: Nach wie vor laufen die Dinge gut an und viele wiederholte Läufe dd
zeigen die gleiche Leistung, aber irgendwann nach 10-40 Läufen sinkt die Leistung um die Hälfte. Als nächstes habe ich verwendet iozone
. Diese Ergebnisse sind umfangreicher, daher füge ich sie als Anhang Nr. 6 unten ein.
ADDENDUM 6 : Auf Vorschlag von @ewwhite habe ich die Leistung installiert und iozone
zum Testen verwendet. Ich habe es unter verschiedenen tuned
Profilen ausgeführt und einen sehr großen Parameter für die maximale Dateigröße (4G) verwendet iozone
. (Der VM sind 2,5 GB RAM zugewiesen, und dem Host sind insgesamt 4 GB zugeordnet.) Diese Testläufe dauerten einige Zeit. FWIW, die Rohdatendateien sind unter den folgenden Links verfügbar. In allen Fällen lautete der Befehl zum Erstellen der Dateien iozone -g 4G -Rab filename
.
- Profil
latency-performance
:- Rohergebnisse: http://cl.ly/0o043W442W2r
- Excel-Tabelle (OSX-Version) mit Plots: http://cl.ly/2M3r0U2z3b22
- Profil
enterprise-storage
:- Rohergebnisse: http://cl.ly/333U002p2R1n
- Excel-Tabelle (OSX-Version) mit Plots: http://cl.ly/3j0T2B1l0P46
Das Folgende ist meine Zusammenfassung.
In einigen Fällen habe ich nach einem vorherigen Lauf neu gestartet, in anderen Fällen nicht und einfach iozone
erneut ausgeführt, nachdem ich das Profil mit geändert habe tuned
. Dies schien keinen offensichtlichen Unterschied zu den Gesamtergebnissen zu machen.
Unterschiedliche tuned
Profile schienen sich nicht (zu meinem zugegebenermaßen unerfahrenen Augen) , um die beeinflussen breite Verhalten berichtet iozone
, obwohl die Profile bestimmte Details beeinträchtigen. Erstens, nicht überraschend, haben einige Profile den Schwellenwert geändert, bei dem die Leistung beim Schreiben sehr großer Dateien abfiel: Wenn Sie die iozone
Ergebnisse zeichnen , sehen Sie eine steile Klippe bei 0,5 GB für das Profil, latency-performance
aber dieser Abfall manifestiert sich bei 1 GB unter dem Profilenterprise-storage
. Zweitens, obwohl alle Profile eine seltsame Variabilität für Kombinationen aus kleinen Dateigrößen und kleinen Datensatzgrößen aufweisen, unterschied sich das genaue Variabilitätsmuster zwischen den Profilen. Mit anderen Worten, in den unten gezeigten Darstellungen existiert das schroffe Muster auf der linken Seite für alle Profile, aber die Positionen der Gruben und ihre Tiefen sind in den verschiedenen Profilen unterschiedlich. (Ich habe jedoch nicht Läufe mit denselben Profilen wiederholt, um festzustellen, ob sich das Variabilitätsmuster zwischen Läufen mit iozone
demselben Profil merklich ändert. Daher ist es möglich, dass Unterschiede zwischen Profilen nur zufällige Variabilität sind.)
Das Folgende sind Oberflächendiagramme der verschiedenen iozone
Tests für das tuned
Profil von latency-performance
. Die Beschreibungen der Tests werden aus der Dokumentation für kopiert iozone
.
Lesetest : Dieser Test misst die Leistung beim Lesen einer vorhandenen Datei.
Schreibtest: Dieser Test misst die Leistung beim Schreiben einer neuen Datei.
Zufälliges Lesen: Dieser Test misst die Leistung beim Lesen einer Datei, wobei auf zufällige Speicherorte in der Datei zugegriffen wird.
Zufälliges Schreiben: Dieser Test misst die Leistung beim Schreiben einer Datei, wobei auf zufällige Speicherorte in der Datei zugegriffen wird.
Fread: Dieser Test misst die Leistung beim Lesen einer Datei mit der Bibliotheksfunktion fread (). Dies ist eine Bibliotheksroutine, die gepufferte und blockierte Lesevorgänge ausführt. Der Puffer befindet sich im Adressraum des Benutzers. Wenn eine Anwendung sehr kleine Übertragungen einliest, kann die gepufferte und blockierte E / A-Funktionalität von fread () die Leistung der Anwendung verbessern, indem die Anzahl der tatsächlichen Betriebssystemaufrufe verringert und die Größe der Übertragungen beim Betriebssystem erhöht wird Anrufe werden getätigt.
Fwrite: Dieser Test misst die Leistung beim Schreiben einer Datei mit der Bibliotheksfunktion fwrite (). Dies ist eine Bibliotheksroutine, die gepufferte Schreibvorgänge ausführt. Der Puffer befindet sich im Adressraum des Benutzers. Wenn eine Anwendung in sehr kleinen Übertragungen schreibt, kann die gepufferte und blockierte E / A-Funktionalität von fwrite () die Leistung der Anwendung verbessern, indem die Anzahl der tatsächlichen Betriebssystemaufrufe verringert und die Größe der Übertragungen unter Betriebssystem erhöht wird Anrufe werden getätigt. Bei diesem Test wird eine neue Datei geschrieben, sodass der Overhead der Metadaten erneut in die Messung einbezogen wird.
Während dieser Zeit iozone
habe ich schließlich auch die Leistungsdiagramme für die VM in der Client-Oberfläche von vSphere 5 untersucht. Ich wechselte zwischen den Echtzeitdiagrammen der virtuellen Festplatte und dem Datenspeicher hin und her. Die verfügbaren Plotparameter für den Datenspeicher waren größer als für die virtuelle Festplatte, und die Leistungsdiagramme für den Datenspeicher schienen die Funktionsweise der Diagramme für Festplatte und virtuelle Festplatte widerzuspiegeln. Daher füge ich hier nur eine Momentaufnahme des Datenspeicherdiagramms bei, das nach iozone
Abschluss (unter tuned
Profil) erstellt wurde latency-performance
). Die Farben sind etwas schwer zu lesen, aber was vielleicht am bemerkenswertesten ist, sind die scharfen vertikalen Spitzen beim LesenLatenz (z. B. um 4:25 Uhr, dann wieder kurz nach 4:30 Uhr und erneut zwischen 4: 50-4: 55 Uhr). Hinweis: Der Plot ist nicht lesbar, wenn er hier eingebettet ist. Daher habe ich ihn auch auf http://cl.ly/image/0w2m1z2T1z2b hochgeladen
Ich muss zugeben, ich weiß nicht, was ich davon halten soll. Ich verstehe besonders die seltsamen Schlaglochprofile in den Bereichen mit kleinen Datensätzen und kleinen Dateigrößen der iozone
Diagramme nicht.
iostat
und es zeigte eine Auslastung von ~ 90% sowohl vorher als auch nachher. Aber ich bin kein Experte für die Beurteilung dieser Dinge - vielleicht passiert irgendwo eine Sättigung. Ich aktualisiere meine Frage, um die iostat
Ausgabe anzuzeigen, falls sie nützlich ist.