مایکروسافت کد سیستم تخصیص حافظه mimalloc را باز کرده است

مایکروسافت یک کتابخانه تحت مجوز MIT افتتاح کرده است mmalloc از پیاده سازی یک سیستم تخصیص حافظه که در اصل برای اجزای زمان اجرا زبان ها ایجاد شده است کوکا и ناب. Mimalloc برای استفاده در برنامه های کاربردی استاندارد بدون تغییر کد آنها سازگار است و می تواند به عنوان یک جایگزین شفاف برای تابع malloc عمل کند. از کار بر روی ویندوز، macOS، لینوکس، BSD و سایر سیستم‌های مشابه یونیکس پشتیبانی می‌کند.

ویژگی کلیدی mimalloc اجرای فشرده آن (کمتر از 3500 خط کد) و عملکرد بسیار بالا است. که در تست های انجام شده mimalloc از تمام کتابخانه های تخصیص حافظه رقیب از جمله عملکرد بهتری داشت جمالوک, tcmalloc, snmalloc, rpmalloc и هوارد.

برای ارزیابی عملکرد، مجموعه ای از موجود تست های استاندارد در برخی تست‌ها، mimalloc چندین برابر سریع‌تر از سیستم‌های دیگر است؛ به عنوان مثال، در آزمایش مهاجرت شی بین رشته‌های مختلف، mimalloc بیش از ۲.۵ برابر سریع‌تر از tcmalloc و jemalloc بود. در عین حال در اکثر تست ها مصرف حافظه کمتری نیز مشاهده می شود؛ در برخی شرایط می توان مصرف حافظه را تا 2.5 درصد کاهش داد.

مایکروسافت کد سیستم تخصیص حافظه mimalloc را باز کرده است

عملکرد بالا عمدتاً از طریق استفاده از اشتراک گذاری لیست رایگان به دست می آید. به جای یک لیست بزرگ، mimalloc از یک سری لیست های کوچکتر استفاده می کند که هر کدام به یک صفحه حافظه محدود می شوند. این رویکرد باعث کاهش تکه تکه شدن و افزایش موقعیت داده ها در حافظه می شود. صفحه حافظه مجموعه ای از بلوک های گروه بندی شده با اندازه مشابه است. در سیستم های 64 بیتی، اندازه صفحه معمولاً 64 کیلوبایت است. اگر هیچ بلوک اشغالی در صفحه باقی نمانده باشد، به طور کامل آزاد می شود و حافظه به سیستم عامل باز می گردد که باعث کاهش هزینه های حافظه و تکه تکه شدن در برنامه های طولانی مدت می شود.

کتابخانه را می توان در مرحله پیوند گنجاند یا برای یک برنامه از قبل مونتاژ شده بارگذاری کرد ("LD_PRELOAD=/usr/bin/libmimalloc.so myprogram"). کتابخانه نیز فراهم می کند API برای ادغام عملکرد در زمان اجرا و کنترل رفتار ریزدانه، به عنوان مثال، برای اتصال کنترل کننده های انتشار حافظه تنبل و شمارنده های مرجع به طور یکنواخت افزایش می یابد. ایجاد و استفاده از چندین "هپ" در یک برنامه کاربردی برای توزیع در مناطق مختلف حافظه امکان پذیر است. همچنین می توان هپ را به طور کامل آزاد کرد، بدون اینکه از آن عبور کرد و به طور جداگانه اجسام قرار گرفته در آن را آزاد کرد.

امکان ساخت کتابخانه در حالت امن وجود دارد که در آن صفحات بررسی حافظه ویژه (صفحات نگهبان) در مرزهای بلوک جایگزین می شوند و از توزیع تصادفی بلوک و رمزگذاری لیست بلوک های آزاد شده استفاده می شود. چنین اقداماتی مسدود کردن اکثر تکنیک‌های رایج برای بهره‌برداری از سرریزهای بافر مبتنی بر پشته را ممکن می‌سازد. هنگامی که حالت ایمن را فعال می کنید، عملکرد تقریباً 3٪ کاهش می یابد.

از جمله ویژگی های mimalloc، همچنین اشاره شده است که به دلیل تکه تکه شدن زیاد، مستعد مشکلات نفخ نیست. در بدترین حالت، مصرف حافظه برای متادیتا 0.2 درصد افزایش می یابد و برای حافظه توزیع شده می تواند به 16.7 درصد برسد. برای جلوگیری از درگیری هنگام دسترسی به منابع، mimalloc فقط از عملیات اتمی استفاده می کند.

منبع: opennet.ru

اضافه کردن نظر