Microsoft otevřel kód pro systém přidělování paměti mimalloc

Microsoft otevřel knihovnu pod licencí MIT mmalloc z implementací systému alokace paměti původně vytvořeného pro běhové komponenty jazyků Koka и Lean. Mimalloc je přizpůsoben pro použití ve standardních aplikacích beze změny jejich kódu a může fungovat jako transparentní náhrada za funkci malloc. Podporuje práci na Windows, MacOS, Linux, BSD a dalších systémech podobných Unixu.

Klíčovou vlastností mimalloc je jeho kompaktní implementace (méně než 3500 řádků kódu) a velmi vysoký výkon. V provedené testy mimalloc překonal všechny konkurenční knihovny alokace paměti, včetně jemalloc, tcmalloc, snmalloc, rpmalloc и Poklad.

Chcete-li vyhodnotit výkon, soubor existujících standardní testy V některých testech je mimalloc mnohonásobně rychlejší než jiné systémy, například v testu migrace objektů mezi různými vlákny se mimalloc ukázal být více než 2.5krát rychlejší než tcmalloc a jemalloc. Ve většině testů je přitom pozorována i nižší spotřeba paměti, v některých situacích lze spotřebu paměti snížit o 25 %.

Microsoft otevřel kód pro systém přidělování paměti mimalloc

Vysokého výkonu je dosaženo především využitím volného shardingu seznamu. Místo jednoho velkého seznamu používá mimalloc řadu menších seznamů, z nichž každý je vázán na paměťovou stránku. Tento přístup snižuje fragmentaci a zvyšuje umístění dat v paměti. Paměťová stránka je seskupená sada bloků podobné velikosti. Na 64bitových systémech je velikost stránky obvykle 64 kB. Pokud na stránce nezůstanou žádné obsazené bloky, je zcela uvolněna a paměť je vrácena operačnímu systému, což snižuje náklady na paměť a fragmentaci u dlouho běžících programů.

Knihovnu lze zahrnout ve fázi propojení nebo načíst pro již sestavený program („LD_PRELOAD=/usr/bin/libmimalloc.so myprogram“). Knihovna také poskytuje API pro integraci funkčnosti do běhového prostředí a jemného řízení chování, například pro připojení obslužných programů pomalého uvolňování paměti a monotónního zvyšování referenčních čítačů. V aplikaci je možné vytvořit a používat několik „hromad“ pro distribuci přes různé oblasti paměti. Je také možné hromadu zcela uvolnit, aniž byste museli procházet a samostatně uvolňovat objekty v ní umístěné.

Knihovnu je možné vybudovat v bezpečném režimu, ve kterém se na hranicích bloků nahrazují speciální stránky kontroly paměti (ochranné stránky) a používá se náhodná distribuce bloků a šifrování seznamů uvolněných bloků. Taková opatření umožňují blokovat většinu běžných technik pro využívání přetečení vyrovnávací paměti založené na haldě. Když povolíte nouzový režim, výkon se sníží přibližně o 3 %.

Mezi rysy mimalloc je také třeba poznamenat, že není náchylný k problémům s nadýmáním kvůli velké fragmentaci. V nejhorším případě se spotřeba paměti zvýší o 0.2 % u metadat a může dosáhnout 16.7 % u distribuované paměti. Aby se zabránilo konfliktům při přístupu ke zdrojům, používá mimalloc pouze atomické operace.

Zdroj: opennet.ru

Přidat komentář