Microsoft telah membuka kod untuk sistem peruntukan memori mimalloc

Microsoft telah membuka perpustakaan di bawah lesen MIT mmalloc daripada pelaksanaan sistem peruntukan memori yang asalnya dicipta untuk komponen masa jalan bahasa Koka и Lean. Mimalloc disesuaikan untuk digunakan dalam aplikasi standard tanpa mengubah kod mereka dan boleh bertindak sebagai pengganti telus untuk fungsi malloc. Menyokong kerja pada Windows, macOS, Linux, BSD dan sistem seperti Unix yang lain.

Ciri utama mimalloc ialah pelaksanaannya yang padat (kurang daripada 3500 baris kod) dan prestasi yang sangat tinggi. DALAM ujian yang dilakukan mimalloc mengatasi semua perpustakaan peruntukan memori yang bersaing, termasuk jemalloc, tcmalloc, snmalloc, rpmalloc и Menimbun.

Untuk menilai prestasi, satu set sedia ada ujian standard Dalam sesetengah ujian, mimalloc berkali-kali lebih pantas daripada sistem lain; contohnya, dalam ujian penghijrahan objek antara benang yang berbeza, mimalloc ternyata lebih daripada 2.5 kali lebih pantas daripada tcmalloc dan jemalloc. Pada masa yang sama, dalam kebanyakan ujian, penggunaan memori yang lebih rendah juga diperhatikan; dalam beberapa situasi, penggunaan memori boleh dikurangkan sebanyak 25%.

Microsoft telah membuka kod untuk sistem peruntukan memori mimalloc

Prestasi tinggi dicapai terutamanya melalui penggunaan sharding senarai percuma. Daripada satu senarai besar, mimalloc menggunakan satu siri senarai yang lebih kecil, setiap satu daripadanya terikat pada halaman memori. Pendekatan ini mengurangkan pemecahan dan meningkatkan lokaliti data dalam ingatan. Halaman memori ialah set kumpulan blok dengan saiz yang serupa. Pada sistem 64-bit, saiz halaman biasanya 64 KB. Jika tiada blok yang diduduki ditinggalkan dalam halaman, ia dibebaskan sepenuhnya dan memori dikembalikan kepada sistem pengendalian, yang mengurangkan kos memori dan pemecahan dalam program yang berjalan lama.

Pustaka boleh disertakan pada peringkat memaut atau dimuatkan untuk program yang telah dipasang (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Perpustakaan juga menyediakan API untuk menyepadukan fungsi ke dalam masa jalan dan kawalan tingkah laku halus, contohnya, untuk menyambungkan pengendali pelepasan memori malas dan kaunter rujukan yang meningkat secara monoton. Ia adalah mungkin untuk mencipta dan menggunakan beberapa "timbunan" dalam aplikasi untuk pengedaran merentasi kawasan memori yang berbeza. Ia juga mungkin untuk membebaskan timbunan sepenuhnya, tanpa melalui dan secara berasingan membebaskan objek yang diletakkan di dalamnya.

Ia adalah mungkin untuk membina perpustakaan dalam mod selamat, di mana halaman semakan memori khas (halaman pengawal) digantikan pada sempadan blok, dan rawak pengedaran blok dan penyulitan senarai blok yang dibebaskan digunakan. Langkah sedemikian membolehkan untuk menyekat teknik yang paling biasa untuk mengeksploitasi limpahan penimbal berasaskan timbunan. Apabila anda mendayakan Mod Selamat, prestasi menurun kira-kira 3%.

Antara ciri-ciri mimalloc, ia juga diperhatikan bahawa ia tidak terdedah kepada masalah kembung kerana pemecahan yang besar. Dalam senario terburuk, penggunaan memori meningkat sebanyak 0.2% untuk metadata dan boleh mencapai 16.7% untuk ingatan teragih. Untuk mengelakkan konflik apabila mengakses sumber, mimalloc hanya menggunakan operasi atom.

Sumber: opennet.ru

Tambah komen