A Microsoft megnyitotta a mimalloc memóriaelosztó rendszer kódját

A Microsoft megnyitott egy könyvtárat az MIT licenc alatt mmalloc egy eredetileg a nyelvek futásidejű összetevőihez létrehozott memória-lefoglaló rendszer megvalósításaiból Koka и Hajolj. A Mimalloc a szabványos alkalmazásokban való használatra lett adaptálva a kód megváltoztatása nélkül, és a malloc funkció átlátszó helyettesítőjeként működhet. Támogatja a Windows, macOS, Linux, BSD és más Unix-szerű rendszereken végzett munkát.

A mimalloc legfontosabb jellemzője a kompakt megvalósítás (kevesebb, mint 3500 kódsor) és a nagyon nagy teljesítmény. BAN BEN elvégzett tesztek A mimalloc felülmúlta az összes versengő memóriafoglalási könyvtárat, beleértve a jemalloc, tcmalloc, snmalloc, rpmalloc и Felhalmoz.

A teljesítmény értékeléséhez a meglévők halmaza szabványos tesztek Egyes tesztekben a mimalloc sokszor gyorsabb, mint más rendszerek; például a különböző szálak közötti objektummigráció tesztje során a mimalloc több mint 2.5-szer gyorsabbnak bizonyult, mint a tcmalloc és a jemalloc. Ugyanakkor a legtöbb tesztnél alacsonyabb memóriafelhasználás is megfigyelhető, bizonyos helyzetekben a memóriafogyasztás 25%-kal is csökkenthető.

A Microsoft megnyitotta a mimalloc memóriaelosztó rendszer kódját

A nagy teljesítmény elsősorban a szabad listafelosztás használatával érhető el. Egy nagy lista helyett a mimalloc egy sor kisebb listát használ, amelyek mindegyike egy memóriaoldalhoz van kötve. Ez a megközelítés csökkenti a töredezettséget és növeli az adatok helyét a memóriában. A memórialap hasonló méretű blokkok csoportos halmaza. 64 bites rendszereken az oldal mérete általában 64 KB. Ha nem marad elfoglalt blokk az oldalon, akkor az teljesen felszabadul, és a memória visszakerül az operációs rendszerbe, ami csökkenti a memóriaköltséget és a hosszan futó programok töredezettségét.

A könyvtár beépíthető a linkelési szakaszba, vagy betölthető egy már összeállított programhoz („LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). A könyvtár is biztosítja API a funkcionalitás futásidejű és finomszemcsés viselkedésvezérlésbe való integrálására, például lusta memóriafelszabadító kezelők csatlakoztatására és monoton módon növekvő referenciaszámlálókra. Lehetőség van egy alkalmazásban több „kupac” létrehozására és használatára, amelyek a különböző memóriaterületeken való elosztásra szolgálnak. Lehetőség van arra is, hogy a kupacot teljesen felszabadítsa anélkül, hogy átmenne és külön-külön felszabadítaná a benne elhelyezett tárgyakat.

Lehetőség van a könyvtár biztonságos módban történő felépítésére, amelyben a blokkhatárokon speciális memória-ellenőrző oldalakat (védőoldalakat) helyettesítenek, és a blokkok elosztásának randomizálását és a felszabadult blokkok listáinak titkosítását alkalmazzák. Az ilyen intézkedések lehetővé teszik a halom alapú puffertúlcsordulások kihasználására szolgáló leggyakoribb technikák blokkolását. Ha engedélyezi a Biztonságos módot, a teljesítmény körülbelül 3%-kal csökken.

A mimalloc jellemzői között azt is meg kell jegyezni, hogy a nagy töredezettség miatt nem érzékeny a puffadásos problémákra. A legrosszabb esetben a memóriafogyasztás 0.2%-kal nő a metaadatoknál, és elérheti a 16.7%-ot az elosztott memória esetében. Az erőforrásokhoz való hozzáférés során felmerülő konfliktusok elkerülése érdekében a mimalloc csak atomi műveleteket használ.

Forrás: opennet.ru

Hozzászólás