Microsoft mimalloc xotira ajratish tizimi uchun kodni ochdi

Microsoft MIT litsenziyasi ostida kutubxona ochdi mmalloc dastlab tillarning ishlash vaqti komponentlari uchun yaratilgan xotirani taqsimlash tizimini amalga oshirishdan Koka и Yalang'och. Mimalloc standart ilovalarda ularning kodini o'zgartirmasdan foydalanish uchun moslashtirilgan va malloc funktsiyasini shaffof o'zgartirishi mumkin. Windows, macOS, Linux, BSD va boshqa Unix-ga o'xshash tizimlarda ishlashni qo'llab-quvvatlaydi.

Mimalloc-ning asosiy xususiyati uning ixcham amalga oshirilishi (3500 satrdan kam kod) va juda yuqori ishlashdir. IN testlar o'tkazildi mimalloc barcha raqobatdosh xotira ajratish kutubxonalarini, shu jumladan, ortda qoldirdi jemalloc, tcmalloc, snmalloc, rpmalloc и Xoard.

Ishlashni baholash uchun mavjud bo'lganlar to'plami standart testlar Ba'zi testlarda mimalloc boshqa tizimlarga qaraganda bir necha baravar tezroq; masalan, ob'ektni turli oqimlar o'rtasida ko'chirish testida mimalloc tcmalloc va jemallocga qaraganda 2.5 baravar tezroq bo'lib chiqdi. Shu bilan birga, ko'pgina testlarda xotiraning kam iste'moli ham kuzatiladi, ba'zi hollarda xotira iste'moli 25% ga kamayishi mumkin.

Microsoft mimalloc xotira ajratish tizimi uchun kodni ochdi

Yuqori mahsuldorlikka asosan bepul ro'yxatni taqsimlash orqali erishiladi. Bitta katta ro'yxat o'rniga mimalloc har biri xotira sahifasiga bog'langan bir qator kichikroq ro'yxatlardan foydalanadi. Ushbu yondashuv parchalanishni kamaytiradi va xotiradagi ma'lumotlarning joylashishini oshiradi. Xotira sahifasi - o'xshash o'lchamdagi bloklarning guruhlangan to'plami. 64 bitli tizimlarda sahifa hajmi odatda 64 KB ni tashkil qiladi. Agar sahifada ishg'ol qilingan bloklar qolmasa, u to'liq bo'shatiladi va xotira operatsion tizimga qaytariladi, bu esa uzoq muddatli dasturlarda xotira xarajatlarini va parchalanishni kamaytiradi.

Kutubxona ulanish bosqichida kiritilishi yoki allaqachon yig'ilgan dastur uchun yuklanishi mumkin (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). Kutubxona ham taqdim etadi API funksionallikni ish vaqti va nozik xatti-harakatlarni boshqarishga integratsiya qilish uchun, masalan, dangasa xotirani qayta ishlovchilarni ulash va monoton ravishda ko'payadigan mos yozuvlar hisoblagichlarini ulash uchun. Turli xil xotira sohalarida tarqatish uchun ilovada bir nechta "uymalar" yaratish va ulardan foydalanish mumkin. Bundan tashqari, to'pni to'liq bo'shatish mumkin, unda joylashgan narsalarni alohida-alohida o'tkazmasdan va bo'shatish mumkin.

Kutubxonani xavfsiz rejimda qurish mumkin, unda blok chegaralarida xotirani tekshirishning maxsus sahifalari (qo'riqlash sahifalari) almashtiriladi va bloklarni taqsimlashning randomizatsiyasi va bo'shatilgan bloklar ro'yxatini shifrlash qo'llaniladi. Bunday chora-tadbirlar to'pga asoslangan bufer to'lib ketishidan foydalanishning eng keng tarqalgan usullarini blokirovka qilishga imkon beradi. Xavfsiz rejimni yoqsangiz, unumdorlik taxminan 3% ga kamayadi.

Mimallokning xususiyatlari orasida, shuningdek, katta parchalanish tufayli shishiradi bilan bog'liq muammolarga moyil emasligi ham qayd etilgan. Eng yomon holatda, xotira iste'moli metadata uchun 0.2% ga oshadi va taqsimlangan xotira uchun 16.7% ga yetishi mumkin. Resurslarga kirishda nizolarni oldini olish uchun mimalloc faqat atom operatsiyalaridan foydalanadi.

Manba: opennet.ru

a Izoh qo'shish