Microsoft har åbnet koden til mimalloc-hukommelsesallokeringssystemet

Microsoft har åbnet et bibliotek under MIT-licensen mmalloc fra implementeringer af et hukommelsesallokeringssystem, der oprindeligt blev oprettet til runtime-komponenter af sprog Koka и Lean. Mimalloc er tilpasset til brug i standardapplikationer uden at ændre deres kode og kan fungere som en gennemsigtig erstatning for malloc-funktionen. Understøtter arbejde på Windows, macOS, Linux, BSD og andre Unix-lignende systemer.

Nøglefunktionen ved mimalloc er dens kompakte implementering (mindre end 3500 linjer kode) og meget høj ydeevne. I udførte tests mimalloc klarede sig bedre end alle konkurrerende hukommelsesallokeringsbiblioteker, inklusive jemalloc, tcmalloc, snmalloc, rpmalloc и Hamstring.

For at evaluere ydeevne, et sæt af eksisterende standard tests I nogle test er mimalloc mange gange hurtigere end andre systemer; for eksempel i testen af ​​objektmigrering mellem forskellige tråde viste mimalloc sig at være mere end 2.5 gange hurtigere end tcmalloc og jemalloc. Samtidig er der i de fleste tests også observeret et lavere hukommelsesforbrug; i nogle situationer kan hukommelsesforbruget reduceres med 25 %.

Microsoft har åbnet koden til mimalloc-hukommelsesallokeringssystemet

Høj ydeevne opnås hovedsageligt gennem brug af gratis listeskæring. I stedet for én stor liste bruger mimalloc en række mindre lister, som hver er bundet til en hukommelsesside. Denne tilgang reducerer fragmentering og øger datalokaliteten i hukommelsen. En hukommelsesside er et grupperet sæt af blokke af lignende størrelse. På 64-bit systemer er sidestørrelsen typisk 64 KB. Hvis der ikke er nogen besatte blokke tilbage på siden, frigøres den fuldstændigt, og hukommelsen returneres til operativsystemet, hvilket reducerer hukommelsesomkostninger og fragmentering i langvarige programmer.

Biblioteket kan inkluderes på linkningsstadiet eller indlæses for et allerede samlet program ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Biblioteket sørger også for API til integrering af funktionalitet i runtime og finmasket adfærdskontrol, for eksempel til tilslutning af lazy memory release handlers og monotont forøgelse af referencetællere. Det er muligt at oprette og bruge flere "dynger" i en applikation til distribution på tværs af forskellige hukommelsesområder. Det er også muligt at frigøre bunken helt uden at gå igennem og separat frigøre de genstande, der er placeret i den.

Det er muligt at bygge biblioteket i en sikker tilstand, hvor specielle hukommelseskontrolsider (guard-pages) erstattes ved blokgrænserne, og randomisering af blokdistribution og kryptering af lister over frigjorte blokke anvendes. Sådanne foranstaltninger gør det muligt at blokere de mest almindelige teknikker til at udnytte heap-baserede bufferoverløb. Når du aktiverer fejlsikret tilstand, falder ydeevnen med cirka 3 %.

Blandt funktionerne i mimalloc bemærkes det også, at det ikke er modtageligt for problemer med oppustethed på grund af stor fragmentering. I det værste tilfælde stiger hukommelsesforbruget med 0.2 % for metadata og kan nå op på 16.7 % for distribueret hukommelse. For at undgå konflikter ved adgang til ressourcer bruger mimalloc kun atomoperationer.

Kilde: opennet.ru

Tilføj en kommentar