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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster