Представлен релиз библиотеки управления памятью jemalloc 5.4.0, предлагающей альтернативную реализацию функций malloc, оптимизированную для снижения фрагментации и работы на многопроцессорных системах. Для решения проблем с блокировками на многоядерных системах в jemalloc для каждого ядра CPU используется своя изолированная область распределения памяти, что позволяет добиться линейной масштабируемости при росте числа потоков.
В июне 2025 года автор проекта прекратил сопровождение и перевёл репозиторий jemalloc в архивный режим, но в марте этого года разработку возобновила компания Meta, применяющая jemalloc в своей инфраструктуре. Изначально библиотека была разработана для FreeBSD и используется в данной ОС по умолчанию с 2005 года. Код библиотеки написан на Си и распространяется под лицензией BSD.
Ndër ndryshimet:
- Упрощена логика заполнения и сброса 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.<i>.pinned, stats.arenas.<i>.extents.<j>.npinned, stats.arenas.<i>.extents..pinned_bytes и stats.arenas.<i>.mutexes.extents_pinned.{counter} .
- Синхронизировано содержимое статистики 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.
Burimi: opennet.ru
