2016-10-18 6 views
5

In einem Python-Programm muss ich die kumulierten Lese-/Schreibgeschwindigkeiten aller Festplatten auf dem Host erhalten. Ich war es mit subprocess.check_output() tun die folgenden Linux-Shell-Befehl aufzurufen:Wie bekomme ich Diskettengeschwindigkeit in Python?

$ sudo hdparm -t /dev/sda 

Dies gibt als Ergebnis:

/dev/sda: 
Timing buffered disk reads: 1488 MB in 3.00 seconds = 495.55 MB/sec 

dann kann ich die 495,55 analysieren. OK, soweit so gut.

Aber auf der man-Seite von hdparm fand ich diese Erklärung für die -t Flag, dass im Grunde sagt, wann sollten Messungen kein anderer Prozess durchführen Lesen/Schreiben zur gleichen Zeit auf der Festplatte:

Perform Timings von Gerät liest zu Benchmark- und Vergleichszwecken. Für aussagekräftige Ergebnisse sollte diese Operation 2-3 Mal auf einem ansonsten inaktiven System (keine anderen aktiven Prozesse) mit mindestens ein paar Megabyte freiem Speicher wiederholt werden. Dies zeigt die Geschwindigkeit des Lesens durch den Puffercache auf der Festplatte ohne vorheriges Zwischenspeichern von Daten an. Diese Messung zeigt an, wie schnell das Laufwerk sequenzielle Datenlesevorgänge unter Linux ohne Dateisystem-Overhead ausführen kann. Um genaue Messungen sicherzustellen, wird der Puffer-Cache während der Verarbeitung von -t unter Verwendung des BLKFLSBUF ioctl gelöscht.

Die Frage ist:

Wie kann ich sicherstellen, dass kein anderer Prozess ist zugleich Zugriff auf Datenträger, wenn Messungen durchgeführt werden?

+0

Nimmt der min/median/avg von mehreren Läufen von 'hdparm' eine Option? –

+2

... können Sie nicht? Wenn der Benutzer andere Prozesse ausführt, können Sie diese nicht einfach löschen. Außerdem: Jedes Betriebssystem hat * immer * einige deamon-Prozesse, die regelmäßig etwas tun, auch wenn dies keinen Plattenzugriff erfordert ... – Bakuriu

+0

@ M.T: das scheint eine gute Option zu sein. Ich dachte darüber nach, aber ich hoffte auf einen anderen Weg, um den Wert zu bekommen. – RichArt

Antwort

3

Gemäß https://unix.stackexchange.com/questions/55212/how-can-i-monitor-disk-io enthält die am meisten verwendbare Lösung das Tool sysstat oder iostat (dasselbe Paket).

Aber ernsthaft, da Sie sudo-Berechtigungen auf dem Host haben, können Sie selbst überprüfen, ob IO-intensive Aufgaben mit einem der gängigen Systemüberwachungstools ausgeführt werden. Sie können nicht alle IO effektiv töten, ohne dass Ihre Messungen auch verrückt werden. Über einen längeren Zeitraum sollten die Messungen dennoch zu vernünftigen Ergebnissen führen, da die Abweichungen zu stabilen Hintergrundgeräuschen konvergieren.

Abgesehen davon, wofür würden Sie künstliche Messungen benötigen? Wenn Sie nur die Hardwarefunktionen ohne RL-Kontext testen möchten, installieren Sie nicht die Festplatte und testen Sie sie im Binärmodus. Eine Messung, während der reale Verkehr stattfindet, liefert normalerweise Ergebnisse, die näher an dem sind, was Sie tatsächlich zu Ladezeiten erwarten können.

+0

Vielen Dank für Ihre Antwort. Nach ein paar Tests mit 'sar' und' iostats' glaube ich nicht, dass ich danach suche. Oder zumindest ist es nicht besser als "hdparm", weil "hdparm" als Ausgabe den Wert gibt, den ich aus der Ausgabe von "sar" oder "iostats" berechnen müsste. Ich meine die MB/Sek ist der richtige Wert. Aber ich wollte es so unvoreingenommen wie möglich haben. Die künstliche Messung wird benötigt, weil ich eine "theoretische" Basis für weitere Berechnungen brauche. – RichArt

Verwandte Themen