Microsoft parantos muka kode pikeun sistem alokasi mémori mimalloc

Microsoft geus muka perpustakaan handapeun lisénsi MIT mmalloc ti palaksanaan sistem alokasi memori anu asalna dijieun pikeun komponén runtime basa Koka и nyidekelkeun. Mimalloc diadaptasi pikeun pamakéan dina aplikasi baku tanpa ngarobah kode maranéhanana sarta bisa meta salaku gaganti transparan pikeun fungsi malloc. Ngarojong dianggo dina Windows, macOS, Linux, BSD sareng sistem sapertos Unix anu sanés.

Fitur konci mimalloc nyaéta palaksanaan anu kompak (kirang ti 3500 baris kode) sareng kinerja anu luhur pisan. DI tés dilaksanakeun mimalloc outperformed sadayana competing perpustakaan alokasi memori, kaasup jemalloc, tcmalloc, snmalloc, rpmalloc и Nganjuk.

Pikeun evaluate kinerja, susunan aya tés baku Dina sababaraha tés, mimalloc sababaraha kali langkung gancang tibatan sistem anu sanés; contona, dina uji migrasi objék antara benang anu béda, mimalloc tétéla langkung ti 2.5 kali langkung gancang tibatan tcmalloc sareng jemalloc. Dina waktos anu sami, dina kalolobaan tés, konsumsi mémori anu langkung handap ogé diperhatoskeun; dina sababaraha kaayaan, konsumsi mémori tiasa dikirangan ku 25%.

Microsoft parantos muka kode pikeun sistem alokasi mémori mimalloc

Kinerja luhur kahontal utamana ngaliwatan pamakéan daptar sharding bébas. Gantina hiji daptar badag, mimalloc ngagunakeun runtuyan béréndélan leutik, nu masing-masing kabeungkeut ka kaca memori. Pendekatan ieu ngirangan fragméntasi sareng ningkatkeun lokalitas data dina mémori. Kaca mémori nyaéta sakumpulan blok anu ukuranana sarua. Dina sistem 64-bit, ukuran halaman biasana 64 KB. Lamun teu aya blok nempatan ditinggalkeun dina kaca, eta sagemblengna dibébaskeun sarta mémori dipulangkeun ka sistem operasi, nu ngurangan waragad memori sareng fragméntasi dina program lila-ngajalankeun.

Perpustakaan bisa kaasup dina tahap linking atawa dimuat pikeun program geus dirakit ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). perpustakaan ogé nyadiakeun API pikeun integrasi fungsionalitas kana runtime jeung kontrol kabiasaan rupa-grained, Contona, pikeun nyambungkeun panangan release memori puguh na monotonically ngaronjatkeun counters rujukan. Kasebut nyaéta dimungkinkeun pikeun nyieun sarta ngagunakeun sababaraha "numpuk" dina aplikasi pikeun sebaran sakuliah wewengkon memori béda. Ieu oge mungkin pikeun ngosongkeun numpuk sagemblengna, tanpa ngaliwatan sarta misah freeing objék disimpen di dinya.

Kasebut nyaéta dimungkinkeun pikeun ngawangun perpustakaan dina modeu aman, nu husus memori cék kaca (panjaga-kaca) anu diganti dina wates block, sarta randomization distribusi block jeung enkripsi daptar blok dibébaskeun dipaké. Ukuran sapertos kitu ngamungkinkeun pikeun meungpeuk téknik anu paling umum pikeun ngamangpaatkeun panyangga panyangga dumasar tumpukan. Lamun anjeun ngaktipkeun Safe Mode, kinerja ngurangan ku kira 3%.

Di antara fitur mimalloc, éta ogé dicatet yén éta henteu rentan kana masalah kembung kusabab fragméntasi ageung. Dina skenario anu paling parah, konsumsi mémori ningkat ku 0.2% pikeun metadata sareng tiasa ngahontal 16.7% kanggo mémori anu disebarkeun. Pikeun ngahindarkeun konflik nalika ngaksés sumber daya, mimalloc ngan ukur nganggo operasi atom.

sumber: opennet.ru

Tambahkeun komentar