Microsoft je otvorio kod za sustav dodjele memorije mimalloc

Microsoft je otvorio knjižnicu pod licencom MIT-a mmalloc iz implementacija sustava dodjele memorije izvorno stvorenog za komponente vremena izvođenja jezika Koka и Lean. Mimalloc je prilagođen za korištenje u standardnim aplikacijama bez mijenjanja njihovog koda i može djelovati kao transparentna zamjena za malloc funkciju. Podržava rad na Windows, macOS, Linux, BSD i drugim Unix sličnim sustavima.

Ključna značajka mimalloca je njegova kompaktna implementacija (manje od 3500 redaka koda) i vrlo visoke performanse. U izvršena ispitivanja mimalloc je nadmašio sve konkurentske biblioteke za dodjelu memorije, uključujući jemalloc, tcmalloc, snmalloc, rpmalloc и riznica.

Za procjenu izvedbe, skup postojećih standardni testovi U nekim testovima, mimalloc je mnogo puta brži od drugih sustava; na primjer, u testu migracije objekata između različitih niti, mimalloc se pokazao više od 2.5 puta bržim od tcmalloc i jemalloc. Istodobno, u većini testova uočena je i niža potrošnja memorije, u nekim situacijama potrošnja memorije može se smanjiti za 25%.

Microsoft je otvorio kod za sustav dodjele memorije mimalloc

Visoke performanse uglavnom se postižu upotrebom besplatnog dijeljenja popisa. Umjesto jednog velikog popisa, mimalloc koristi niz manjih popisa, od kojih je svaki vezan za memorijsku stranicu. Ovaj pristup smanjuje fragmentaciju i povećava lokalizaciju podataka u memoriji. Memorijska stranica je grupiran skup blokova slične veličine. Na 64-bitnim sustavima veličina stranice je obično 64 KB. Ako na stranici nema preostalih zauzetih blokova, ona se potpuno oslobađa i memorija se vraća operativnom sustavu, što smanjuje troškove memorije i fragmentaciju u dugotrajnim programima.

Knjižnica se može uključiti u fazi povezivanja ili učitati za već sastavljeni program (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Knjižnica također nudi API za integraciju funkcionalnosti u vrijeme izvođenja i preciznu kontrolu ponašanja, na primjer, za povezivanje lijenih rukovatelja oslobađanjem memorije i monotono povećanje referentnih brojača. Moguće je stvoriti i koristiti nekoliko "hrpa" u aplikaciji za distribuciju po različitim memorijskim područjima. Također je moguće u potpunosti osloboditi gomilu, bez prolaska i odvojenog oslobađanja objekata koji su u njoj smješteni.

Moguće je izgraditi biblioteku u sigurnom načinu rada, u kojem se posebne stranice za provjeru memorije (guard-pages) zamjenjuju na granicama blokova, a koristi se randomizacija distribucije blokova i šifriranje popisa oslobođenih blokova. Takve mjere omogućuju blokiranje najčešćih tehnika za iskorištavanje prekoračenja međuspremnika temeljenog na hrpi. Kada omogućite Safe Mode, izvedba se smanjuje za približno 3%.

Među značajkama mimalloka također je navedeno da nije osjetljiv na probleme s nadutošću zbog velike fragmentacije. U najgorem slučaju, potrošnja memorije povećava se za 0.2% za metapodatke i može doseći 16.7% za distribuiranu memoriju. Kako bi se izbjegli sukobi prilikom pristupa resursima, mimalloc koristi samo atomske operacije.

Izvor: opennet.ru

Dodajte komentar