„Microsoft“ atidarė „mimalloc“ atminties paskirstymo sistemos kodą

„Microsoft“ atidarė biblioteką pagal MIT licenciją mmalloc iš atminties paskirstymo sistemos, iš pradžių sukurtos kalbų vykdymo laiko komponentams, diegimų Koka и Liesos. „Mimalloc“ yra pritaikyta naudoti standartinėse programose nekeičiant jų kodo ir gali veikti kaip skaidrus „malloc“ funkcijos pakaitalas. Palaiko darbą Windows, macOS, Linux, BSD ir kitose į Unix panašiose sistemose.

Pagrindinė mimalloc ypatybė yra kompaktiškas įgyvendinimas (mažiau nei 3500 kodo eilučių) ir labai didelis našumas. IN atlikti bandymai mimalloc pranoko visas konkuruojančias atminties paskirstymo bibliotekas, įskaitant jemalloc, tcmalloc, snmalloc, rpmalloc и Sandara.

Norint įvertinti našumą, esamų rinkinys standartiniai testai Kai kuriuose testuose „mimalloc“ yra daug kartų greitesnis nei kitos sistemos; pavyzdžiui, atliekant objektų migracijos tarp skirtingų gijų testą, „mimalloc“ pasirodė esąs daugiau nei 2.5 karto greitesnis nei „tcmalloc“ ir „jemalloc“. Tuo pačiu metu daugumoje testų taip pat pastebimas mažesnis atminties suvartojimas, kai kuriose situacijose atminties suvartojimas gali būti sumažintas 25%.

„Microsoft“ atidarė „mimalloc“ atminties paskirstymo sistemos kodą

Didelis našumas pasiekiamas daugiausia naudojant nemokamą sąrašo dalijimąsi. Vietoj vieno didelio sąrašo, mimalloc naudoja keletą mažesnių sąrašų, kurių kiekvienas yra susietas su atminties puslapiu. Šis metodas sumažina suskaidymą ir padidina duomenų vietą atmintyje. Atminties puslapis yra sugrupuotas panašaus dydžio blokų rinkinys. 64 bitų sistemose puslapio dydis paprastai yra 64 KB. Jei puslapyje nelieka užimtų blokų, jis visiškai atlaisvinamas ir atmintis grąžinama operacinei sistemai, o tai sumažina atminties sąnaudas ir fragmentaciją ilgai veikiančiose programose.

Biblioteka gali būti įtraukta susiejimo etape arba įkeliama jau surinktai programai („LD_PRELOAD=/usr/bin/libmimalloc.so myprogram“). Biblioteka taip pat teikia API funkcionalumui integruoti į vykdymo laiką ir smulkų elgsenos valdymą, pavyzdžiui, prijungti tingias atminties išleidimo tvarkykles ir monotoniškai didinti atskaitos skaitiklius. Programoje galima sukurti ir naudoti keletą „krūvų“, skirtų paskirstyti skirtingose ​​atminties srityse. Taip pat galima visiškai išlaisvinti krūvą, nepraeinant ir atskirai neatlaisvinant joje esančių daiktų.

Biblioteką galima kurti saugiuoju režimu, kai blokų ribose pakeičiami specialūs atminties tikrinimo puslapiai (apsauginiai puslapiai), naudojamas blokų paskirstymo atsitiktinis atskyrimas ir atlaisvintų blokų sąrašų šifravimas. Tokios priemonės leidžia blokuoti dažniausiai naudojamus buferio perpildymo krūvoje būdus. Kai įjungiate saugųjį režimą, našumas sumažėja maždaug 3%.

Tarp mimalloko savybių taip pat pažymima, kad dėl didelio susiskaidymo jis nėra jautrus pilvo pūtimo problemoms. Blogiausiu atveju metaduomenų atminties suvartojimas padidėja 0.2%, o paskirstytoje atmintyje gali siekti 16.7%. Kad išvengtų konfliktų, kai pasiekiate išteklius, mimalloc naudoja tik atomines operacijas.

Šaltinis: opennet.ru

Добавить комментарий