Microsoft on avannut koodin mimalloc-muistin varausjärjestelmälle

Microsoft on avannut kirjaston MIT-lisenssillä mmalloc muistinvarausjärjestelmän toteutuksista, jotka on alun perin luotu kielten ajonaikaisille komponenteille Koka и Lean. Mimalloc on sovitettu käytettäväksi vakiosovelluksissa niiden koodia muuttamatta ja se voi toimia läpinäkyvänä malloc-toiminnon korvaajana. Tukee työtä Windows-, macOS-, Linux-, BSD- ja muissa Unix-tyyppisissä järjestelmissä.

Mimallocin tärkein ominaisuus on sen kompakti toteutus (alle 3500 koodiriviä) ja erittäin korkea suorituskyky. SISÄÄN suoritetut testit mimalloc ylitti kaikki kilpailevat muistinvarauskirjastot, mukaan lukien jemalloc, tcmalloc, snmalloc, rpmalloc и Hamstrata.

Suorituksen arvioimiseksi joukko olemassa olevia standarditestit Joissakin testeissä mimalloc on monta kertaa nopeampi kuin muut järjestelmät, esimerkiksi eri säikeiden välisen objektin siirtymisen testissä mimalloc osoittautui yli 2.5 kertaa nopeammaksi kuin tcmalloc ja jemalloc. Samaan aikaan useimmissa testeissä havaitaan myös pienempää muistin kulutusta, joissakin tilanteissa muistin kulutusta voidaan vähentää 25%.

Microsoft on avannut koodin mimalloc-muistin varausjärjestelmälle

Korkea suorituskyky saavutetaan pääasiassa vapaan listan jakamisen avulla. Yhden suuren luettelon sijasta mimalloc käyttää sarjaa pienempiä listoja, joista jokainen on sidottu muistisivulle. Tämä lähestymistapa vähentää pirstoutumista ja lisää tietojen sijaintia muistissa. Muistisivu on ryhmitelty joukko samankokoisia lohkoja. 64-bittisissä järjestelmissä sivun koko on yleensä 64 kt. Jos sivulla ei ole enää yhtään varattua lohkoa, se vapautetaan kokonaan ja muisti palautetaan käyttöjärjestelmään, mikä vähentää muistikustannuksia ja pirstoutumista pitkään käynnissä olevissa ohjelmissa.

Kirjasto voidaan sisällyttää linkitysvaiheeseen tai ladata jo koottuun ohjelmaan ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Kirjasto tarjoaa myös API toiminnallisuuden integroimiseen ajonaikaiseen ja hienorakeiseen käyttäytymisen hallintaan, esimerkiksi laiskaiden muistinvapautuskäsittelijöiden kytkemiseen ja monotonisesti kasvattaviin referenssilaskureihin. Sovelluksessa on mahdollista luoda ja käyttää useita "kasoja" jaettavaksi eri muistialueille. Kasa on myös mahdollista vapauttaa kokonaan, ilman siihen asetettujen esineiden läpikäymistä ja erikseen vapauttamista.

Kirjasto on mahdollista rakentaa turvatilassa, jossa lohkorajoilla korvataan erityiset muistin tarkistussivut (suojasivut) ja käytetään lohkojakauman satunnaistamista ja vapautettujen lohkojen luetteloiden salausta. Tällaiset toimenpiteet mahdollistavat yleisimmät tekniikat kasopohjaisten puskurin ylivuotojen hyödyntämiseksi. Kun otat vikasietotilan käyttöön, suorituskyky heikkenee noin 3 %.

Mimallocin ominaisuuksien joukossa on myös huomattava, että se ei ole altis turvotukseen liittyville ongelmille suuren pirstoutumisen vuoksi. Pahimmassa tapauksessa muistin kulutus kasvaa 0.2 % metatiedon osalta ja voi nousta 16.7 % hajautetun muistin osalta. Välttääkseen ristiriidat resursseja käytettäessä mimalloc käyttää vain ydintoimintoja.

Lähde: opennet.ru

Lisää kommentti