Google začal s otváraním implementácie modelu závitovania M:N

Google navrhol zahrnúť do linuxového jadra prvú sadu záplat s implementáciou komponentov potrebných na zabezpečenie chodu M:N threading modelu. Iniciatíva Google súvisí s otvorením API, ktoré sa vyvíjalo za zatvorenými dverami Prepnúť na pre linuxové jadro, ktoré zabezpečuje prevádzku viacvláknového subsystému implementovaného v užívateľskom priestore pomocou modelu vlákna M:N. Subsystém využíva Google na zabezpečenie prevádzky služieb, ktoré si vyžadujú minimálne oneskorenia. Plánovanie a správa distribúcie vlákien sa vykonáva výlučne v užívateľskom priestore, čo môže výrazne znížiť počet operácií prepínania kontextu minimalizovaním vykonávania systémových volaní.

Pre zabezpečenie chodu špecifikovaného subsystému na úrovni jadra Linuxu bolo implementované rozhranie SwitchTo API, ktoré ponúka tri základné operácie – čakanie, pokračovanie a swap (prepínanie). Na zahrnutie do jadra je navrhnutý kód novej operácie FUTEX_SWAP, ktorý dopĺňa FUTEX_WAIT a FUTEX_WAKEa poskytuje rámec na vytváranie viacvláknových knižníc v užívateľskom priestore. FUTEX_SWAP možno použiť aj na prenos správ medzi úlohami, podobne ako RPC. Napríklad v súčasnosti na prenos správy medzi úlohami potrebujete vykonať aspoň štyri volania FUTEX_WAIT a FUTEX_WAKE, ale použitie FUTEX_SWAP vám umožní vystačiť si s jednou operáciou, ktorá bude dokončená 5-10 krát rýchlejšie.

Google začal s otváraním implementácie modelu závitovania M:N

V súčasnosti sa v praxi využívajú najmä prietokové modely 1:1 a N:1. Používa sa model 1:1 NPTL (streamy POSIX) a LinuxThreadsa znamená priame mapovanie vlákna v užívateľskom priestore na vlákno (jednotka plánovania vykonávania) na úrovni jadra. Model N:1 implementovaný v GNU Pth, prináša odosielanie vlákien do užívateľského priestoru a umožňuje, aby N vlákien v užívateľskom priestore bolo zviazaných s jedným vláknom v jadre bez toho, aby jadro poznalo užívateľské vlákna.

Hlavnou nevýhodou modelu 1:1 je veľká réžia pri prepínaní kontextu medzi jadrom a užívateľským priestorom. Model N:1 tento problém rieši, no vytvára nový – keďže vlákno v jadre je nedeliteľnou jednotkou plánovania vykonávania, používateľské vlákna zviazané s jedným vláknom v jadre operačného systému sa nemôžu škálovať naprieč jadrami CPU a skončia viazané na jedno jadro CPU.

Model M:N je hybridný a odstraňuje všetky vyššie opísané nevýhody mapovaním N vlákien v užívateľskom priestore na M vlákien v jadre OS, čo umožňuje jednak znížiť réžiu prepínania kontextu a jednak zabezpečiť škálovanie medzi jadrami CPU. Cenou tejto možnosti je veľká zložitosť implementácie plánovača vlákien v užívateľskom priestore a potreba mechanizmov na koordináciu akcií s plánovačom jadra.

Zdroj: opennet.ru

Pridať komentár