Microsoft ir atvērusi kodu Mimalloc atmiņas piešķiršanas sistēmai

Microsoft ir atvērusi bibliotēku saskaņā ar MIT licenci mmalloc no atmiņas piešķiršanas sistēmas implementācijām, kas sākotnēji tika izveidotas valodu izpildlaika komponentiem Koka и Lean. Mimalloc ir pielāgots lietošanai standarta lietojumprogrammās, nemainot to kodu, un var darboties kā caurspīdīgs malloc funkcijas aizstājējs. Atbalsta darbu ar Windows, macOS, Linux, BSD un citām Unix līdzīgām sistēmām.

Mimalloc galvenā iezīme ir tā kompaktā ieviešana (mazāk nekā 3500 koda rindiņas) un ļoti augsta veiktspēja. IN veiktie testi mimalloc pārspēja visas konkurējošās atmiņas piešķiršanas bibliotēkas, tostarp jemalloc, tcmalloc, snmalloc, rpmalloc и Uzkrāt.

Lai novērtētu veiktspēju, esošo kopa standarta testi Dažos testos mimalloc ir daudzkārt ātrāks par citām sistēmām; piemēram, pārbaudot objektu migrāciju starp dažādiem pavedieniem, mimalloc izrādījās vairāk nekā 2.5 reizes ātrāks nekā tcmalloc un jemalloc. Tajā pašā laikā lielākajā daļā testu tiek novērots arī mazāks atmiņas patēriņš, dažās situācijās atmiņas patēriņu var samazināt par 25%.

Microsoft ir atvērusi kodu Mimalloc atmiņas piešķiršanas sistēmai

Augsta veiktspēja tiek panākta galvenokārt, izmantojot bezmaksas sarakstu sadalīšanu. Viena liela saraksta vietā mimalloc izmanto virkni mazāku sarakstu, no kuriem katrs ir saistīts ar atmiņas lapu. Šī pieeja samazina sadrumstalotību un palielina datu atrašanās vietu atmiņā. Atmiņas lapa ir grupēta līdzīga izmēra bloku kopa. 64 bitu sistēmās lapas izmērs parasti ir 64 KB. Ja lapā nav palicis neviens aizņemts bloks, tā tiek pilnībā atbrīvota un atmiņa tiek atgriezta operētājsistēmā, kas samazina atmiņas izmaksas un sadrumstalotību ilgstoši darbojošās programmās.

Bibliotēku var iekļaut saistīšanas stadijā vai ielādēt jau samontētai programmai (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Bibliotēka arī nodrošina API funkcionalitātes integrēšanai izpildlaika un smalkas uzvedības kontrolē, piemēram, lai savienotu slinkus atmiņas atbrīvošanas apstrādātājus un monotoni palielinātu atsauces skaitītājus. Lietojumprogrammā ir iespējams izveidot un izmantot vairākas “kaudzes”, lai tās izplatītu dažādās atmiņas zonās. Ir iespējams arī pilnībā atbrīvot kaudzi, neizejot cauri un atsevišķi neatbrīvojot tajā ievietotos priekšmetus.

Bibliotēku iespējams veidot drošajā režīmā, kurā pie bloku robežām tiek aizvietotas speciālas atmiņas pārbaudes lapas (sargs-lapas) un tiek izmantota bloku sadalījuma randomizācija un atbrīvoto bloku sarakstu šifrēšana. Šādi pasākumi ļauj bloķēt visizplatītākos paņēmienus, lai izmantotu kaudzes bufera pārpildes. Iespējojot drošo režīmu, veiktspēja samazinās par aptuveni 3%.

Starp mimaloka iezīmēm ir arī atzīmēts, ka tas nav uzņēmīgs pret vēdera uzpūšanās problēmām lielas sadrumstalotības dēļ. Sliktākajā gadījumā atmiņas patēriņš palielinās par 0.2% metadatiem un var sasniegt 16.7% sadalītajai atmiņai. Lai izvairītos no konfliktiem, piekļūstot resursiem, mimalloc izmanto tikai atomāras darbības.

Avots: opennet.ru

Pievieno komentāru