Microsoft otevřel kód systému pro rozdělování paměti mimalloc

Společnost Microsoft uvolnila pod licencí MIT knihovnu mimalloc s implementací systému správy paměti, původně vytvořeného pro runtime komponenty jazyků Koka a Lean. Mimalloc je přizpůsoben k použití v standardních aplikacích bez nutnosti měnit jejich kód a může sloužit jako transparentní náhrada za funkci malloc. Podporováno na Windows, macOS, Linuxu, BSD a dalších systémech podobných Unixu.

Hlavní výhodou mimalloc je kompaktnost implementace (méně než 3500 řádků kódu) a velmi vysoký výkon. V prováděných testech mimalloc překonal výkonem všechny konkurenční knihovny správy paměti, včetně jemalloc, tcmalloc, snmalloc, rpmalloc a Hoard.

Pro hodnocení výkonu byl použit soubor již existujících standardních testů V některých testech mimalloc předčil jiné systémy několikrát, například v testu migrace objektů mezi různými vlákny byl mimalloc rychlejší než tcmalloc a jemalloc více než 2,5krát. Většinou se také pozoruje nižší spotřeba paměti, v některých situacích se podařilo snížit spotřebu paměti o 25%.

Microsoft otevřel kód systému pro rozdělování paměti mimalloc

Vysoký výkon je dosažen především díky aplikaci segmentace seznamu volných bloků (free list sharding). Místo jednoho velkého seznamu mimalloc používá dělení na sérii menších seznamů, z nichž každý je připojen k stránce paměti. Tento přístup snižuje fragmentaci a zvyšuje lokalizaci dat v paměti. Pod stránkou paměti se rozumí seskupená sada bloků blízkých velikostí. Na 64bitových systémech je velikost stránky obvykle 64 kB. Pokud na stránce nezůstanou žádné obsazené bloky, je celá uvolněna návratem paměti operačnímu systému, což umožňuje snížit náklady na paměť a fragmentaci v dlouhodobě běžících programech.

Knihovnu lze připojit při spojování nebo načíst pro již zkompilovaný program ("LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram"). Knihovna také poskytuje API pro integraci funkcionality za běhu a jemné řízení chování, například pro připojení zpracovatelů odloženého uvolnění paměti a monotónního zvyšování počitadla referencí. Je možné vytvářet a používat několik "hald" (heap) v aplikaci pro rozdělení do různých oblastí paměti. Včetně toho je možné uvolnit haldu celou, bez procházení a samostatného uvolňování umístěných v ní objektů.

Je zavedená možnost sestavení knihovny v bezpečném režimu, ve kterém se na hranici bloků provádí vložení speciálních kontrolních stránek paměti (guard-page), a také se používá randomizace rozdělení bloků a šifrování seznamů uvolněných bloků. Taková opatření umožňují zablokovat většinu typických technik zneužívání přetečení bufferu v haldě. Při zapnutí bezpečného režimu se výkon sníží přibližně o 3%.

Mezi zvláštnostmi mimalloc se také uvádí, že není náchylný k problémům s nafukováním při vysoké fragmentaci. V nejhorším scénáři se spotřeba paměti zvyšuje o 0,2% pro metadata a může dosáhnout 16,7% pro rozdělenou paměť. Aby se vyloučily konflikty při přístupu k prostředkům, mimalloc používá pouze atomové operace.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster