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?
Nimmt der min/median/avg von mehreren Läufen von 'hdparm' eine Option? –
... 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
@ 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