Microsoft har öppnat koden för mimalloc minnesallokeringssystem

Microsoft har öppnat ett bibliotek under MIT-licensen mmalloc från implementeringar av ett minnesallokeringssystem som ursprungligen skapades för runtime-komponenter av språk Koka и Lean. Mimalloc är anpassad för användning i standardapplikationer utan att ändra deras kod och kan fungera som en transparent ersättning för malloc-funktionen. Stöder arbete på Windows, macOS, Linux, BSD och andra Unix-liknande system.

Nyckelfunktionen hos mimalloc är dess kompakta implementering (mindre än 3500 rader kod) och mycket höga prestanda. I utförda tester mimalloc överträffade alla konkurrerande minnesallokeringsbibliotek, inklusive jemalloc, tcmalloc, snmalloc, rpmalloc и Hamstra.

För att utvärdera prestanda, en uppsättning av befintliga standardtester I vissa tester är mimalloc många gånger snabbare än andra system, till exempel i testet av objektmigrering mellan olika trådar visade sig mimalloc vara mer än 2.5 gånger snabbare än tcmalloc och jemalloc. Samtidigt, i de flesta tester, observeras också lägre minnesförbrukning, i vissa situationer kan minnesförbrukningen minskas med 25 %.

Microsoft har öppnat koden för mimalloc minnesallokeringssystem

Hög prestanda uppnås främst genom användning av gratis listskärning. Istället för en stor lista använder mimalloc en serie mindre listor, som var och en är bunden till en minnessida. Detta tillvägagångssätt minskar fragmentering och ökar datalokaliteten i minnet. En minnessida är en grupperad uppsättning block av liknande storlek. På 64-bitarssystem är sidstorleken vanligtvis 64 KB. Om det inte finns några upptagna block kvar på sidan frigörs den helt och minnet återförs till operativsystemet, vilket minskar minneskostnaderna och fragmenteringen i långvariga program.

Biblioteket kan inkluderas i länkningsstadiet eller laddas för ett redan monterat program ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Biblioteket tillhandahåller också API för integrering av funktionalitet i runtime och finkornig beteendekontroll, till exempel för att koppla ihop hanterare för lata minnesutlösningar och monotont öka referensräknare. Det är möjligt att skapa och använda flera "högar" i en applikation för distribution över olika minnesområden. Det är också möjligt att frigöra högen helt, utan att gå igenom och separat frigöra föremålen som placerats i den.

Det är möjligt att bygga biblioteket i ett säkert läge, där speciella minneskontrollsidor (guard-pages) ersätts vid blockgränserna, och randomisering av blockdistribution och kryptering av listor över frigjorda block används. Sådana åtgärder gör det möjligt att blockera de vanligaste teknikerna för att utnyttja heap-baserade buffertspill. När du aktiverar felsäkert läge minskar prestandan med cirka 3 %.

Bland funktionerna hos mimalloc noteras det också att det inte är mottagligt för problem med uppblåsthet på grund av stor fragmentering. I värsta fall ökar minnesförbrukningen med 0.2 % för metadata och kan nå 16.7 % för distribuerat minne. För att undvika konflikter vid åtkomst till resurser använder mimalloc endast atomoperationer.

Källa: opennet.ru

Lägg en kommentar