Dlaczego wysokie wejścia / wyjścia dysku zmniejszają czas reakcji / wydajność systemu?

19

Nigdy do końca nie rozumiałem, dlaczego wysokie We / Wy dysku tak bardzo spowolniło system. Jest to dla mnie dziwne, ponieważ oczekiwałbym, że spowolnienie wpłynie tylko na procesy zależne od danych dysku twardego / optycznego, ale spowolnienie wpływa nawet na rzeczy załadowane do pamięci RAM. Mam tu na myśli iowait .

Dlaczego procesor czeka zamiast wykonywać inną pracę? Czy ktoś może wyjaśnić to ograniczenie i dlaczego nie zostało ono rozwiązane w jądrze Linuksa? Czy istnieje jądro, które nie ma tego problemu?

[ uwaga ] Poczyniono pewne postępy w tym obszarze wyników. Po pierwsze, późniejsze jądra (w moim przypadku 2.6.37) są znacznie bardziej responsywne.

tshepang
źródło
Czy Xeno nie wyjaśniło dokładnie, w jaki sposób zostało to rozwiązane w jądrze Linuksa podczas ostatniego pytania?
Michael Mrozek
2
Biorąc pod uwagę zmiany, myślę, że intencją jest, aby poprzednie pytanie dotyczyło postępów w kierunku rozwiązania problemu, podczas gdy to pytanie dotyczy przyczyny problemu.
Steven D.
@mic Steven ma rację. Mieliśmy długą dyskusję na temat tego, co miałem na myśli z poprzednim pytaniem. Odpowiedź Xeno była tak dobra, że ​​zredagowałem pytanie, aby je dopasować, i ponownie zadałem oryginalne pytanie tutaj.
tshepang,
Rozumiem, ale twoje pytanie wydaje się być sprzeczne z drugim; tutaj mówisz „Czy ktoś może wyjaśnić to ograniczenie i dlaczego nie zostało rozwiązane w jądrze Linuksa? Czy istnieje jądro, które nie ma tego problemu?”, ale odpowiedź Xeno zaczyna się od „Myślę, że w większości zostało rozwiązane."
Michael Mrozek
@mic Nie bardzo. Jądro nadal działa iowait , co oznacza, że ​​nadal czeka. Widzę odpowiedź Xeno, ponieważ poprawiono reakcję systemu . I zgadzam się, jak zauważyłem w pytaniu.
tshepang 10.01.11

Odpowiedzi:

9

Systemy operacyjne korzystają z pamięci wirtualnej, dzięki czemu można użyć więcej pamięci niż dostępna jest fizyczna pamięć RAM. Gdy jądro zdecyduje, że lepiej wykorzystuje stronę pamięci fizycznej, jego zawartość może zostać „stronicowana” w celu przechowywania na dysku. Gdy strona pamięci wirtualnej jest otwierana podczas stronicowania, generuje błąd strony i jest przenoszona z dysku do pamięci RAM.

Błędy strony są katastrofą dla wydajności, ponieważ opóźnienie dysku jest mierzone w milisekundach, a opóźnienie pamięci RAM jest mierzone w nanosekundach. (1 milisekunda = milion nanosekund!)

Pamięć jest wykorzystywana nie tylko przez procesy użytkownika, ale także przez jądro do buforowania systemu plików. Podczas działania systemu plików jądro będzie buforować ostatnio używane dane. Zakłada się, że istnieje duża szansa, że ​​te same dane zostaną wkrótce ponownie wykorzystane, więc buforowanie powinno poprawić wydajność operacji we / wy.

Pamięć fizyczna używana dla pamięci podręcznej systemu plików nie może być używana dla procesów, więc podczas aktywności systemu plików więcej pamięci procesowej zostanie stronicowane, a błędy stron będą rosły. Ponadto dostępna jest mniejsza przepustowość we / wy dysku do przenoszenia stron pamięci zi na dysk. W rezultacie procesy mogą zostać zatrzymane.

Wim Coenen
źródło
Wiem, że jest tak stary jak brud, ale w zależności od tego, w jaki sposób nadchodzi, duże ilości We / Wy mogą powodować generowanie wielu przerwań, a wynikowy kontekst przełącza marnowanie czasu procesora.
Bratchley,
5

O ile rozumiem, IOwait oznacza, że ​​proces, a nie procesor, czeka na dostępność IO. Procesory zyskały znacznie większą prędkość niż dyski twarde, co oznacza, że ​​więcej kodu skończy się szybciej, a następnie dysk będzie musiał zostać odczytany. Gdy trzeba odczytać wiele więcej, niż dysk może zrobić wystarczająco szybko, kończy się czekanie procesora. Sposób, w jaki zdecydowano, kto może czytać / zapisywać na dysku, zależy od harmonogramu bloków, w większości przypadków teraz CFQ. Jeśli używasz CFQ i potrzebujesz procesu, który zużyje mniej całkowitego czasu operacji we / wy, aby zwiększyć czas reakcji systemu, możesz użyć ionice -c3 <processid>. Mówi to systemowi, aby ten proces IO mógł nadawać tylko wtedy, gdy nic więcej go nie potrzebuje.

Jest to nadal interesujące i lepiej wyjaśnia problem iowait.

ksenoterracid
źródło