Google voor opname in de Linux-kernel, is de eerste set patches geïmplementeerd met componenten die nodig zijn voor het ondersteunen van het M:N-threadmodel. Het initiatief van Google is gerelateerd aan de onthulling van een API dat achter gesloten deuren is ontwikkeld. voor de Linux-kernel, die de werking van de multi-threaded subsystemen in de gebruikersruimte ondersteunt, waarbij het M:N-threadmodel wordt toegepast. Dit subsystem wordt door Google gebruikt voor het draaien van diensten die minimale vertragingen vereisen. De planning en het beheer van de distributie van threads vindt volledig in de gebruikersruimte plaats, wat het aantal context-switchoperaties aanzienlijk vermindert door de uitvoering van systeemaanroepen te minimaliseren.
Om de werking van het genoemde subsystem op het niveau van de Linux-kernel te waarborgen, is de SwitchTo API geïmplementeerd, die drie basisoperaties aanbiedt: wait, resume en swap (overschakelen). Voor opname in de kernel is een nieuwe operatie FUTEX_SWAP voorgesteld, die aanvult , en een basis biedt voor het creëren van multi-threaded bibliotheken in de gebruikersruimte. FUTEX_SWAP kan ook worden gebruikt voor het verzenden van berichten tussen taken, vergelijkbaar met RPC. Bijvoorbeeld, op dit moment vereist het verzenden van een bericht tussen taken minimaal vier aanroepen van FUTEX_WAIT en FUTEX_WAKE, maar het gebruik van FUTEX_SWAP maakt het mogelijk om dit met één operatie te doen, die 5-10 keer sneller zal zijn.
Momenteel worden in de praktijk voornamelijk 1:1 en N:1 threadmodellen gebruikt. Het 1:1 model wordt gebruikt in (POSIX-threads) en , en houdt een directe mapping in van een thread in de gebruikersruimte naar een thread (een eenheid van uitvoeringplanning) op kernniveau. Het N:1 model is geïmplementeerd in , dat de threaddistributie naar de gebruikersruimte verplaatst en N threads in de gebruikersruimte aan één thread in de kernel koppelt, waarbij de kernel geen informatie heeft over de gebruikersthreads.
Een belangrijk nadeel van het 1:1-model zijn de hoge overheadkosten van de contextwisseling tussen de kernel en de gebruikersruimte. Het N:1-model lost dit probleem op, maar creëert een nieuw probleem: aangezien de stroom in de kernel een ondeelbare eenheid van uitvoering planning is, kunnen gebruikersstromen die aan één stroom in de besturingssysteemkernel zijn gekoppeld, niet schalen over de CPU-kernels en zijn ze gekoppeld aan één CPU-kern.
Het M:N-model is hybride en elimineert alle eerder genoemde tekortkomingen door N stromen in de gebruikersruimte te koppelen aan M stromen in de kernel van het besturingssysteem, wat zowel de overheadkosten van de contextwisseling verlaagt als schaalvergroting over de CPU-kernels mogelijk maakt. De prijs van deze optie is een aanzienlijke complicatie van de implementatie van de thread scheduler in de gebruikersruimte en de noodzaak van mechanismen voor actie-coördinatie met de kernel scheduler.

Bron: opennet.ru
