Microsoft heeft de code voor het mimalloc-geheugentoewijzingssysteem geopend

Microsoft heeft een bibliotheek geopend onder de MIT-licentie mmalloc van implementaties van een geheugentoewijzingssysteem dat oorspronkelijk is gemaakt voor runtimecomponenten van talen Koka и Lean. Mimalloc is aangepast voor gebruik in standaardtoepassingen zonder de code te wijzigen en kan fungeren als een transparante vervanging voor de malloc-functie. Ondersteunt werk op Windows, macOS, Linux, BSD en andere Unix-achtige systemen.

Het belangrijkste kenmerk van mimalloc is de compacte implementatie (minder dan 3500 regels code) en zeer hoge prestaties. IN tests uitgevoerd mimalloc presteerde beter dan alle concurrerende geheugentoewijzingsbibliotheken, inclusief jemalloc, tcmalloc, snmalloc, rpmalloc и oppotten.

Om de prestaties te evalueren, is een reeks bestaande standaard testen In sommige tests is mimalloc vele malen sneller dan andere systemen; bij de test van objectmigratie tussen verschillende threads bleek mimalloc bijvoorbeeld ruim 2.5 keer sneller dan tcmalloc en jemalloc. Tegelijkertijd wordt bij de meeste tests ook een lager geheugenverbruik waargenomen; in sommige situaties kan het geheugenverbruik met 25% worden verminderd.

Microsoft heeft de code voor het mimalloc-geheugentoewijzingssysteem geopend

Hoge prestaties worden voornamelijk bereikt door het gebruik van gratis lijst-sharding. In plaats van één grote lijst gebruikt mimalloc een reeks kleinere lijsten, die elk aan een geheugenpagina zijn gebonden. Deze aanpak vermindert fragmentatie en vergroot de gegevenslocatie in het geheugen. Een geheugenpagina is een gegroepeerde set blokken van vergelijkbare grootte. Op 64-bits systemen is de paginagrootte doorgaans 64 KB. Als er geen bezette blokken meer op de pagina staan, wordt deze volledig vrijgegeven en wordt het geheugen teruggestuurd naar het besturingssysteem, wat de geheugenkosten en fragmentatie in langlopende programma's vermindert.

De bibliotheek kan worden opgenomen in de koppelingsfase of worden geladen voor een reeds samengesteld programma (“LD_PRELOAD=/usr/bin/libmimalloc.so mijnprogramma”). De bibliotheek biedt ook API voor het integreren van functionaliteit in runtime en fijnmazige gedragscontrole, bijvoorbeeld voor het verbinden van lazy memory release handlers en monotoon toenemende referentietellers. Het is mogelijk om in een applicatie meerdere “heaps” te creëren en te gebruiken voor distributie over verschillende geheugengebieden. Het is ook mogelijk om de hoop geheel vrij te maken, zonder de daarin geplaatste voorwerpen te doorlopen en afzonderlijk los te maken.

Het is mogelijk om de bibliotheek in een veilige modus te bouwen, waarin speciale geheugencontrolepagina's (bewakingspagina's) worden vervangen bij de blokgrenzen, en er gebruik wordt gemaakt van randomisatie van de blokverdeling en encryptie van lijsten met vrijgegeven blokken. Dergelijke maatregelen maken het mogelijk de meest gebruikelijke technieken voor het exploiteren van op heap gebaseerde bufferoverflows te blokkeren. Wanneer u de Veilige modus inschakelt, nemen de prestaties met ongeveer 3% af.

Onder de kenmerken van mimalloc wordt ook opgemerkt dat het niet vatbaar is voor problemen met een opgeblazen gevoel als gevolg van grote fragmentatie. In het ergste geval stijgt het geheugengebruik met 0.2% voor metadata en kan het oplopen tot 16.7% voor gedistribueerd geheugen. Om conflicten te voorkomen bij de toegang tot bronnen, gebruikt mimalloc alleen atomaire bewerkingen.

Bron: opennet.ru

Voeg een reactie