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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ