نسخه ۵.۴.۰ کتابخانه مدیریت حافظه jemalloc منتشر شد. این نسخه، پیادهسازی جایگزینی از توابع malloc را ارائه میدهد که برای کاهش تکهتکه شدن و اجرا بر روی سیستمهای چندپردازندهای بهینه شده است. برای رفع مشکلات قفل شدن در سیستمهای چند هستهای، jemalloc از ناحیه تخصیص حافظه ایزوله خود برای هر هسته CPU استفاده میکند و با افزایش تعداد رشتهها، مقیاسپذیری خطی را امکانپذیر میسازد.
در ژوئن ۲۰۲۵، نویسنده این پروژه، نگهداری را متوقف کرد و مخزن jemalloc را به حالت بایگانی منتقل کرد، اما در مارس این سال، توسعه آن توسط شرکت Meta که از jemalloc در زیرساخت خود استفاده میکند، از سر گرفته شد. این کتابخانه در ابتدا برای FreeBSD توسعه داده شده بود و از سال ۲۰۰۵ به طور پیشفرض در این سیستم عامل استفاده میشود. کد کتابخانه به زبان C نوشته شده و تحت مجوز BSD توزیع شده است.
از جمله تغییرات:
- منطق پر کردن و پاک کردن tcache (Thread Local Cache) و همچنین تخصیص حافظه، ساده شده است.
- تخصیصدهندههای صفحه حافظه کلاسیک تخصیصدهنده صفحه (PAC) و HPA (تخصیصدهنده صفحه بزرگ) یکپارچه شدهاند. مکانیسم پیچیده فراخوانیهای غیرمستقیم از طریق جدول v (جدول v) حذف شده است.
- برای سادهسازی نگهداری و گسترش پلتفرم، تمام عملیات وابسته به پلتفرم به فایلهای هدر جداگانه منتقل میشوند.
- ارسال دستورات mallctl ساده شده و زیرساخت تولید و نمایش آمار دوباره طراحی شده است.
- پرچم EXTENT_ALLOC_FLAG_PINNED اضافه شده است که امکان علامتگذاری نواحی نگاشت حافظه غیر قابل قبضه کردن، مانند صفحات HugeTLB، برای استفاده مجدد با اولویت را فراهم میکند. رابطهای mallctl جدید برای دریافت آمار استفاده از حافظه پینشده اضافه شدهاند: stats.pinned، stats.arenas..pinned
- محتوای آمار malloc همگامسازی شده در قالبهای قابل خواندن توسط انسان و JSON.
- پارامترهای منسوخشدهی lg_tcache_nslots_mul، tcache_nslots_small_min، tcache_nslots_small_max، tcache_nslots_large، tcache_gc_delay_bytes، lg_tcache_flush_small_div و lg_tcache_flush_large_div حذف شدند.
منبع: opennet.ru
