Sinimulan ng Google na buksan ang pagpapatupad ng M:N flow model

Google iminungkahi para sa pagsasama sa Linux kernel ang unang hanay ng mga patch na may pagpapatupad ng mga sangkap na kinakailangan upang matiyak ang gawain ng M: N threading model. Ang inisyatiba ng Google ay nauugnay sa pagbubukas ng isang API na binuo sa likod ng mga saradong pinto Lumipat sa para sa Linux kernel, na nagbibigay ng multi-threaded subsystem na ipinatupad sa user space na gumagamit ng M: N threading model. Ang subsystem ay ginagamit ng Google upang magbigay ng mga serbisyong nangangailangan ng kaunting pagkaantala. Ang pag-iskedyul at pamamahala ng pamamahagi ng thread ay ganap na ginagawa sa espasyo ng gumagamit, na maaaring makabuluhang bawasan ang bilang ng mga switch ng konteksto sa pamamagitan ng pagliit sa pagpapatupad ng mga tawag sa system.

Upang matiyak ang pagpapatakbo ng subsystem na ito, ipinatupad ang SwitchTo API sa antas ng kernel ng Linux, na nag-aalok ng tatlong pangunahing operasyon - maghintay, magpatuloy at magpalit (switching). Para sa pagsasama sa kernel, isang code para sa isang bagong FUTEX_SWAP na operasyon ay iminungkahi, pandagdag FUTEX_WAIT at FUTEX_WAKE, at nagbibigay ng balangkas para sa pagbuo ng mga multi-threaded na library ng user-space. Magagamit din ang FUTEX_SWAP upang magpasa ng mga mensahe sa pagitan ng mga gawain, katulad ng RPC. Halimbawa, sa kasalukuyan, upang maglipat ng mensahe sa pagitan ng mga gawain, hindi bababa sa apat na tawag sa FUTEX_WAIT at FUTEX_WAKE ang kinakailangan, habang ang paggamit ng FUTEX_SWAP ay magbibigay-daan sa isang operasyon na makumpleto nang 5-10 beses nang mas mabilis.

Sinimulan ng Google na buksan ang pagpapatupad ng M:N flow model

Sa kasalukuyan, ang mga modelo ng daloy na 1:1 at N:1 ay pangunahing ginagamit sa pagsasanay. Ang 1:1 na modelo ay ginagamit sa NPTL (POSIX thread) at LinuxThreads, at nagpapahiwatig ng direktang pagmamapa ng thread ng user-space sa isang thread (unit ng execution scheduling) sa kernel level. Ang modelong N:1 ay ipinatupad sa GNU Pth, nagdadala ng pag-iiskedyul ng thread sa user-space at nagbibigay-daan sa N user-space thread na mag-bind sa isang thread sa kernel, nang hindi nalalaman ng kernel ang tungkol sa mga user-thread.

Ang pangunahing kawalan ng 1:1 na modelo ay ang malaking overhead ng paglipat ng konteksto sa pagitan ng kernel at espasyo ng user. Nilulutas ng modelong N:1 ang problemang ito, ngunit lumilikha ng bago - dahil ang isang thread sa kernel ay isang hindi mahahati na yunit ng pag-iiskedyul ng pagpapatupad, ang mga thread ng user na nakatali sa isang thread sa kernel ng operating system ay hindi maaaring mag-scale sa mga core ng CPU at maging nakasalalay sa isang core ng CPU.

Ang modelong M:N ay hybrid at tinutugunan ang lahat ng mga disadvantage sa itaas sa pamamagitan ng pagmamapa sa N userspace thread sa M kernel thread, parehong binabawasan ang context switch overhead at scaling sa mga CPU core. Ang presyo ng pagpipiliang ito ay ang mahusay na komplikasyon ng pagpapatupad ng thread scheduler sa espasyo ng gumagamit at ang pangangailangan para sa mga mekanismo upang i-coordinate ang mga aksyon sa kernel scheduler.

Pinagmulan: opennet.ru

Magdagdag ng komento