Опубликована библиотека управления памятью jemalloc 5.4 - QubStore

Опубликована библиотека управления памятью jemalloc 5.4

Вышел в свет релиз библиотеки jemalloc 5.4.0 — альтернативной реализации malloc, ориентированной на сокращение фрагментации памяти и эффективную работу на многоядерных системах.

Для борьбы с блокировками на многоядерных машинах jemalloc выделяет каждому ядру CPU отдельную область распределения памяти. Такой подход обеспечивает линейный рост производительности при увеличении числа потоков. Судьба проекта складывалась непросто: в июне 2025 года автор перевёл репозиторий в архивный режим и остановил сопровождение, однако уже в марте компания Meta — активный пользователь jemalloc в собственной инфраструктуре — возобновила разработку. Изначально библиотека создавалась для FreeBSD и с 2005 года применяется в этой ОС по умолчанию. Код написан на Си и распространяется по лицензии BSD.

В версии 5.4.0 переработали логику заполнения и сброса 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..pinned, stats.arenas..extents..npinned, stats.arenas..extents..pinned_bytes и stats.arenas..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.

Ссылка на основную публикацию