Google začal otevírat implementaci modelu toku M:N

Google navrhl pro zahrnutí první sady patchů do linuxového jádra s implementací komponent nezbytných pro zajištění práce modelu M:N threading. Iniciativa Google souvisí s otevřením API vyvinutého za zavřenými dveřmi Přepnout na pro linuxové jádro, které poskytuje vícevláknový subsystém implementovaný v uživatelském prostoru, který používá model vláken M:N. Tento subsystém používá Google k poskytování služeb, které vyžadují minimální zpoždění. Plánování a správa distribuce vláken se provádí výhradně v uživatelském prostoru, což může výrazně snížit počet přepínání kontextu minimalizací provádění systémových volání.

Pro zajištění chodu tohoto subsystému bylo na úrovni linuxového jádra implementováno rozhraní SwitchTo API, které nabízí tři základní operace – čekání, obnovení a swap (přepínání). Pro zahrnutí do jádra je navržen dodatečný kód pro novou operaci FUTEX_SWAP FUTEX_WAIT a FUTEX_WAKEa poskytuje rámec pro vytváření vícevláknových knihoven uživatelského prostoru. FUTEX_SWAP lze také použít k předávání zpráv mezi úkoly, podobně jako RPC. Například v současné době jsou pro přenos zprávy mezi úkoly vyžadována alespoň čtyři volání FUTEX_WAIT a FUTEX_WAKE, zatímco použití FUTEX_SWAP umožní dokončení jedné operace 5-10krát rychleji.

Google začal otevírat implementaci modelu toku M:N

V současné době se v praxi používají především průtokové modely 1:1 a N:1. Je použit model 1:1 NPTL (vlákna POSIX) a LinuxThreadsa znamená přímé mapování vlákna v uživatelském prostoru na vlákno (jednotka plánování provádění) na úrovni jádra. Model N:1 je implementován v GNU Pth, přináší plánování vláken do uživatelského prostoru a umožňuje N vláknům uživatelského prostoru vázat se na jedno vlákno v jádře, aniž by jádro vědělo o uživatelských vláknech.

Hlavní nevýhodou modelu 1:1 je velká režie přepínání kontextu mezi jádrem a uživatelským prostorem. Model N:1 tento problém řeší, ale vytváří nový – protože vlákno v jádře je nedělitelnou jednotkou plánování provádění, uživatelská vlákna vázaná na jedno vlákno v jádře operačního systému se nemohou škálovat mezi jádry CPU a stávají se vázány na jedno jádro CPU.

Model M:N je hybridní a řeší všechny výše uvedené nevýhody mapováním N vláken uživatelského prostoru na vlákna jádra M, což snižuje režii přepínání kontextu a škálování napříč jádry CPU. Cenou této možnosti je velká komplikace implementace plánovače vláken v uživatelském prostoru a potřeba mechanismů pro koordinaci akcí s plánovačem jádra.

Zdroj: opennet.ru

Přidat komentář