Monitorowanie I/O w Linux'ie
Na wzrost parametru load average w systemie Linux wpływ nie tylko ma obciążenie procesora lecz również procesy oczekujące operacje dyskowe I/O. Na pytanie co generuje duże obciążenie I/O i w jakim stopniu postaram się odpowiedzieć na łamach tego wpisu…
Wcześniej wspomniany parametr load average możemy określić chociażby
korzystając z popularnego top’a,
jednak sam top nie dostarcza nam wiele informacji z zakresu I/O. Jedynie
pole wa przedstawia w sposób
procentowy czas oczekiwania na operację I/O.
Więcej informacji dostarcza nam równie popularne narzędzie vmstat, prócz ww. parametru wa mamy
dostępne parametry bi oraz bo odpowiednio ilość bloków otrzymanych
oraz ilość bloków wysłanych z urządzenia. Wielkość bloku możemy określić
poleceniem:
# blockdev --getbsz <nazwa_urzadzenia>
Dodatkowo, aby podsumować operacje I/O korzystamy z polecenia: vmstat -D.
Kolejne narzędzie dostarczające statystyk I/O to iostat z pakietu sysstat. Dzięku temu
narzędziu otrzymujemy bardziej szczegółowe statystyki (zwłaszcza po
włączeniu przełącznika -x) z podziałem już na poszczególne partycje. Do
szczegółowych statystyk zaliczyć można wielkości danych
odczytanych/zapisanych wyrażone w MB, czas oczekiwania na operację I/O,
czas danego żądania I/O spędzony w kolejce etc. Więcej informacji
dostępne w man iostat.
Niestety przedstawiony vmstat oraz iostat, nie dostarcza nam informacji o operacjach I/O per proces. Dopiero w kernelu 2.6.20 po włączniu opcji TASK_DELAY_ACCT oraz TASK_IO_ACCOUNTING otrzymujemy w /proc/<numer_pid_procesu>/io informacje o dokonaniach konkretnego procesu w zakresie I/O:
:::text
rchar - odczytana liczba znaków
wchar - zapisana liczba znaków
syscr - liczba syscall'i związanych z odczytem
syscw - liczba syscall'i związanych z zapisem
read_bytes - odczytana liczba bajtów
write_bytes - zapisana liczba bajtów
Iotop (http://guichaz.free.fr/iotop/) to wygodne narzędzie do odczytywania tych parametrów i szeregowania procesów w-g ich wpływu na obciążenie systemu. System CentOS serii 5 mimo korzystania z kerneli 2.6.18 również od wersji 5.3 posiada możliwość monitorowania operacji I/O per proces niestety skompilowanie iotop’a nie powiedzie się z racji starszej wersji python 2.4 (iotop wymaga >=2.5). Możemy jednak skorzystać z uniwersalnego narzędzia dstat, które na liście plugin’ów posiada topio oraz topbio.
W celu logowania operacji na przestrzeni adresowej (strony) oraz operacji na inode’ach możemy skorzystać z przełącznika block_dump, aby włączyć narzędzie należy:
# echo 1 > /proc/sys/vm/block_dump
Aktywność całego systemu możemy podejrzeć przy pomocy dmesg’a, operacjom na inode’ach towarzyszą nazwy plików, natomiast operacjom na samych plikach towarzyszą jedynie informacje o procesie, który go wywołał oraz numery bloków związanych z danym plikiem. Block_dump powoduje duży narzut, gromadzenie i ich analiza może nastręczać wiele kłopotów, dobrze nadaje sie do podejrzenie co aktualnie dzieje sie w systemie.
Do śledzenia operacji zapisu/odczytu oraz w szczególności tego co dzieje sie w samym schedulerze wykorzystujemy narzędzie blktrace. Więcej informacji na temat tego narzędzia znaleźć można pod adresem: http://www.gelato.org/pdf/apr2006/gelato_ICE06apr_blktrace_brunelle_hp.pdf
Popularne narzędzie strace możemy wykorzystać do monitorowania aktywności danego procesu filtrując syscall’e związane z aktywnością na plikach:
# strace -e trace=file -p <numer_pid_procesu>
Podobnie narzędzie lsof może nam posłużyć do identyfikacji procesów zbyt obciążających system I/O przedstawiając pliki związane z danym procesem:
# lsof -p <numer_pid_procesu>
Jako przykład wykonywanie archiwum przy pomocy tar’a, może być bardzo obciążające dla podsystemu I/O aby zidentyfikować co akurat jest pakowane możemy użyć powyższego narzędzia.
Aby obniżyć priorytet dostępu do I/O konkretnemu procesowi skorzystać należy z narzędzia ionice w przypadku, gdy korzystamy z scheduler’a CFQ. Więcej informacji pod: man ionice.
Ostatnim zestawem narzędzi jest zestaw skryptów SystemTap’a. SystemTap w przybliżeniu jest to odpowiednik DTrace’a dla systemu Linux, narzędzie służące do analizy działającego kernel’a. Na stronie http://sourceware.org/systemtap/examples/ dostępny jest zestaw gotowych skryptów część z nich to skrypty monitorujące I/O do ciekawszych z nich zaliczyć można:
io/iotime.stp - monitoruje czas potrzebny do wykonania operacji I/O dla konkretnego pliku.
Mnogość narzędzi monitorujących operacje I/O w Linux’ie nagół dostępnych standardowo w większości dystrybucji sprawia, że odnalezienie ,,wąskiego gardła'' nie jest wielkim problemem.
powered by Hugo and Noteworthy theme