Okay, lassen Sie mich zunächst sagen, dass ich kein Betriebsmitarbeiter, sondern ein Entwickler bin. Also gehe ich hier in ein unbekanntes Land, also bitte ertrage es mit mir.
Ich möchte eine virtuelle Azure-Maschine zum Extrahieren einer 50-GB-XML-Datei aus einer 1,9-GB-Zip-Datei verwenden. Daher habe ich getestet, welche Instanzgröße in Azure ich verwenden sollte, um eine gute Leistung zu erzielen, ohne mehr zu bezahlen, als ich benötige.
Die Festplattenleistung von Azure-VMs war jedoch nicht erstaunlich, und ich würde gerne wissen, ob ich etwas falsch mache oder ob meine Ergebnisse den Erwartungen entsprechen.
Womit habe ich zuerst getestet? Ich habe eine benutzerdefinierte .NET-Konsolenanwendung, die nur eine Zip-Datei als Argument verwendet und sofort mit dem Extrahieren der Zip-Datei in dasselbe Verzeichnis beginnt, in dem sich die Zip-Datei befindet. Während der Extraktion berechnet die Anwendung, wie viele Megabyte Die Anwendung hat pro Sekunde in die Zieldatei geschrieben und gibt sie aus.
Auf meinem lokalen Entwicklungscomputer erhalte ich mit dieser Anwendung eine ziemlich gute Leistung, 160-210 MB / s geschrieben. Der gesamte Extraktionsvorgang dauert also ca. 8 Minuten. Die technischen Daten meines lokalen Computers sind Intel Core i7 950, 3 GHz, 4 Kerne (8 logisch), 12 GB RAM, Samsung SSD 830 Serie 250 GB.
Okay, ich habe angefangen, verschiedene Instanzgrößen zu testen, und hier sind meine Ergebnisse.
- Auf einer A4-Instanz mit Windows Server 2012 Datacenter R2 (8 Kerne, 14 GB RAM) mit einem gestreiften RAID von 4 virtuellen Festplatten unter Verwendung desselben Speicherkontos ohne Host-Caching habe ich konstant 30-35 MB / s erhalten, was das Ganze bedeutet Die Extraktion dauerte 24 Minuten und 48 Sekunden. Ich habe auch versucht, das Host-Caching zu aktivieren, aber es machte keinen wirklichen Unterschied.
- Auf einer D4-Instanz mit Windows Server 2012 Datacenter (8 Kerne, 28 GB RAM, 500 GB lokale SSD-Festplatte) habe ich in den ersten Minuten eine wirklich gute Leistung (über 150 MB / s) erzielt und dann die Leistung mit Spitzenwerten von 200 MB / s variiert. s und Täler mit 9 MB / s. Die durchschnittliche Leistung lag zwischen 70 und 100 MB / s. Die Extraktion dauerte 9 min und 40 Sekunden.
- Auf einer D3-Instanz mit Windows Server 2012 Datacenter (4 Kerne, 14 GB RAM, 250 GB lokale SSD-Festplatte) habe ich in der ersten Minute eine wirklich gute Leistung (150+ MB / s) erzielt, aber dann ging die Leistung auf konstant 20-40 MB zurück / s dauert der Extraktionsvorgang 21 Minuten und 49 Sekunden.
Auf einer D2- und D1-Instanz ist die Festplattenleistung schlechter als auf der D3.
Und das überrascht mich wirklich. Wie kann eine lokale SSD-Festplatte so schlecht funktionieren wie auf den Instanzen D1, D2 und D3? Und weiß jemand, warum die Festplattenleistung zwischen D1 und D4 so unterschiedlich ist? Ist es ein Speicherproblem? Wenn ich mir den Task-Manager anschaue, während die Extraktion läuft, explodiert die Speichernutzung. Ich vermute, es liegt daran, dass Windows die geschriebenen Daten zwischenspeichert, aber wenn der Speicher knapp wird, müssen die Daten auf die Festplatte geschrieben werden. In diesem Fall nimmt die Festplattenleistung ab. Dies geschieht jedoch nicht auf meinem lokalen Computer. Warum ist auf diesen VMs ein derart aggressives Caching erforderlich?
Ich weiß, dass es Unterschiede zwischen meinem lokalen Computer und einem in Azure gehosteten virtuellen Computer gibt, aber ist die Festplattenleistung, die ich erlebe, wirklich zu erwarten?
(Ich habe meine Frage ursprünglich auf Stackoverflow gepostet , da ich vermutete, dass meine Anwendung die Ursache war. Aber ich bin mir nicht mehr so sicher.)