Microsoft je otvorio kod za mimalloc sistem dodjele memorije

Microsoft je otvorio biblioteku pod MIT licencom mmalloc od implementacija sistema za dodjelu memorije koji je prvobitno kreiran za runtime komponente jezika Koka и Lean. Mimalloc je prilagođen za upotrebu u standardnim aplikacijama bez promjene njihovog koda i može djelovati kao transparentna zamjena za malloc funkciju. Podržava rad na Windows, macOS, Linux, BSD i drugim sistemima sličnim Unixu.

Ključna karakteristika mimalloca je njegova kompaktna implementacija (manje od 3500 linija koda) i vrlo visoke performanse. IN obavljeni testovi mimalloc je nadmašio sve konkurentske biblioteke za dodjelu memorije, uključujući jemalloc, tcmalloc, snmalloc, rpmalloc и Ostava.

Za procjenu učinka, skup postojećih standardni testovi U nekim testovima, mimalloc je mnogo puta brži od drugih sistema; na primjer, u testu migracije objekata između različitih niti, pokazalo se da je mimalloc više od 2.5 puta brži od tcmalloc-a i jemalloc-a. Istovremeno, u većini testova je uočena i manja potrošnja memorije, au nekim situacijama potrošnja memorije može biti smanjena za 25%.

Microsoft je otvorio kod za mimalloc sistem dodjele memorije

Visoke performanse se postižu uglavnom korištenjem besplatnog dijeljenja liste. Umjesto jedne velike liste, mimalloc koristi niz manjih lista, od kojih je svaka vezana za memorijsku stranicu. Ovaj pristup smanjuje fragmentaciju i povećava lokalizaciju podataka u memoriji. Memorijska stranica je grupirani skup blokova slične veličine. Na 64-bitnim sistemima, veličina stranice je obično 64 KB. Ako na stranici nema zauzetih blokova, ona se potpuno oslobađa i memorija se vraća u operativni sistem, što smanjuje troškove memorije i fragmentaciju u dugotrajnim programima.

Biblioteka se može uključiti u fazi povezivanja ili učitati za već sastavljen program (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Biblioteka takođe obezbeđuje API za integraciju funkcionalnosti u vrijeme izvođenja i preciznu kontrolu ponašanja, na primjer, za povezivanje rukovatelja odgođenog oslobađanja memorije i monotono rastućih referentnih brojača. Moguće je kreirati i koristiti nekoliko "gomila" u aplikaciji za distribuciju u različitim memorijskim područjima. Također je moguće potpuno osloboditi hrpu, bez prolaska i odvojenog oslobađanja objekata smještenih u njoj.

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

Među karakteristikama mimalloca, također se ističe da nije podložan problemima s nadimanjem zbog velike fragmentacije. U najgorem slučaju, potrošnja memorije se povećava za 0.2% za metapodatke i može dostići 16.7% za distribuiranu memoriju. Kako bi izbjegao sukobe prilikom pristupa resursima, mimalloc koristi samo atomske operacije.

izvor: opennet.ru

Dodajte komentar