Miсrosoft ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ систСмы распрСдСлСния памяти mimalloc

Компания Miсrosoft ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π° ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ mimalloc с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ систСмы распрСдСлСния памяти, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ созданной для runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² языков Koka ΠΈ Lean. Mimalloc Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ для использования Π² Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… прилоТСниях Π±Π΅Π· измСнСния ΠΈΡ… ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Π² Windows, macOS, Linux, BSD ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ mimalloc являСтся ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΌΠ΅Π½Π΅Π΅, Ρ‡Π΅ΠΌ 3500 строк ΠΊΠΎΠ΄Π°) ΠΈ ΠΎΡ‡Π΅Π½ΡŒ высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… тСстах mimalloc ΠΎΠ±ΠΎΠ³Π½Π°Π» ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всС ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ распрСдСлСния памяти, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ jemalloc, tcmalloc, snmalloc, rpmalloc ΠΈ Hoard.

Для ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ использован Π½Π°Π±ΠΎΡ€ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… тСстов Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстах mimalloc ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы Π² Ρ€Π°Π·Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² тСстС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ mimalloc оказался быстрСС tcmalloc ΠΈ jemalloc Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 2.5 Ρ€Π°Π·Π°. ΠŸΡ€ΠΈ этом Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ тСстов Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ΅ потрСблСния памяти, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях расход памяти удаётся ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π° 25%.

Miсrosoft ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ систСмы распрСдСлСния памяти mimalloc

Высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ достигаСтся Π² основном Π·Π° счёт примСнСния сСгмСнтирования списка свободных Π±Π»ΠΎΠΊΠΎΠ² (free list sharding). ВмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ большого списка Π² mimalloc примСняСтся Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Ρ€ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… списков, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… привязываСтся ΠΊ страницС памяти. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сниТаСт Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти. Под страницСй памяти понимаСтся сгруппированный Π½Π°Π±ΠΎΡ€ Π±Π»ΠΈΠ·ΠΊΠΈΡ… ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π±Π»ΠΎΠΊΠΎΠ². На 64-разрядных систСмах Ρ€Π°Π·ΠΌΠ΅Ρ€ страницы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ составляСт 64 ΠšΠ‘. Π’ случаС, Ссли Π² страницС Π½Π΅ остаётся занятых Π±Π»ΠΎΠΊΠΎΠ², ΠΎΠ½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ освобоТдаСтся с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ памяти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ памяти ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π² Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π° этапС связывания ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ для ΡƒΠΆΠ΅ собранной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ («LD_PRELOAD=/usr/bin/libmimalloc.so myprogram»). Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСтся API для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² runtime ΠΈ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ управлСния ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ освобоТдСния памяти ΠΈ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎΠ³ΠΎ увСличСния счётчиков ссылок. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΈ использования Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… «ΠΊΡƒΡ‡» (heap) для распрСдСлСния ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ областям памяти. Π’ Ρ‚ΠΎΠΌ числС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ освобоТдСниС ΠΊΡƒΡ‡ΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ освобоТдСния Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сборки Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² бСзопасном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ Π±Π»ΠΎΠΊΠΎΠ² осущСствляСтся подстановка ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹Ρ… страниц памяти (guard-page), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ рандомизация распрСдСлСния Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ списков освобоТдаСмых Π±Π»ΠΎΠΊΠΎΠ². ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ эксплуатации ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² Π² ΠΊΡƒΡ‡Π΅. ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ бСзопасного Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сниТаСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 3%.

Из особСнностСй mimalloc Ρ‚Π°ΠΊΠΆΠ΅ отмСчаСтся Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с Ρ€Π°Π·Π΄ΡƒΡ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ большой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π’ Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠ΅ΠΌ сцСнарии ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти возрастаСт Π½Π° 0.2% для ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ 16.7% для распрСдСляСмой памяти. Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ доступС ΠΊ рСсурсам Π² mimalloc ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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