2016-10-18 16 views
5

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?

+0

Czy przyjmuje min/median/średnicę kilku przebiegów opcji 'hdparm' an? –

+2

... 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

+0

@ 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

Odpowiedz

3

Zgodnie z https://unix.stackexchange.com/questions/55212/how-can-i-monitor-disk-io najbardziej użyteczne rozwiązanie zawiera narzędzie sysstat lub iostat (ten sam pakiet).

Ale poważnie, ponieważ masz uprawnienia sudo na hoście, możesz sprawdzić, czy intensywne zadania IO odbywają się za pomocą popularnych narzędzi do monitorowania systemu. Nie możesz zabić wszystkich IO efektywnie bez twoich pomiarów również oszalałych. Przez dłuższy czas pomiary powinny jednak dawać rozsądne wyniki, ponieważ odchylenia zbiegają się w kierunku stabilnego szumu tła.

Oprócz tego, do czego potrzebne są sztuczne pomiary? Jeśli chcesz przetestować możliwości sprzętowe bez kontekstu RL, nie podłączaj dysku i nie testuj go w trybie binarnym. Pomiar podczas prawdziwego ruchu zazwyczaj daje wyniki, które są bliższe temu, czego można się spodziewać w czasie ładowania.

+0

Dziękuję za odpowiedź. Po wykonaniu kilku testów z 'sar' i' iostats' nie sądzę, że tego właśnie szukam. Lub przynajmniej nie jest lepsza niż 'hdparm', ponieważ' hdparm' podaje jako wynik wartość, którą musiałbym obliczyć z wyjścia 'sar' lub' iostats'. Mam na myśli MB/s to właściwa wartość. Ale chciałem, aby było to tak bezstronne, jak to tylko możliwe. Sztuczny pomiar jest potrzebny, ponieważ muszę mieć "teoretyczną" podstawę do dalszych obliczeń. – RichArt

Powiązane problemy