Microsoft har öppnat koden för systemet för minnesfördelning mimalloc

Microsoft har lanserat ett bibliotek under MIT-licensen mimalloc med implementationer av ett minnesdistributionssystem, ursprungligen skapat för runtime-komponenter i sprÄk Koka och Lean. Mimalloc Àr anpassad för anvÀndning i typiska applikationer utan att deras kod behöver Àndras och kan fungera som en transparent ersÀttning för malloc-funktionen. Den stöder anvÀndning i Windows, macOS, Linux, BSD och andra Unix-liknande system.

En nyckelfunktion hos mimalloc Àr kompaktheten i implementationen (mindre Àn 3500 kodrader) och den mycket höga prestandan. I genomförda tester har mimalloc övertrÀffat alla konkurrerande minnesdistributionsbibliotek vad gÀller prestanda, inklusive jemalloc, tcmalloc, snmalloc, rpmalloc och Hoard.

För att bedöma prestandan har en uppsÀttning redan existerande typiska tester I vissa tester övertrÀffar mimalloc andra system med stor marginal, till exempel i testet för migration av objekt mellan olika trÄdar visade sig mimalloc vara mer Àn 2,5 gÄnger snabbare Àn tcmalloc och jemalloc. Samtidigt observeras i de flesta tester Àven en lÀgre minnesförbrukning, i vissa situationer kan minnesanvÀndningen minskas med upp till 25%.

Microsoft har öppnat koden för systemet för minnesfördelning mimalloc

Den höga prestandan uppnÄs frÀmst genom anvÀndning av segmentering av listan med fria block (free list sharding). IstÀllet för en stor lista anvÀnder mimalloc en uppdelning i en serie mindre listor, var och en kopplad till en minnessida. Denna metod minskar fragmenteringen och ökar lokaliseringen av data i minnet. En minnessida definieras som en gruppering av block som Àr lika i storlek. PÄ 64-bitars system Àr storleken pÄ en sida vanligtvis 64 KB. Om det inte finns nÄgra anvÀnda block kvar pÄ sidan, frigörs den helt och meddelar operativsystemet att minnet har Ätervunnits, vilket minskar minneskostnaderna och fragmenteringen i lÄngvariga program.

Biblioteket kan inkluderas vid lÀnkning eller laddas in för ett redan kompilerat program ("LD_PRELOAD=\/usr\/bin\/libmimalloc.so myprogram"). Biblioteket erbjuder ocksÄ API för att integrera funktionalitet i runtime och finjustera beteendet, till exempel för att koppla hanterare för fördröjd minnesÄtervinning och monotont öka referensrÀknare. Det finns möjlighet att skapa och anvÀnda flera "högar" (heap) i applikationen för att fördela minnet över olika omrÄden. Det Àr Àven möjligt att frigöra hela högen utan att gÄ igenom och frigöra enskilda objekt.

Det finns möjlighet att kompilera biblioteket i sÀkerhetslÀge, dÀr det vid blockgrÀnser sÀtts in speciella kontrollsidor för minnet (guard-page), och dÀr dessutom blockfördelningen randomiseras och listorna för frigjorda block krypteras. Dessa ÄtgÀrder blockerar de flesta typiska metoderna för att utnyttja buffertöverskridningar i högar. Vid aktivering av sÀkerhetslÀge minskar prestandan med cirka 3%.

Bland sÀrskildheterna hos mimalloc finns ocksÄ att den inte pÄverkas av problem med uppsvullnad vid hög fragmentering. I det sÀmsta scenariot ökar minnesanvÀndningen med 0,2% för metadata och kan nÄ upp till 16,7% för det fördelade minnet. För att undvika konflikter vid Ätkomst till resurser anvÀnder mimalloc enbart atomÀra operationer.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster