Microsoft avas mĂ€luhalduse sĂŒsteemi mimalloc koodi

Microsofti ettevĂ”te avas MIT litsentsi alusel teegi mimalloc mĂ€luhalduse sĂŒsteemi rakenduste jaoks, mis loodi algselt runtime-komponentide jaoks Koka ja Lean. Mimalloc on kohandatud kasutamiseks tĂŒĂŒpilistes rakendustes ilma nende koodi muutmata ning vĂ”ib toimida lĂ€bipaistva asendusena malloc-funktsioonile. Toetatakse tööd Windowsis, macOSis, Linuxis, BSD-s ja muudes Unixitaolistel sĂŒsteemidel.

Mimalloci pĂ”hijoon on rakenduse kompaktsus (alla 3500 koodi rida) ja vĂ€ga kĂ”rge jĂ”udlus. Tehtud testides mimalloc ĂŒletas jĂ”udluselt kĂ”ik konkurentsivĂ”imelised mĂ€luhaldusteegid, sealhulgas jemalloc, tcmalloc, snmalloc, rpmalloc ja Hoard.

JĂ”udluse hindamiseks kasutati juba olemasolevat tĂŒĂŒpiliste testide komplekti MĂ”nedes testides ĂŒletab mimalloc teisi sĂŒsteeme mitu korda, nĂ€iteks objekti migreerimise testides mitmesuguste lĂ”imede vahel osutus mimalloc kiiremaks kui tcmalloc ja jemalloc rohkem kui 2,5 korda. Samuti on enamikus testides mĂ€rgata madalamat mĂ€lutarbimist, mĂ”nes olukorras suudeti mĂ€lu kasutust vĂ€hendada 25%.

Microsoft avas mĂ€luhalduse sĂŒsteemi mimalloc koodi

KĂ”rge jĂ”udlus saavutatakse peamiselt vabade blokkskeemide segmentimise (free list sharding) rakendamise kaudu. Ühe suure loendi asemel rakendab mimalloc jagamise seeria vĂ€iksemateks nimekirjadeks, millest igaĂŒhel on oma mĂ€lu leht. Selline lĂ€henemine vĂ€hendab fragmenteeritust ja tĂ”stab andmete lokaliseerimist mĂ€lus. MĂ€lu leht mĂ”istetakse kui rĂŒhmitatud lĂ€heduses asuvate plokkide kogumit. 64-bitistes sĂŒsteemides on lehe suurus tavaliselt 64 KB. Kui lehe sees ei jÀÀ vabu blokke, vabastatakse see tĂ€ielikult ja mĂ€lu tagastatakse operatsioonisĂŒsteemile, mis vĂ€hendab mĂ€lu kasutust ja fragmenteerimist pikaajalistes programmides.

Teeki saab siduda kas linkimise ajal vĂ”i laadida juba kompileeritud programmi jaoks („LD_PRELOAD=/usr/bin/libmimalloc.so myprogram“). Raamatukogus on samuti saadaval API funktsionaalsuse integreerimiseks runtime'is ja kĂ€itumise Ă”hukeseks juhtimiseks, nĂ€iteks pĂ€ringulise mĂ€luhalduse töötlejate ĂŒhendamiseks ja monotoniseeritud viidete arvu suurendamiseks. Rakenduses on vĂ”imalik luua ja kasutada mitut 'kuhja' (heap) erinevates mĂ€lupiirkondades. Samuti on saadaval kogu kuhja vabastamine ilma objektide eraldi vabastamiseta.

On ette nĂ€htud, et raamatukogu saab kokku panna ohutusalustes reĆŸiimides, kus plokkide piiril asetatakse spetsiaalsed mĂ€lukontrolli lehed (guard-page) ning kasutatakse plokkide jaotuse randomiseerimist ja vabastamiste loendite krĂŒpteerimist. Sellised meetmed aitavad blokeerida enamikku tĂŒĂŒpilistest mĂ€lu ĂŒlevoolu ekspluatatsioonitehnikatest. Ohutusaluse reĆŸiimi aktiveerimisel vĂ€heneb tootlikkus ligikaudu 3%.

Mimalloci eripÀra hulka kuulub ka resistentsus puhverdamise probleemide vastu suurte killustumiste korral. Halvimal juhul tÔuseb mÀlu tarbimine 0,2% ulatuses metaandmete ja vÔib ulatuda 16,7% jaotatud mÀlu jaoks. Ressursside ligipÀÀsu konfliktide vÀltimiseks kasutatakse mimallocis ainult aatomseid toiminguid.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster