Microsoft avalikustas mälu jaotussüsteemi mimalloc allika.

Microsoft avas MIT-litsentsi all välja raamteegi mimalloc mäluhaldussüsteemi implementatsioonidest, mis loodi algselt programmeerimiskeelte runtime-komponentide jaoks Koka ja Lean. Mimalloc on kohandatud kasutamiseks tavapärastes rakendustes ilma nende koodi muutmata ja võib toimida läbipaistva asendusena malloc-funktsioonile. Toetatakse Windowsi, macOS-i, Linuxi, BSD-d ja muid Unixilaadseid süsteeme.

Mimalloci peamine omadus on rakenduse kompaktsus (alla 3500 koodi rea) ja väga kõrge jõudlus. testides, mimalloc ületas jõudluses kõik konkurentsi mäluhaldusraamatukogud, sealhulgas jemalloc, tcmalloc, snmalloc, rpmalloc ja Hoard.

Jõudluse hindamiseks kasutati olemasolevate standardsete testide Mõnedes testides ületas mimalloc teisi süsteeme mitu korda, näiteks objektide migreerimise testis erinevate lõimede vahel osutus mimalloc tcmallocist ja jemallocist üle 2,5 korra kiiremaks. Samuti on enamikus testides täheldatud madalamat mälutarbimist, mõnel juhul suudeti mälukulu vähendada 25%.

Microsoft avalikustas mälu jaotussüsteemi mimalloc allika.

Kõrge jõudluse saavutamine põhineb peamiselt vaba blokksarja (free list sharding) segmentatsiooni rakendamisel. Selle asemel, et kasutada ühte suurt loendit, jagab mimalloc selle väiksemateks loenditeks, millest igaüks on seotud mälu lehega. Selline lähenemine vähendab fragmenteerimist ja parandab andmete lokaliseerimist mälus. Mälu leht on rühmitatud sarnastes suurustes blokki. 64-bitistes süsteemides on lehe suurus tavaliselt 64 kB. Kui lehes ei jää enam kasutada mingeid blokke, vabastatakse see täielikult, tagastades mälu operatsioonisüsteemile, mis aitab vähendada mälu kulu ja fragmenteerimist pikalt töötavates programmide puhul.

Kogumikku saab ühendada linkimise etapis või laadida juba kompileeritud programmi jaoks ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). Raamatukogus pakutakse samuti API funktsionaalsuse integreerimiseks runtime'is ja käitumise peeneks juhtimiseks, näiteks viidete viivitatud vabastamise käsitlejatele ja monofooniliste viidete arvu suurenemisele. On võimalik luua ja kasutada rakenduses mitut "kühvlit" (heap), et jaotada erinevatesse mälupiirkondadesse. Sealhulgas on võimalik vabastada kogu kühvel, ilma et oleks vaja eraldi vabastada seal paigutatud objekte.

Pakutakse võimalust teeki koguda turvarežiimis, kus plokkide piiridel kasutatakse spetsiaalseid mälukontrolli lehti (guard-page), samuti kasutatakse plokkide jaotamise randomiseerimist ja vabastatud plokkide loendite krüptimist. Taolised meetmed võimaldavad blokeerida enamik tavapäraseid tehnikaid, millega häkkida kühvlite ületäitumist. Turvarežiimi sisselülitamisel väheneb jõudlus ligikaudu 3%.

mimalloci omadustest tuleks märkida ka, et see ei ole vastuvõtlik suure fraktsioonimisega seotud probleeme. Halvimal juhul suureneb mälu kasutamine 0,2% metainformatsiooni jaoks ja võib ulatuda 16,7%-ni dünaamilisest mälu jaotamisest. Ressursside juurdepääsu konfliktide välistamiseks rakendatakse mimallocis ainult aatomoperatsioone.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster