Mikrosofto malfermis la kodon por la sistemo de asigno de memoro mimalloc

Mikrosofto malfermis bibliotekon sub la MIT-licenco mmalloc de efektivigoj de memorasignosistemo origine kreita por rultempaj komponantoj de lingvoj Koka и Malgranda. Mimalloc estas adaptita por uzo en normaj aplikoj sen ŝanĝi ilian kodon kaj povas funkcii kiel travidebla anstataŭaĵo por la malloc-funkcio. Subtenas laboron en Vindozo, macOS, Linukso, BSD kaj aliaj Unikso-similaj sistemoj.

La ĉefa trajto de mimalloc estas ĝia kompakta efektivigo (malpli ol 3500 linioj de kodo) kaj tre alta rendimento. EN provoj faritaj mimalloc superis ĉiujn konkurantajn memorasogajn bibliotekojn, inkluzive jemalloc, tcmalloc, snmalloc, rpmalloc и Kaŝtrezoro.

Por taksi rendimenton, aro de ekzistantaj normaj provoj En kelkaj testoj, mimalloc estas multajn fojojn pli rapida ol aliaj sistemoj; ekzemple, en la testo de objektomigrado inter malsamaj fadenoj, mimalloc montriĝis pli ol 2.5 fojojn pli rapida ol tcmalloc kaj jemalloc. Samtempe, en la plej multaj testoj, pli malalta memorkonsumo ankaŭ estas observita; en iuj situacioj, memorkonsumo povas esti reduktita je 25%.

Mikrosofto malfermis la kodon por la sistemo de asigno de memoro mimalloc

Alta rendimento estas atingita ĉefe per la uzo de senpaga listo sharding. Anstataŭ unu granda listo, mimalloc uzas serion de pli malgrandaj listoj, ĉiu el kiuj estas ligita al memorpaĝo. Ĉi tiu aliro reduktas fragmentiĝon kaj pliigas datumlokon en memoro. Memorpaĝo estas grupigita aro de blokoj de simila grandeco. En 64-bitaj sistemoj, la paĝgrandeco estas tipe 64 KB. Se ne restas okupataj blokoj en la paĝo, ĝi estas tute liberigita kaj la memoro estas resendita al la operaciumo, kio reduktas memorkostojn kaj fragmentiĝon en longdaŭraj programoj.

La biblioteko povas esti inkludita en la ligofazo aŭ ŝarĝita por jam kunmetita programo ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). La biblioteko ankaŭ provizas API por integri funkciecon en rultempon kaj fajngrajnan kondutkontrolon, ekzemple, por ligado de maldiligentaj memorliberigtraktiloj kaj monotone pliiĝantaj referencaj nombriloj. Eblas krei kaj uzi plurajn "amasojn" en aplikaĵo por distribuo tra malsamaj memorareoj. Eblas ankaŭ tute liberigi la amason, sen trairi kaj aparte liberigi la objektojn metitajn en ĝi.

Eblas konstrui la bibliotekon en sekura reĝimo, en kiu specialaj memorkontrolpaĝoj (gard-paĝoj) estas anstataŭigitaj ĉe la bloklimoj, kaj hazardigo de blokdistribuo kaj ĉifrado de listoj de liberigitaj blokoj estas uzataj. Tiaj mezuroj ebligas bloki plej oftajn teknikojn por ekspluati amas-bazitajn bufrosuperfluojn. Kiam vi ebligas Sekuran Reĝimon, rendimento malpliiĝas je proksimume 3%.

Inter la trajtoj de mimalloc, oni ankaŭ rimarkas, ke ĝi ne estas susceptible al problemoj kun ŝvelado pro granda fragmentiĝo. En la plej malbona kazo, memorkonsumo pliiĝas je 0.2% por metadatenoj kaj povas atingi 16.7% por distribuita memoro. Por eviti konfliktojn alirante resursojn, mimalloc uzas nur atomajn operaciojn.

fonto: opennet.ru

Aldoni komenton