Google започна въвеждането на модела M:N flow

Google предложи за включване в ядрото на Linux първия набор от корекции с внедряването на компонентите, необходими за осигуряване на работата на модела на резби M: N. Инициативата на Google е свързана с отварянето на API, разработен при закрити врати Преминат към за ядрото на Linux, което предоставя многонишкова подсистема, внедрена в потребителско пространство, която използва модела на нишки M: N. Подсистемата се използва от Google за предоставяне на услуги, които изискват минимални забавяния. Планирането и управлението на разпределението на нишките се извършва изцяло в потребителското пространство, което може значително да намали броя на контекстните превключвания чрез минимизиране на изпълнението на системни повиквания.

За да се осигури работата на тази подсистема, SwitchTo API беше внедрен на ниво ядро ​​на Linux, предлагайки три основни операции - изчакване, възобновяване и суап (превключване). За включване в ядрото се предлага код за нова операция FUTEX_SWAP, допълваща FUTEX_WAIT и FUTEX_WAKEи предоставя рамка за изграждане на многонишкови библиотеки за потребителско пространство. FUTEX_SWAP може също да се използва за предаване на съобщения между задачи, подобно на RPC. Например, в момента, за да прехвърлите съобщение между задачи, са необходими поне четири извиквания на FUTEX_WAIT и FUTEX_WAKE, докато използването на FUTEX_SWAP ще позволи една операция да бъде завършена 5-10 пъти по-бързо.

Google започна въвеждането на модела M:N flow

Понастоящем в практиката се използват основно моделите на потока 1:1 и N:1. Моделът 1:1 се използва в NPTL (POSIX нишки) и LinuxThreads, и предполага директно преобразуване на нишка от потребителско пространство към нишка (единица за планиране на изпълнение) на ниво ядро. Моделът N:1 е внедрен в GNU Pth, въвежда планиране на нишки в потребителското пространство и позволява на N нишки от потребителско пространство да се свързват с една нишка в ядрото, без ядрото да знае за потребителските нишки.

Основният недостатък на модела 1:1 е голямото натоварване на контекстното превключване между ядрото и потребителското пространство. Моделът N:1 решава този проблем, но създава нов - тъй като една нишка в ядрото е неделима единица за планиране на изпълнението, потребителските нишки, обвързани с една нишка в ядрото на операционната система, не могат да се мащабират в ядрата на процесора и да се обвържат с едно ядро ​​на процесора.

Моделът M:N е хибриден и се справя с всички горепосочени недостатъци чрез картографиране на N нишки на потребителското пространство към M нишки на ядрото, като и двете намаляват разходите за превключване на контекста и мащабирането между ядрата на процесора. Цената на тази опция е голямото усложнение на внедряването на планировчика на нишки в потребителското пространство и необходимостта от механизми за координиране на действията с планировчика на ядрото.

Източник: opennet.ru

Добавяне на нов коментар