Подано реліз бібліотеки управління пам'яттю jemalloc 5.4.0, що пропонує альтернативну реалізацію функцій malloc, оптимізовану для зниження фрагментації та роботи на багатопроцесорних системах. Для вирішення проблем із блокуваннями на багатоядерних системах в jemalloc для кожного ядра CPU використовується своя ізольована область розподілу пам'яті, що дозволяє досягти лінійної масштабованості при зростанні числа потоків.
У червні 2025 року автор проекту припинив супровід та перевів репозиторій jemalloc в архівний режим, але у березні цього року розробку відновила компанія Meta, яка застосовує jemalloc у своїй інфраструктурі. Спочатку бібліотека була розроблена для FreeBSD і використовується в даній ОС за замовчуванням з 2005 року. Код бібліотеки написано на Сі та поширюється під ліцензією BSD.
Серед змін:
- Спрощено логіку заповнення та скидання tcache (Thread Local Cache), а також диспетчеризацію виділення пам'яті.
- Уніфіковано алокатори сторінок пам'яті PAC (Page Allocator Classic) та HPA (Huge Page Allocator). Видалено ускладнений механізм непрямих викликів через vtable (PAI vtable).
- Для спрощення супроводу та розширення платформ усі платформо-залежні операції винесені в окремі заголовні файли.
- Спрощено диспетчеризацію команд mallctl, а також перероблено інфраструктуру генерації та виведення статистики.
- Доданий прапор EXTENT_ALLOC_FLAG_PINNED, що дозволяє позначати невитісняються області карти пам'яті, такі як сторінки HugeTLB, для їх пріоритетного повторного використання. Для отримання статистики про використання закріпленої пам'яті додано нові інтерфейси mallctl: stats.pinned, stats.arenas.
- Синхронізовано вміст статистики 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.
Джерело: opennet.ru
