Microsoft het die kode vir die mimalloc-geheuetoewysingstelsel oopgemaak

Microsoft het 'n biblioteek onder die MIT-lisensie geopen mmalloc van die implementering van die geheuetoewysingstelsel, oorspronklik geskep vir die looptydkomponente van tale Koka и Leun. Mimalloc is aangepas vir gebruik in tipiese toepassings sonder om hul kode te verander en kan as 'n deursigtige plaasvervanger vir die malloc-funksie dien. Werk word ondersteun op Windows, macOS, Linux, BSD en ander Unix-agtige stelsels.

Die sleutelkenmerk van mimalloc is sy kompakte implementering (minder as 3500 reëls kode) en baie hoë werkverrigting. IN toetse uitgevoer mimalloc het beter gevaar as alle mededingende geheue-toekenningsbiblioteke, insluitend jemalloc, tcmalloc, snmalloc, rpmalloc и skat.

Om die prestasie te evalueer, 'n stel van reeds bestaande standaard toetse In sommige toetse is mimalloc 'n paar keer vinniger as ander stelsels, byvoorbeeld, in die toets van voorwerpmigrasie tussen verskillende drade, het mimalloc geblyk meer as 2.5 keer vinniger te wees as tcmalloc en jemalloc. Terselfdertyd, in die meeste toetse, word laer geheueverbruik ook waargeneem; in sommige situasies kan geheueverbruik met 25% verminder word.

Microsoft het die kode vir die mimalloc-geheuetoewysingstelsel oopgemaak

Hoë werkverrigting word hoofsaaklik behaal deur die gebruik van gratis lysversplintering. In plaas van 'n enkele groot lys, gebruik mimalloc 'n reeks kleiner lyste, elk gebind aan 'n bladsy geheue. Hierdie benadering verminder fragmentasie en verbeter datalokalisering in geheue. 'n Geheuebladsy is 'n gegroepeerde stel blokke van soortgelyke grootte. Op 64-bis-stelsels is die bladsygrootte tipies 64 KB. As daar geen besette blokke op die bladsy oor is nie, word dit heeltemal bevry en word geheue na die bedryfstelsel teruggestuur, wat geheuekoste en fragmentasie in langlopende programme verminder.

Die biblioteek kan by die koppelingstadium ingesluit word of gelaai word vir 'n reeds geboude program ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Die biblioteek verskaf ook API vir die integrasie van funksionaliteit in runtime en fyn-instelling gedrag, byvoorbeeld, vir die koppeling van hanteerders vir vertraagde geheue vrystelling en eentonige toename in verwysing tellers. Dit is moontlik om verskeie "hope" (hoop) in die toepassing te skep en te gebruik vir verspreiding oor verskillende areas van geheue. Dit is veral moontlik om die hele hoop vry te laat, sonder opsomming en aparte vrystelling van die voorwerpe wat daarin geplaas is.

Dit is moontlik om die biblioteek in veilige modus te bou, waarin spesiale geheuekontrolebladsye (wagbladsy) by die blokgrens vervang word, en blokverspreiding ewekansig en lyste van vrygestelde blokke geënkripteer word. Sulke maatreëls laat die meeste tipiese hoopbuffer-oorloop-uitbuitingstegnieke blokkeer. Wanneer jy veilige modus aktiveer, word werkverrigting met ongeveer 3% verminder.

Van die kenmerke van mimalloc word ook opgemerk dat dit nie vatbaar is vir opblaasprobleme met groot fragmentasie nie. In die ergste geval verhoog geheueverbruik met 0.2% vir metadata en kan dit so hoog as 16.7% wees vir gedeelde geheue. Om konflikte te vermy wanneer toegang tot hulpbronne verkry word, gebruik mimalloc slegs atoombewerkings.

Bron: opennet.ru

Voeg 'n opmerking