Google is begonnen met het openen van de implementatie van het M:N-stroommodel

Google suggereerde voor opname in de Linux-kernel de eerste set patches met de implementatie van de componenten die nodig zijn om het werk van het M: N-threadingmodel te garanderen. Het initiatief van Google houdt verband met de opening van een achter gesloten deuren ontwikkelde API Overschakelen naar voor de Linux-kernel, die een subsysteem met meerdere threads biedt dat is geïmplementeerd in de gebruikersruimte en dat het M: N-threadingmodel gebruikt. Het subsysteem wordt door Google gebruikt om services te leveren die minimale vertragingen vereisen. De planning en het beheer van threaddistributie wordt volledig uitgevoerd in de gebruikersruimte, wat het aantal contextwisselingen aanzienlijk kan verminderen door de uitvoering van systeemaanroepen te minimaliseren.

Om de werking van dit subsysteem te garanderen, werd de SwitchTo API geïmplementeerd op Linux-kernelniveau, die drie basisbewerkingen biedt: wachten, hervatten en wisselen (schakelen). Voor opname in de kernel wordt ter aanvulling een code voor een nieuwe FUTEX_SWAP-bewerking voorgesteld FUTEX_WAIT en FUTEX_WAKE, en biedt een raamwerk voor het bouwen van multi-threaded gebruikersruimtebibliotheken. FUTEX_SWAP kan ook worden gebruikt om berichten door te geven tussen taken, vergelijkbaar met RPC. Om bijvoorbeeld een bericht tussen taken over te dragen, zijn op dit moment ten minste vier oproepen naar FUTEX_WAIT en FUTEX_WAKE vereist, terwijl het gebruik van FUTEX_SWAP het mogelijk maakt om één bewerking 5-10 keer sneller te voltooien.

Google is begonnen met het openen van de implementatie van het M:N-stroommodel

Op dit moment worden in de praktijk vooral de stromingsmodellen 1:1 en N:1 gebruikt. Het 1:1 model wordt gebruikt in NPTL (POSIX-threads) en LinuxDraden, en impliceert een directe toewijzing van een thread in de gebruikersruimte aan een thread (planning van uitvoeringseenheden) op kernelniveau. Het N:1-model is geïmplementeerd in GNU Phd, brengt threadscheduling naar de gebruikersruimte en stelt N gebruikersruimtethreads in staat om te binden aan een enkele thread in de kernel, zonder dat de kernel op de hoogte is van gebruikersthreads.

Het belangrijkste nadeel van het 1:1-model is de grote overhead van contextomschakeling tussen kernel- en gebruikersruimte. Het N:1-model lost dit probleem op, maar creëert een nieuwe - aangezien een thread in de kernel een ondeelbare eenheid van uitvoeringsplanning is, kunnen gebruikersthreads die zijn gebonden aan een enkele thread in de kernel van het besturingssysteem, niet over CPU-kernen schalen en gebonden raken aan een enkele CPU-kern.

Het M:N-model is hybride en lost alle bovenstaande nadelen op door N userspace-threads toe te wijzen aan M-kernelthreads, waardoor zowel de contextswitch-overhead wordt verminderd als over CPU-cores wordt geschaald. De prijs van deze optie is de grote complicatie van de implementatie van de threadplanner in gebruikersruimte en de behoefte aan mechanismen om acties met de kernelplanner te coördineren.

Bron: opennet.ru

Voeg een reactie