Patrzyłem na iowait
właściwość pokazaną na górnym wyjściu narzędzia, jak pokazano poniżej.
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
jest ogólnie definiowany w następujący sposób:
„Jest to czas bezczynności procesora i oczekiwanie na niektóre operacje we / wy”.
Rozumiem, że proces jest uruchamiany na jednym procesorze. Po de-harmonogramowaniu, ponieważ wykorzystał swój przedział czasowy lub po tym, jak został zablokowany, może ostatecznie zostać ponownie zaplanowany na dowolnym CPU.
W przypadku żądania We / Wy procesor, który wprowadza proces w nieprzerwany sen, jest odpowiedzialny za śledzenie iowait
czasu. Pozostałe procesory zgłaszałyby na tym samym czasie bezczynności, ponieważ tak naprawdę są bezczynne. Czy to założenie jest prawidłowe?
Ponadto, zakładając, że istnieje długie żądanie We / Wy (co oznacza, że proces miał kilka możliwości zaplanowania, ale nie został zaplanowany, ponieważ We / Wy nie zostało ukończone), skąd procesor wie, że istnieje "oczekujące We / Wy"? Skąd pochodzą takie informacje? Jak procesor może po prostu dowiedzieć się, że jakiś proces został uśpiony na pewien czas, aby IO mogło się zakończyć, ponieważ którykolwiek z procesorów mógł go uśpić. W jaki sposób potwierdzany jest ten status „oczekujących operacji we / wy”?
źródło
Odpowiedzi:
Procesor nic o tym nie wie, tak jak planista zadań.
Przytaczana definicja jest nieco myląca; bieżąca strona
procfs(5)
podręcznika ma dokładniejszą definicję, z zastrzeżeniami:iowait
ogólnie próbuje zmierzyć czas spędzony na oczekiwaniu na We / Wy. Nie jest śledzony przez konkretny procesor, ani nie może być (punkt 2 powyżej - który również pasuje do tego, co zastanawiasz się). Jest on mierzony na procesor, o ile to możliwe.Harmonogram zadań „wie”, że oczekuje na operacje we / wy, ponieważ wie, że zawiesił dane zadanie, ponieważ oczekuje na operacje we / wy. Jest to śledzone według zadania w
in_iowait
polutask_struct
; możesz poszukaćin_iowait
w rdzeniu programu planującego, aby zobaczyć, jak to jest ustawione, śledzone i czyszczone. Niedawny artykuł Brendana Gregga na temat średnich obciążeń systemu Linux zawiera przydatne informacje ogólne.iowait
Wpis/proc/stat
, który właśnie kończy siętop
, gdy zwiększana jest kleszcz zegar jest rozliczane, a obecny proces „on” CPU jest bezczynny; możesz to zobaczyć, szukającaccount_idle_time
w kodzie śledzenia czasu procesora programu planującego .Bardziej dokładna definicja to „czas spędzony na tym procesorze na oczekiwaniu na operacje we / wy, kiedy nie ma nic lepszego do zrobienia” ...
źródło