Dlaczego procesor spędzał czas na IO (wa)?


18

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:

  1. jeśli proces korzysta z wywołania systemowego do odczytu dysku, proces jest blokowany.
  2. 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.


Weszłam i napisałam właściwą odpowiedź. Przepraszam, nie było mnie tam, kiedy mnie potrzebujesz ;-)
Alec Teal

Odpowiedzi:


22

Stan bezczynności procesora jest podzielony na dwa różne „stany” podrzędne: iowaiti idle.

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

Tak, iowaitto procent czasu CPU jest bezczynny i istnieje co najmniej jeden I / O w toku inicjowane z tego procesora.

iowaitLicznik wskazuje, że system może obsługiwać pracę bardziej obliczeniowej. To, że procesor jest w iowaitstanie, nie oznacza, że ​​nie może on uruchamiać innych wątków lub procesów na tym procesorze.

Jest to więc iowaitpo prostu forma bezczynności.


To jest w rzeczywistości fałsz. Również NFS - procesor nawet nie ma o tym pojęcia. Zasadniczo jest to czas, w którym procesor spędził niezdolność do zrobienia czegoś innego, ponieważ zajmuje się niektórymi niskopoziomowymi operacjami we / wy - w sensie uzyskiwania dostępu do czegoś z nim związanego NIE przetwarzając operacji we / wy, które zwykle odczytują pliki i tak dalej. Na przykład na Raspberry Pi nie ma kontrolera DMA, więc procesor nie może przejść „hej płyta główna przeczytała mi tyle bajtów, zaczynając tutaj od karty i umieściła je w pamięci RAM, zaczynając tutaj” - musi to zrobić ręcznie->
Alec Teal

więc spędza DUŻO czasu STAŁO czekając na io jak na zakończenie odczytu karty. Sprawiasz, że brzmi to tak, jakby brak pamięci podręcznej mógł być mierzony przez to „czekaj” (co oczywiście nie jest liczone), oczekiwanie we / wy jest zdefiniowane w następujący sposób: Czas, w którym jądro spędziło wewnątrz procedury We / Wy niskiego poziomu - np. RPi, dosłownie musi wykonać procedurę odczytu z karty, a procesor (będący blokiem bez DMA) musi czekać na dane w magistrali IO. Z kontrolerem DMA, mówi do kontrolera i mówi „powiedz mi, kiedy skończysz” - pozostawiając to do zrobienia innych rzeczy, podczas gdy kontroler DMA robi urządzenie IO
Alec Teal

Użyj dstat, aby zobaczyć IOwaiting BTW, nie można również zmierzyć czasu oczekiwania na zrobienie rzeczy w jądrze. Jak powiedzmy, że dwa procesy „zapisują” do „plików”, pierwszy kończy się szybko, FS wybrał buforowanie zapisów z dowolnego powodu, drugi powoduje opróżnienie bufora, nie jest sprawiedliwe liczenie znacznie dłuższego czasu powrotu od zapisu do procesu, który spowodował zapis. To samo z oczekiwaniem we / wy, dlatego nie są mierzone dla poszczególnych procesów.
Alec Teal

4
@AlecTeal: Nie, jest poprawny, a twoje komentarze są fałszywe. iowait odlicza czas zablokowany we / wy, a nie obsługę we / wy. Jeśli nie chcesz tego potwierdzać, czytając źródło jądra, spróbuj eksperymentu: zamontuj sieciowy system plików, zacznij czytać plik, a następnie zaporę ogniową ze zdalnego komputera. czas oczekiwania będzie nadal wysoki, mimo że procesor jest całkowicie bezczynny.
David

1
Zrobiłem test na tę odpowiedź. dd if=/dev/sda of=/dev/nullzrobić haj wa. Następnie uruchom kod while-true, wazamiast us. Dzięki chaos.
HUA Di

-2

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


7
Mike, najlepiej, aby odpowiedzi zawierały treść, a nie tylko linki do treści. Udostępniając treść tutaj, upewniasz się, że Twoja odpowiedź nadal ma wartość, gdy te linki znikną.
EEAA,

1
@EEAA to odpowiedź musi zostać zredagowana, a nie potrójnie zanegowana? Lub można go przenieść do komentarza. Nadal zawiera przydatne informacje. Downvotes oznacza, że ​​informacja jest bezużyteczna, również dlatego, że jest prawie niewidoczna? Nie twierdzę, że przegłosowałeś, po prostu zastanawiam się, jakie podejście mają ludzie.
Roland Pihlakas

3
@RolandPihlakas To kwestia motywacji. Downvote + komentarz w tej sytuacji motywują użytkownika do poprawienia odpowiedzi. Z przyjemnością usunę mój rejestrator po naprawieniu odpowiedzi. Ich edycja przynosi efekt przeciwny do zamierzonego, ponieważ umożliwia złe zachowanie. Przez lata mieliśmy kilku użytkowników, którzy publikowali tylko odpowiedzi zawierające tylko linki, mimo że proszono nas, aby tego nie robić. Jeśli użytkownicy nie zadają sobie trudu, aby włożyć trochę wysiłku w swoje odpowiedzi, nie zamierzam im pomóc, naprawiając ich pracę.
EEAA

@EEAA Dziękuję za wyszukaną odpowiedź. Twoje podejście jest zrozumiałe, a poprzez swoje komentarze motywujesz również autora odpowiedzi. W przeciwieństwie do tego obawiam się, że ciche głosy negatywne w większości nie dostarczają żadnej praktycznej motywacji, ponieważ są niejasne. Ale byłem trochę nieprecyzyjny - zastanawiałem się głównie, dlaczego odpowiedź była tak mocno odrzucona, że ​​została wyszarzona? Twój komentarz do jednego lub dwóch głosów negatywnych powinien wystarczyć?
Roland Pihlakas

2
@RolandPihlakas Ludzie myśleli, że odpowiedź nie była przydatna, dlatego głosowali za nimi. Głosowali za nami, ponieważ jest wtorek. Poparli głosowanie, ponieważ dziś w Minneapolis pada śnieg (naprawdę jest i nie powinno być tak późną wiosną). Kto wie.
EEAA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.