W programie w języku Python potrzebuję uzyskać skumulowaną prędkość odczytu/zapisu wszystkich dysków na hoście. Robiłem to z subprocess.check_output()
wywołać następujące polecenia Linux:Jak uzyskać prędkość odczytu/zapisu dysku w języku Python?
$ sudo hdparm -t /dev/sda
To daje w wyniku:
/dev/sda:
Timing buffered disk reads: 1488 MB in 3.00 seconds = 495.55 MB/sec
wtedy mogę analizować 495.55. OK, na razie tak dobrze.
Ale na stronę man hdparm
Znalazłem to wyjaśnienie flaga -t
że w zasadzie mówi, że przy wykonywaniu pomiarów żaden inny proces powinien odczytu/zapisu na dysku w tym samym czasie:
Dokonuj pomiarów czasu urządzenie odczytuje do celów porównawczych i testów porównawczych. Aby uzyskać znaczące wyniki, operację tę należy powtórzyć 2-3 razy w przypadku nieaktywnego systemu (żadnych innych aktywnych procesów) z co najmniej kilkoma megabajtami wolnej pamięci. Wyświetla szybkość odczytu bufora bufora na dysk bez wcześniejszego buforowania danych. Pomiar ten wskazuje, jak szybko dysk może utrzymać sekwencyjne odczyty danych pod Linuksem, bez żadnych narzutów systemu plików. Aby zapewnić dokładne pomiary, pamięć podręczna bufora jest przepłukiwana podczas przetwarzania -t przy użyciu ioctl BLKFLSBUF.
Pytanie jest:
Skąd mogę mieć pewność, że żaden inny proces uzyskiwania dostępu do dysku w tym samym czasie, gdy pomiary są wykonywane?
Czy przyjmuje min/median/średnicę kilku przebiegów opcji 'hdparm' an? –
... nie możesz? Jeśli użytkownik uruchamia inne procesy, nie można ich po prostu zabić. Ponadto: każdy system operacyjny ma * zawsze * kilka procesów deamonicznych, które cyklicznie coś robią, nawet jeśli nie wymaga to dostępu do dysku ... – Bakuriu
@ M.T: To szwy są dobrym rozwiązaniem. Myślałem o tym, ale liczyłem na inny sposób na zdobycie tej wartości. – RichArt