Google пачаў адкрыццё рэалізацыі мадэлі патокаў M:N

Кампанія Google прапанавала для ўключэння ў склад ядра Linux першы набор патчаў з рэалізацыяй кампанентаў, неабходных для забеспячэння працы мадэлі струменяў M:N. Ініцыятыва Google звязана з адкрыццём які развіваўся за зачыненымі дзвярыма API SwitchTo для ядра Linux, які забяспечвае працу рэалізаванай у прасторы карыстача шматструменнай падсістэмы, якая ўжывае мадэль струменяў M:N. Падсістэма выкарыстоўваецца ў Google для забеспячэння працы сэрвісаў, якія патрабуюць мінімальных затрымак. Планаванне і кіраванне размеркаваннем патокаў праводзіцца цалкам у прасторы карыстальніка, што дазваляе істотна знізіць колькасць аперацый пераключэння кантэксту за кошт мінімізацыі выканання сістэмных выклікаў.

Для забеспячэння працы паказанай падсістэмы на ўзроўні ядра Linux быў рэалізаваны API SwitchTo, які прапануе тры базавыя аперацыі – wait, resume і swap (пераключэнне). Для ўключэння ў склад ядра прапанаваны код новай аперацыі FUTEX_SWAP, якая дапаўняе FUTEX_WAIT і FUTEX_WAKE, і якая прадстаўляе аснову для стварэння шматструменных бібліятэк у прасторы карыстальніка. FUTEX_SWAP таксама можа прымяняцца для перадачы паведамленняў паміж задачамі, па аналогіі з RPC. Напрыклад, у наш час для перадачы паведамлення паміж задачамі патрабуецца выканаць як мінімум чатыры выкліку FUTEX_WAIT і FUTEX_WAKE, выкарыстанне ж FUTEX_SWAP дазволіць абыйсціся адной аперацыяй, якая будзе выканана ў 5-10 разоў хутчэй.

Google пачаў адкрыццё рэалізацыі мадэлі патокаў M:N

Цяпер на практыцы прымяняюцца ў асноўным мадэлі патокаў 1:1 і N:1. Мадэль 1:1 выкарыстоўваецца ў NPTL (POSIX патокі) і LinuxThreads, і мае на ўвазе прамое супастаўленне струменя ў прасторы карыстача з струменем (адзінкай планавання выканання) на ўзроўні ядра. Мадэль N:1 рэалізавана ў GNU Pth, выносіць дыспетчарызацыю патокаў у прастору карыстальніка і дазваляе N патокаў у прасторы карыстальніка прывязаць да аднаго патоку ў ядры, пры гэта ядро ​​не мае інфармацыі аб карыстацкіх патоках.

Асноўным недахопам мадэлі 1:1 з'яўляюцца вялікія накладныя выдаткі на пераключэнне кантэксту паміж ядром і прасторай карыстальніка. Мадэль N:1 вырашае гэтую праблему, але стварае новую - бо струмень у ядры з'яўляецца непадзельнай адзінкай планавання выканання, то карыстацкія струмені, прывязаныя да аднаго струменя ў ядры аперацыйнай сістэмы, не могуць маштабавацца па ядрах CPU і апыняюцца прывязанымі да аднаго ядра CPU.

Мадэль M:N з'яўляецца гібрыднай і ўхіляе ўсе вышэйапісаныя недахопы дзякуючы супастаўленню N струменяў у прасторы карыстача з M струменямі ў ядры АС, што дазваляе як зменшыць накладныя выдаткі на пераключэнне кантэксту, так і забяспечыць маштабаванне па ядрах CPU. Коштам дадзенага варыянту з'яўляецца вялікае ўскладненне рэалізацыі планавальніка струменяў у прасторы карыстача і неабходнасць у механізмах узгаднення дзеянняў з планавальнікам ядра.

Крыніца: opennet.ru

Дадаць каментар