Четири години след публикуването на предишната версия е достъпен релиз на библиотеката за управление на паметта jemalloc 5.3.1, предлагаща алтернативна реализация на функциите malloc, оптимизирана за намаляване на фрагментацията и работа на многоядрени системи. За разрешаване на проблемите с блокировките на многоядрени системи в jemalloc за всяко ядро на CPU е използвана собствена изолирана област за разпределение на паметта, което позволява постигане на линейна мащабируемост при нарастване на броя на нишките.
През юни 2025 година авторът на проекта прекрати поддръжката и премести репозитория jemalloc в архивен режим, но преди месец разработката бе възобновена от компания Meta, която използва jemalloc в своята инфраструктура. Първоначално библиотеката е разработена за FreeBSD и се използва в тази операционна система по подразбиране от 2005 година. Кодът на библиотеката е написан на C и се разпространява под лиценз BSD.
Сред промените:
- Реализирана е функцията pvalloc, която може да бъде полезна при замяна на алокатора на памет libc.
- В дебъг режимите е включен режим за откриване на двойно извикване на функцията free(). За настройка на размера на стека, в рамките на който се изпълнява сканирането, е добавен параметърът debug_double_free_max_scan.
- Добавена е опцията за компилация „—enable-pageid“ за задаване на тагове при мапиране на памет, използвайки prctl с флага PR_SET_VMA. След включване мапингът може да се проследява чрез /proc/<pid>/maps.
- Добавен е параметърът „prof_bt_max“, позволяващ задаване на максималната дълбочина на стека за профилиране.
- Добавена е опцията за компилация „—enable-force-getenv“ за използване в кода на обикновената функция getenv() вместо защитената secure_getenv().
- Добавена е опцията за компилация „—disable-dss“ за деактивиране на използването на функцията sbrk().
- Добавен е параметърът „tcache_ncached_max“ за ограничаване на броя на елементите в кеша на нишките.
- Добавен е параметърът „calloc_madvise_threshold“ за настройка на използването на механизма на ядрото madvise или функцията memset за нулиране на паметта, разпределена чрез функцията calloc.
- Добавена е опцията за компилация „—disable-user-config“ за деактивиране на зареждането на настройки от файла /etc/malloc.conf или променливата на средата MALLOC_CONF.
- Добавен е параметърът „process_madvise_max_batch“ за ограничаване на броя на блоковете памет за всяка операция batch madvise.
- Добавен параметър «disable_large_size_classes» за деактивиране на новия алгоритъм за изчисление на размера на заделената памет, който намалява разходите при заделяне на блокове с размер над 4 страници памет.
- В утилитата mallctl са добавени опциите: opt.prof_bt_max, arena.<i>.name, thread.tcache.max, thread.tcache.ncached_max.write, thread.tcache.ncached_max.read_sizeclass, arenas.hugepage и approximate_stats.active.
Източник: opennet.ru
