Google het die implementering van die M:N-draadmodel begin oopmaak

Google voorgestel om die eerste stel pleisters in die Linux-kern in te sluit met die implementering van komponente wat nodig is om die werking van die M:N-draadmodel te verseker. Google se inisiatief hou verband met die opening van 'n API wat agter geslote deure ontwikkel het Oorskakel na vir die Linux-kern, wat die werking bied van 'n multi-draad substelsel wat in gebruikersruimte geïmplementeer is, met behulp van die M:N threading model. Die substelsel word deur Google gebruik om die werking van dienste te verseker wat minimale vertraging vereis. Skeduleer en bestuur van draadverspreiding word geheel en al in gebruikersruimte uitgevoer, wat die aantal kontekswisselingsoperasies aansienlik kan verminder deur die uitvoering van stelseloproepe te minimaliseer.

Om die werking van die gespesifiseerde substelsel op die Linux-kernvlak te verseker, is die SwitchTo API geïmplementeer, wat drie basiese bewerkings bied - wag, hervat en ruil (wissel). Vir insluiting in die kern word die kode van 'n nuwe bewerking FUTEX_SWAP voorgestel, wat aanvul FUTEX_WAIT en FUTEX_WAKE, en bied 'n raamwerk vir die skep van multi-threaded biblioteke in gebruikersruimte. FUTEX_SWAP kan ook gebruik word om boodskappe tussen take oor te dra, soortgelyk aan RPC. Byvoorbeeld, tans, om 'n boodskap tussen take oor te dra, moet jy ten minste vier oproepe na FUTEX_WAIT en FUTEX_WAKE doen, maar die gebruik van FUTEX_SWAP sal jou toelaat om oor die weg te kom met een operasie, wat 5-10 keer vinniger voltooi sal word.

Google het die implementering van die M:N-draadmodel begin oopmaak

Tans word 1:1- en N:1-vloeimodelle hoofsaaklik in die praktyk gebruik. Die 1:1-model word gebruik in NPTL (POSIX-strome) en LinuxThreads, en impliseer 'n direkte kartering van 'n draad in gebruikersruimte na 'n draad (eenheid van uitvoeringskedulering) op die kernvlak. Model N:1 geïmplementeer in GNU Pth, bring draadversending na gebruikersruimte en laat toe dat N drade in gebruikersruimte aan 'n enkele draad in die kern gekoppel kan word, sonder dat die kern kennis dra van gebruikersdrade.

Die grootste nadeel van die 1:1-model is die groot bokoste van kontekswisseling tussen die kern- en gebruikersruimte. Die N:1-model los hierdie probleem op, maar skep 'n nuwe een - aangesien 'n draad in die kern 'n ondeelbare eenheid van uitvoeringskedulering is, kan gebruikerdrade wat aan een draad in die bedryfstelselkern gekoppel is nie oor SVE-kerns skaal nie en uiteindelik aan 'n enkele SVE-kern.

Die M:N-model is hibried en skakel al die bogenoemde nadele uit deur N drade in gebruikersruimte te karteer na M drade in die OS-kern, wat dit moontlik maak om beide die bokoste van kontekswisseling te verminder en om skaal oor SVE-kerns te verseker. Die koste van hierdie opsie is die groot kompleksiteit van die implementering van 'n draadskeduleerder in gebruikersruimte en die behoefte aan meganismes om aksies met die kernskeduleerder te koördineer.

Bron: opennet.ru

Voeg 'n opmerking