Microsoft-ը բացել է mimalloc հիշողության բաշխման համակարգի կոդը

Microsoft-ը գրադարան է բացել MIT լիցենզիայի ներքո mmalloc հիշողության բաշխման համակարգի իրականացումներից, որոնք ի սկզբանե ստեղծվել են լեզուների գործարկման ժամանակի բաղադրիչների համար Կոկա и Նիհար. Mimalloc-ը հարմարեցված է ստանդարտ հավելվածներում օգտագործելու համար՝ առանց դրանց կոդը փոխելու և կարող է գործել որպես malloc ֆունկցիայի թափանցիկ փոխարինում: Աջակցում է Windows-ի, macOS-ի, Linux-ի, BSD-ի և Unix-ի նման այլ համակարգերի վրա աշխատանքին:

Mimalloc-ի հիմնական առանձնահատկությունը նրա կոմպակտ իրականացումն է (3500 տողից քիչ կոդ) և շատ բարձր կատարողականությունը: IN կատարված թեստերը mimalloc-ը գերազանցեց բոլոր մրցակից հիշողության բաշխման գրադարանները, այդ թվում jemalloc, tcmalloc, snmalloc, rpmalloc и Հոարդ.

Կատարումը գնահատելու համար գոյություն ունեցողների մի շարք ստանդարտ թեստեր Որոշ թեստերում mimalloc-ը շատ անգամ ավելի արագ է, քան մյուս համակարգերը, օրինակ՝ տարբեր թելերի միջև օբյեկտների միգրացիայի թեստի ժամանակ mimalloc-ը պարզվեց, որ ավելի քան 2.5 անգամ ավելի արագ է, քան tcmalloc-ը և jemalloc-ը: Միևնույն ժամանակ, թեստերի մեծ մասում նկատվում է նաև հիշողության ավելի ցածր սպառում, որոշ իրավիճակներում հիշողության սպառումը կարող է կրճատվել 25%-ով:

Microsoft-ը բացել է mimalloc հիշողության բաշխման համակարգի կոդը

Բարձր կատարողականությունը ձեռք է բերվում հիմնականում անվճար ցուցակների փոխանակման միջոցով: Մեկ մեծ ցուցակի փոխարեն mimalloc-ն օգտագործում է ավելի փոքր ցուցակների շարք, որոնցից յուրաքանչյուրը կապված է հիշողության էջին: Այս մոտեցումը նվազեցնում է մասնատումը և մեծացնում տվյալների տեղայնությունը հիշողության մեջ: Հիշողության էջը նմանատիպ չափի բլոկների խմբավորված հավաքածու է: 64-բիթանոց համակարգերում էջի չափը սովորաբար 64 ԿԲ է: Եթե ​​էջում զբաղեցրած բլոկներ չեն մնացել, այն ամբողջությամբ ազատվում է, և հիշողությունը վերադարձվում է օպերացիոն համակարգ, ինչը նվազեցնում է հիշողության ծախսերը և երկարատև ծրագրերի մասնատումը։

Գրադարանը կարող է ներառվել կապակցման փուլում կամ բեռնվել արդեն հավաքված ծրագրի համար («LD_PRELOAD=/usr/bin/libmimalloc.so myprogram»): Գրադարանը տրամադրում է նաև API ֆունկցիոնալությունը գործարկման ժամանակի և նուրբ վարքի վերահսկման մեջ ինտեգրելու համար, օրինակ՝ ծույլ հիշողության թողարկման կարգավորիչները միացնելու և միապաղաղ մեծացող հղման հաշվիչները: Հնարավոր է ստեղծել և օգտագործել մի քանի «կույտ» հավելվածում՝ հիշողության տարբեր տարածքներում բաշխման համար: Հնարավոր է նաև ամբողջությամբ ազատել կույտը, առանց դրա միջով և առանձին ազատելու դրա մեջ տեղադրված առարկաները։

Գրադարանը հնարավոր է կառուցել անվտանգ ռեժիմով, որտեղ բլոկի սահմաններում փոխարինվում են հատուկ հիշողության ստուգման էջեր (պահապան-էջեր), և օգտագործվում են բլոկի բաշխման պատահականացում և ազատված բլոկների ցուցակների կոդավորում: Նման միջոցները հնարավորություն են տալիս արգելափակել կույտի վրա հիմնված բուֆերային արտահոսքների շահագործման ամենատարածված մեթոդները: Երբ միացնում եք Անվտանգ ռեժիմը, կատարումը նվազում է մոտավորապես 3%-ով:

Միմալլոկի առանձնահատկություններից նշվում է նաև, որ այն ենթակա չէ փքվածության հետ կապված խնդիրների՝ մեծ մասնատման պատճառով։ Վատագույն դեպքում հիշողության սպառումը մետատվյալների համար ավելանում է 0.2%-ով և բաշխված հիշողության դեպքում կարող է հասնել 16.7%-ի: Ռեսուրսներ մուտք գործելու ժամանակ կոնֆլիկտներից խուսափելու համար mimalloc-ը օգտագործում է միայն ատոմային գործողություններ:

Source: opennet.ru

Добавить комментарий