Microsoft har åpnet koden for mimalloc minneallokeringssystemet

Microsoft har åpnet et bibliotek under MIT-lisensen mmalloc fra implementeringer av et minneallokeringssystem som opprinnelig ble opprettet for kjøretidskomponenter av språk Koka и Lene. Mimalloc er tilpasset for bruk i standardapplikasjoner uten å endre koden og kan fungere som en transparent erstatning for malloc-funksjonen. Støtter arbeid på Windows, macOS, Linux, BSD og andre Unix-lignende systemer.

Nøkkelfunksjonen til mimalloc er dens kompakte implementering (mindre enn 3500 linjer med kode) og svært høy ytelse. I tester utført mimalloc overgikk alle konkurrerende minnetildelingsbiblioteker, inkludert jemalloc, tcmalloc, snmalloc, rpmalloc и forråd.

For å evaluere ytelse, et sett med eksisterende standard tester I noen tester er mimalloc mange ganger raskere enn andre systemer; for eksempel, i testen av objektmigrering mellom forskjellige tråder, viste mimalloc seg å være mer enn 2.5 ganger raskere enn tcmalloc og jemalloc. Samtidig, i de fleste tester, observeres også lavere minneforbruk; i noen situasjoner kan minneforbruket reduseres med 25 %.

Microsoft har åpnet koden for mimalloc minneallokeringssystemet

Høy ytelse oppnås hovedsakelig gjennom bruk av gratis listeskjæring. I stedet for én stor liste, bruker mimalloc en serie med mindre lister, som hver er bundet til en minneside. Denne tilnærmingen reduserer fragmentering og øker datalokaliteten i minnet. En minneside er et gruppert sett med blokker av lignende størrelse. På 64-biters systemer er sidestørrelsen vanligvis 64 KB. Hvis det ikke er noen okkuperte blokker igjen på siden, frigjøres den fullstendig og minnet returneres til operativsystemet, noe som reduserer minnekostnader og fragmentering i langvarige programmer.

Biblioteket kan inkluderes på koblingsstadiet eller lastes inn for et allerede satt sammen program ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Biblioteket tilbyr også API for integrering av funksjonalitet i runtime og finmasket atferdskontroll, for eksempel for tilkobling av lazy memory release handlers og monotont økende referansetellere. Det er mulig å lage og bruke flere "hauger" i en applikasjon for distribusjon på tvers av forskjellige minneområder. Det er også mulig å frigjøre haugen helt, uten å gå gjennom og separat frigjøre gjenstandene som er plassert i den.

Det er mulig å bygge biblioteket i en sikker modus, der spesielle minnesjekksider (guard-pages) erstattes ved blokkgrensene, og randomisering av blokkdistribusjon og kryptering av lister over frigjorte blokker brukes. Slike tiltak gjør det mulig å blokkere de fleste vanlige teknikkene for å utnytte heap-baserte bufferoverløp. Når du aktiverer sikkermodus, reduseres ytelsen med omtrent 3 %.

Blant funksjonene til mimalloc er det også bemerket at det ikke er mottakelig for problemer med oppblåsthet på grunn av stor fragmentering. I verste fall øker minneforbruket med 0.2 % for metadata og kan nå 16.7 % for distribuert minne. For å unngå konflikter når du får tilgang til ressurser, bruker mimalloc kun atomoperasjoner.

Kilde: opennet.ru

Legg til en kommentar