Binuksan ng Microsoft ang code para sa mimalloc memory allocation system

Nagbukas ang Microsoft ng library sa ilalim ng lisensya ng MIT mmalloc mula sa mga pagpapatupad ng isang sistema ng paglalaan ng memorya na orihinal na nilikha para sa mga bahagi ng runtime ng mga wika Koka и Hindi mataba. Ang Mimalloc ay iniangkop para sa paggamit sa mga karaniwang application nang hindi binabago ang kanilang code at maaaring kumilos bilang isang transparent na kapalit para sa malloc function. Sinusuportahan ang trabaho sa Windows, macOS, Linux, BSD at iba pang mga sistemang katulad ng Unix.

Ang pangunahing tampok ng mimalloc ay ang compact na pagpapatupad nito (mas mababa sa 3500 linya ng code) at napakataas na pagganap. SA mga pagsusulit na isinagawa Naungusan ng mimalloc ang lahat ng nakikipagkumpitensyang library ng memory allocation, kabilang ang jemalloc, tcmalloc, snmalloc, rpmalloc и magtago.

Upang suriin ang pagganap, isang hanay ng mga umiiral na karaniwang mga pagsubok Sa ilang mga pagsubok, ang mimalloc ay maraming beses na mas mabilis kaysa sa iba pang mga system; halimbawa, sa pagsubok ng paglipat ng bagay sa pagitan ng iba't ibang mga thread, ang mimalloc ay naging higit sa 2.5 beses na mas mabilis kaysa sa tcmalloc at jemalloc. Kasabay nito, sa karamihan ng mga pagsubok, ang mas mababang pagkonsumo ng memorya ay sinusunod din; sa ilang mga sitwasyon, ang pagkonsumo ng memorya ay maaaring mabawasan ng 25%.

Binuksan ng Microsoft ang code para sa mimalloc memory allocation system

Ang mataas na pagganap ay nakakamit pangunahin sa pamamagitan ng paggamit ng libreng list sharding. Sa halip na isang malaking listahan, ang mimalloc ay gumagamit ng isang serye ng mas maliliit na listahan, na ang bawat isa ay nakatali sa isang pahina ng memorya. Binabawasan ng diskarteng ito ang fragmentation at pinapataas ang lokalidad ng data sa memorya. Ang pahina ng memorya ay isang pinagsama-samang hanay ng mga bloke na may magkatulad na laki. Sa 64-bit system, karaniwang 64 KB ang laki ng page. Kung walang occupied na mga bloke na natitira sa pahina, ito ay ganap na napalaya at ang memorya ay ibabalik sa operating system, na binabawasan ang mga gastos sa memorya at pagkapira-piraso sa mga programang matagal nang tumatakbo.

Maaaring isama ang library sa yugto ng pag-link o i-load para sa isang naka-assemble na program (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Nagbibigay din ang library API para sa pagsasama ng functionality sa runtime at fine-grained behavior control, halimbawa, para sa pagkonekta ng mga tamad na memory release handler at monotonically increase reference counters. Posibleng gumawa at gumamit ng ilang "tambak" sa isang application para sa pamamahagi sa iba't ibang lugar ng memorya. Posible rin na palayain ang bunton nang buo, nang hindi dumaan at hiwalay na palayain ang mga bagay na nakalagay dito.

Posibleng itayo ang library sa isang safe mode, kung saan ang mga espesyal na pahina ng pagsusuri ng memorya (mga pahina ng bantay) ay pinapalitan sa mga hangganan ng bloke, at ginagamit ang randomization ng pamamahagi ng block at pag-encrypt ng mga listahan ng mga napalaya na bloke. Ginagawang posible ng mga naturang hakbang na harangan ang pinakakaraniwang mga diskarte para sa pagsasamantala sa mga buffer overflow na nakabatay sa heap. Kapag pinagana mo ang Safe Mode, bumababa ang performance ng humigit-kumulang 3%.

Kabilang sa mga tampok ng mimalloc, nabanggit din na hindi ito madaling kapitan ng mga problema sa bloating dahil sa malaking fragmentation. Sa pinakamasamang sitwasyon, tumataas ang pagkonsumo ng memory ng 0.2% para sa metadata at maaaring umabot sa 16.7% para sa distributed memory. Upang maiwasan ang mga salungatan kapag nag-a-access ng mga mapagkukunan, ang mimalloc ay gumagamit lamang ng mga atomic na operasyon.

Pinagmulan: opennet.ru

Magdagdag ng komento