Google rozpoczął otwieranie implementacji modelu przepływu M:N

Google zasugerował o włączenie do jądra Linuksa pierwszego zestawu łatek z implementacją komponentów niezbędnych do zapewnienia pracy modelu wątków M:N. Inicjatywa Google związana jest z otwarciem API rozwijanego za zamkniętymi drzwiami Przełącz na dla jądra Linuksa, które udostępnia wielowątkowy podsystem zaimplementowany w przestrzeni użytkownika wykorzystujący model wątków M:N. Podsystem jest wykorzystywany przez Google do świadczenia usług wymagających minimalnych opóźnień. Planowanie i zarządzanie dystrybucją wątków odbywa się całkowicie w przestrzeni użytkownika, co może znacznie zmniejszyć liczbę przełączeń kontekstu poprzez zminimalizowanie wykonywania wywołań systemowych.

Aby zapewnić działanie tego podsystemu, na poziomie jądra Linuksa zaimplementowano API SwitchTo, oferujące trzy podstawowe operacje – wait, wznowienie oraz swap (switching). Do włączenia do jądra proponowany jest kod nowej operacji FUTEX_SWAP, uzupełniający FUTEX_WAIT i FUTEX_WAKEi zapewnia platformę do tworzenia wielowątkowych bibliotek przestrzeni użytkownika. FUTEX_SWAP może być również używany do przekazywania komunikatów między zadaniami, podobnie jak RPC. Na przykład obecnie, aby przesłać wiadomość między zadaniami, wymagane są co najmniej cztery wywołania FUTEX_WAIT i FUTEX_WAKE, podczas gdy użycie FUTEX_SWAP pozwoli na wykonanie jednej operacji 5-10 razy szybciej.

Google rozpoczął otwieranie implementacji modelu przepływu M:N

Obecnie w praktyce stosowane są głównie modele przepływowe 1:1 i N:1. Model 1:1 jest używany m.in NPTL (wątki POSIX) i LinuxWątkii implikuje bezpośrednie odwzorowanie wątku przestrzeni użytkownika na wątek (planowanie jednostki wykonania) na poziomie jądra. Model N:1 jest realizowany m.in GNU pkt, przenosi planowanie wątków do przestrzeni użytkownika i pozwala N wątkom przestrzeni użytkownika wiązać się z pojedynczym wątkiem w jądrze, bez wiedzy jądra o wątkach użytkownika.

Główną wadą modelu 1:1 jest duży narzut związany z przełączaniem kontekstu między jądrem a przestrzenią użytkownika. Model N:1 rozwiązuje ten problem, ale tworzy nowy - ponieważ wątek w jądrze jest niepodzielną jednostką planowania wykonania, wątki użytkownika związane z pojedynczym wątkiem w jądrze systemu operacyjnego nie mogą skalować się między rdzeniami procesora i są związane z pojedynczy rdzeń procesora.

Model M:N jest hybrydowy i rozwiązuje wszystkie powyższe wady poprzez mapowanie N wątków przestrzeni użytkownika na M wątków jądra, zarówno zmniejszając narzut związany z przełączaniem kontekstu, jak i skalując między rdzeniami procesora. Ceną tej opcji jest duża komplikacja implementacji harmonogramu wątków w przestrzeni użytkownika i konieczność posiadania mechanizmów koordynujących działania z harmonogramem jądra.

Źródło: opennet.ru

Dodaj komentarz