Jak współdziałają pdflush, kjournald, swapd itp.?


17

Niedawno zobaczyłem pytanie, które wywołało tę myśl. Naprawdę nie mogłem znaleźć odpowiedzi tutaj lub za pośrednictwem maszyny Google. Zasadniczo interesuje mnie wiedza o strukturze warstwowej architektury we / wy jądra. Na przykład, czy kjournaldwysyłka do pdflushlub na odwrót? Zakładam, że pdflush(bardziej ogólny niż we / wy pamięci masowej) będzie znajdować się na niższym poziomie i wyzwalać polecenia SCSI / ATA / wszelkie niezbędne polecenia do faktycznego wykonywania zapisów i kjournaldobsługi struktur danych systemu plików wyższego poziomu przed zapisem. Widziałem to również na odwrót, z kjournaldbezpośrednim połączeniem ze strukturami danych systemu plików i pdflushbudzeniem się od czasu do czasu, aby zapisywać na urządzeniu brudne strony pamięci podręcznejkjournald. Możliwe jest również, że ta dwójka nie wchodzi w interakcje z jakiegoś innego powodu.

Zasadniczo: Potrzebuję jakiegoś sposobu na wizualizację (wykres lub tylko wyjaśnienie) podstawowej architektury używanej do wysyłania I / O do pamięci masowej w jądrze Linux.


1
Czy tego właśnie szukasz? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm

1
Jest też prezentacja: 7. slajd w: slideshare.net/LukCzerner/local-file-systems-update
slm

1
Znalazłem również ten schemat: thomas-krenn.com/en/oss/linux-io-stack-diagram/…
slm

1
Znalazłem tę interaktywną mapę jądra, która pomaga pokazać, jak różne komponenty jądra idą w parze: makelinux.net/kernel_map
slm

1
Jeszcze jeden zasób, strony 19-24: Wytyczne dotyczące wydajności i strojenia systemu Linux . Ten wygląda dokładnie tak, jak szukasz.
slm

Odpowiedzi:


21

Zanim omówimy specyfikę zakresie pdflush, kjournald, andkswapd`, niech najpierw trochę tło na kontekście tego, co dokładnie mówimy w kategoriach Linux Kernel.

Architektura GNU / Linux

Architekturę GNU / Linux można traktować jako 2 spacje:

  • Użytkownik
  • Jądro

Pomiędzy przestrzenią użytkownika a przestrzenią jądra znajduje się biblioteka GNU C ( glibc). Zapewnia to interfejs wywołania systemowego, który łączy jądro z aplikacjami w przestrzeni użytkownika.

Przestrzeń jądra można podzielić na 3 poziomy:

  • Interfejs wywołania systemowego
  • Niezależny kod architektoniczny jądra
  • Architektoniczny kod zależny

Interfejs wywołania systemowego, jak sugeruje jego nazwa, zapewnia interfejs między glibcjądrem i. Architektoniczne Niezależne Kod Jądro składa się z jednostek logicznych, takich jak VFS (Virtual File System) oraz VMM (Virtual Memory Management). Architektoniczne Dependent Code to składniki, które są platformą procesor i kod specyficzny dla danej architektury sprzętowej.

Schemat architektury GNU / Linux

                                 ss z gnu / linux arch.

W dalszej części tego artykułu skupimy się na jednostkach logicznych VFS i VMM w przestrzeni jądra.

Podsystemy jądra GNU / Linux

                                    ss of kernel com

Podsystem VFS

Dzięki wysokopoziomowej koncepcji struktury jądra GNU / Linux możemy zagłębić się nieco głębiej w podsystem VFS. Ten komponent jest odpowiedzialny za zapewnienie dostępu do różnych blokowych urządzeń pamięci masowej, które ostatecznie odwzorowują system plików (ext3 / ext4 / etc.) Na urządzeniu fizycznym (HDD / etc.).

Schemat VFS

ss of vfs

Ten schemat pokazuje, jak write()proces użytkownika przemierza VFS i ostatecznie dociera do sterownika urządzenia, gdzie jest zapisywany na fizycznym nośniku pamięci. To pierwsze miejsce, w którym się spotykamy pdflush. Jest to demon odpowiedzialny za opróżnianie brudnych danych i bloków bufora metadanych na nośniku pamięci w tle. Schemat tego nie pokazuje, ale istnieje inny demon, kjournaldktóry siedzi obok pdflushi wykonuje podobne zadanie, zapisując brudne bloki dziennika na dysk. UWAGA: Bloki dziennika to sposób, w jaki systemy plików, takie jak ext4 i JFS, śledzą zmiany na dysku w pliku przed wprowadzeniem tych zmian.

Powyższe szczegóły są omówione w dalszej części tego dokumentu .

Przegląd write()kroków

Aby zapewnić prosty przegląd operacji sybsystemu we / wy, skorzystamy z przykładu, w którym funkcja write()jest wywoływana przez aplikację User Space.

  1. Proces żąda zapisania pliku za pośrednictwem write()wywołania systemowego.
  2. Jądro aktualizuje pamięć podręczną strony zamapowaną na plik.
  3. Wątek jądra pdflush zajmuje się opróżnieniem pamięci podręcznej stron na dysk.
  4. Warstwa systemu plików umieszcza każdy bufor bloku razem w bio struct( patrz 1.4.3, „Warstwa bloku” na stronie 23 ) i przesyła żądanie zapisu do warstwy urządzenia blokowego.
  5. Warstwa urządzenia blokowego pobiera żądania z górnych warstw i wykonuje operację windy we / wy i umieszcza je w kolejce żądań we / wy.
  6. Sterownik urządzenia, taki jak SCSI lub inne sterowniki specyficzne dla urządzenia, zajmą się operacją zapisu.
  7. Oprogramowanie układowe urządzenia dyskowego wykonuje operacje sprzętowe, takie jak wyszukiwanie głowy, obracanie i przesyłanie danych do sektora na talerzu.

Podsystem VMM

Kontynuując nasze głębsze nurkowanie, możemy teraz zajrzeć do podsystemu VMM. Ten komponent jest odpowiedzialny za utrzymanie spójności między pamięcią główną (RAM), zamianą i fizycznym nośnikiem pamięci. Podstawowym mechanizmem utrzymania spójności jest bdflush. Ponieważ strony pamięci są uważane za brudne, muszą zostać zsynchronizowane z danymi znajdującymi się na nośniku pamięci. bdflushbędzie koordynować z pdflushdemonami, aby zsynchronizować te dane z nośnikiem pamięci.

Schemat VMM

                ss VMM

Zamiana

Kiedy zaczyna brakować pamięci systemowej lub upłynął czas wymiany jądra, kswapddemon spróbuje zwolnić strony. Tak długo, jak liczba wolnych stron pozostaje powyżej free_pages_high, kswapdnic nie zrobi. Jeśli jednak liczba bezpłatnych stron spadnie poniżej, kswapdrozpocznie się proces ponownego zapisywania strony. Po kswapdzaznaczeniu stron do przeniesienia bdflushzajmie się synchronizacją wszelkich zaległych zmian na nośniku pamięci, za pośrednictwem pdflushdemonów.

Referencje i dalsze odczyty


1
Poczekam dzień, zanim zaakceptuję tę odpowiedź i przyznam nagrodę, aby pozostała na stronie „nagrody”. W ten sposób każdy, kto go widział wcześniej, ma szansę zauważyć, że ma teraz odpowiedź.
Bratchley,

1
Jeszcze raz dziękuję, BTW. Naprawdę zrobiłeś wszystko, aby to zbadać.
Bratchley,
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.