Wiem, że wa
(in top
) mierzy czas pracy procesora podczas oczekiwania na I / O. Wiele artykułów tak mówi.
Ale jestem zdezorientowany, że w oparciu o 2 punkty wiedzy:
- jeśli proces korzysta z wywołania systemowego do odczytu dysku, proces jest blokowany.
- Jeśli proces jest zablokowany, nie można go zaplanować na procesor.
Dobrze?
Wygląda na to, że procesor nie ma czasu na operacje we / wy ... Co się stanie?
Jeśli polecę jakieś książki lub artykuły do dalszego czytania, tym lepiej.
Odpowiedzi:
Stan bezczynności procesora jest podzielony na dwa różne „stany” podrzędne:
iowait
iidle
.Jeśli procesor jest bezczynny, jądro ustala, czy aktualnie trwa co najmniej jedno wejście / wyjście na dysku lokalnym lub dysku zdalnie zamontowanym (NFS), który został zainicjowany z tego procesora. Jeśli tak, procesor jest w stanie
iowait
. Jeśli nie ma żadnych operacji we / wy zainicjowanych z tego procesora, procesor jest widle
stanie.Tak,
iowait
to procent czasu CPU jest bezczynny i istnieje co najmniej jeden I / O w toku inicjowane z tego procesora.iowait
Licznik wskazuje, że system może obsługiwać pracę bardziej obliczeniowej. To, że procesor jest wiowait
stanie, nie oznacza, że nie może on uruchamiać innych wątków lub procesów na tym procesorze.Jest to więc
iowait
po prostu forma bezczynności.źródło
dd if=/dev/sda of=/dev/null
zrobić hajwa
. Następnie uruchom kod while-true,wa
zamiastus
. Dzięki chaos.Nie jestem w 100% pewien, że rozumiem pytanie, ale jest kilka pomysłów.
Jest tutaj inne pytanie, które zadaje to pytanie i ma kilka dobrych odpowiedzi: Czy ktoś może dokładnie wyjaśnić, co to jest IOWait?
Dobry post tutaj: http://veithen.github.io/2013/11/18/iowait-linux.html
źródło