Microsoft je odprl kodo za sistem dodeljevanja pomnilnika mimalloc

Microsoft je odprl knjižnico pod licenco MIT mmalloc iz implementacij sistema za dodeljevanje pomnilnika, ki je bil prvotno ustvarjen za izvajalne komponente jezikov Koka и Pusto. Mimalloc je prilagojen za uporabo v standardnih aplikacijah brez spreminjanja njihove kode in lahko deluje kot transparentna zamenjava za funkcijo malloc. Podpira delo na Windows, macOS, Linux, BSD in drugih Unix podobnih sistemih.

Ključna značilnost mimalloca je njegova kompaktna implementacija (manj kot 3500 vrstic kode) in zelo visoka zmogljivost. IN opravljeni testi mimalloc je presegel vse konkurenčne knjižnice za dodeljevanje pomnilnika, vključno z jemalloc, tcmalloc, snmalloc, rpmalloc и Zaklad.

Za ovrednotenje uspešnosti nabor obstoječih standardni testi V nekaterih testih je mimalloc mnogokrat hitrejši od drugih sistemov; na primer pri testu selitve objektov med različnimi nitmi se je izkazalo, da je mimalloc več kot 2.5-krat hitrejši od tcmalloc in jemalloc. Hkrati je v večini testov opažena tudi nižja poraba pomnilnika, v nekaterih situacijah se lahko poraba pomnilnika zmanjša za 25%.

Microsoft je odprl kodo za sistem dodeljevanja pomnilnika mimalloc

Visoka zmogljivost je dosežena predvsem z uporabo brezplačnega razdeljevanja seznamov. Namesto enega velikega seznama mimalloc uporablja niz manjših seznamov, od katerih je vsak vezan na pomnilniško stran. Ta pristop zmanjša razdrobljenost in poveča lokalnost podatkov v pomnilniku. Pomnilniška stran je združen niz blokov podobne velikosti. V 64-bitnih sistemih je velikost strani običajno 64 KB. Če na strani ni več zasedenih blokov, se le-ta popolnoma sprosti in pomnilnik se vrne operacijskemu sistemu, kar zmanjša stroške pomnilnika in razdrobljenost pri dolgo delujočih programih.

Knjižnico je mogoče vključiti v fazi povezovanja ali naložiti za že sestavljen program (»LD_PRELOAD=/usr/bin/libmimalloc.so myprogram«). Knjižnica nudi tudi API za integracijo funkcionalnosti v čas izvajanja in natančen nadzor obnašanja, na primer za povezovanje rokovalcev za zakasnjeno sprostitev pomnilnika in monotono povečevanje referenčnih števcev. V aplikaciji je mogoče ustvariti in uporabiti več "kop" za distribucijo po različnih pomnilniških področjih. Možno je tudi v celoti osvoboditi kup, ne da bi šli skozi in ločeno osvobodili predmete, ki so v njem.

Knjižnico je možno zgraditi v varnem načinu, v katerem se na mejah blokov zamenjajo posebne strani za preverjanje pomnilnika (guard-pages), uporablja pa se randomizacija porazdelitve blokov in šifriranje seznamov sproščenih blokov. Takšni ukrepi omogočajo blokiranje najpogostejših tehnik za izkoriščanje prekoračitev medpomnilnika na osnovi kopice. Ko omogočite varni način, se zmogljivost zmanjša za približno 3 %.

Med značilnostmi mimalloka je tudi opozoriti, da ni dovzeten za težave z napihnjenostjo zaradi velike razdrobljenosti. V najslabšem primeru se poraba pomnilnika poveča za 0.2 % za metapodatke in lahko doseže 16.7 % za porazdeljeni pomnilnik. Da bi se izognili konfliktom pri dostopanju do virov, mimalloc uporablja samo atomske operacije.

Vir: opennet.ru

Dodaj komentar