Microsoft otvoril kód pre systém prideľovania pamäte mimalloc

Microsoft otvoril knižnicu pod licenciou MIT mmalloc z implementácií systému prideľovania pamäte pôvodne vytvoreného pre runtime komponenty jazykov koka и Lean. Mimalloc je prispôsobený na použitie v štandardných aplikáciách bez zmeny ich kódu a môže fungovať ako transparentná náhrada za funkciu malloc. Podporuje prácu na Windows, MacOS, Linux, BSD a ďalších systémoch podobných Unixu.

Kľúčovou vlastnosťou mimalloc je jeho kompaktná implementácia (menej ako 3500 riadkov kódu) a veľmi vysoký výkon. IN vykonané testy mimalloc prekonal všetky konkurenčné knižnice prideľovania pamäte, vrátane jemalloc, tcmalloc, snmalloc, rpmalloc и poklad.

Na vyhodnotenie výkonnosti súbor existujúcich štandardné testy V niektorých testoch je mimalloc mnohonásobne rýchlejší ako iné systémy, napríklad pri teste migrácie objektov medzi rôznymi vláknami sa mimalloc ukázal byť viac ako 2.5-krát rýchlejší ako tcmalloc a jemalloc. Zároveň je vo väčšine testov pozorovaná aj nižšia spotreba pamäte, v niektorých situáciách je možné spotrebu pamäte znížiť o 25 %.

Microsoft otvoril kód pre systém prideľovania pamäte mimalloc

Vysoký výkon sa dosahuje najmä použitím voľného shardingu zoznamu. Namiesto jedného veľkého zoznamu používa mimalloc sériu menších zoznamov, z ktorých každý je viazaný na pamäťovú stránku. Tento prístup znižuje fragmentáciu a zvyšuje lokalizáciu údajov v pamäti. Pamäťová stránka je zoskupený súbor blokov podobnej veľkosti. Na 64-bitových systémoch je veľkosť stránky zvyčajne 64 kB. Ak na stránke nezostanú žiadne obsadené bloky, stránka sa úplne uvoľní a pamäť sa vráti operačnému systému, čo znižuje náklady na pamäť a fragmentáciu v dlho spustených programoch.

Knižnica môže byť zahrnutá vo fáze spájania alebo načítaná pre už zostavený program („LD_PRELOAD=/usr/bin/libmimalloc.so myprogram“). Knižnica tiež poskytuje API na integráciu funkčnosti do runtime a jemného riadenia správania, napríklad na pripojenie obslužných programov oneskoreného uvoľnenia pamäte a monotónne zvyšujúce sa počítadlá referencií. V aplikácii je možné vytvoriť a použiť niekoľko „hádov“ na distribúciu medzi rôznymi oblasťami pamäte. Je tiež možné úplne uvoľniť hromadu bez toho, aby ste museli prechádzať a samostatne uvoľňovať predmety v nej umiestnené.

Knižnicu je možné vybudovať v bezpečnom režime, v ktorom sa na hraniciach blokov nahrádzajú špeciálne stránky kontroly pamäte (ochranné stránky), používa sa náhodná distribúcia blokov a šifrovanie zoznamov uvoľnených blokov. Takéto opatrenia umožňujú blokovať najbežnejšie techniky využívania pretečenia vyrovnávacej pamäte na báze haldy. Keď povolíte núdzový režim, výkon sa zníži približne o 3 %.

Medzi vlastnosti mimallocu je tiež potrebné poznamenať, že nie je náchylný na problémy s nadúvaním v dôsledku veľkej fragmentácie. V najhoršom prípade sa spotreba pamäte zvýši o 0.2 % pre metadáta a môže dosiahnuť 16.7 % pre distribuovanú pamäť. Aby sa predišlo konfliktom pri prístupe k zdrojom, mimalloc používa iba atómové operácie.

Zdroj: opennet.ru

Pridať komentár