Після майже чотирирічної паузи (див.jemalloc все») відбувся випуск 5.3.1 аллокатора jemalloc – реалізації malloc(3), в якій особлива увага приділяється запобіганню фрагментації та підтримці масштабованої паралельності.
Новий випуск включає понад 390 коммітів з виправленням помилок, новими функціями, оптимізацією продуктивності та поліпшенням переносимості.
Проект написаний мовою С та розповсюджується за ліцензією BSD.
Нові можливості:
- Підтримка pvalloc(3).
- виявлення подвійного звільнення пам'яті у налагоджувальному складанні;
- додано опцію компіляції -enable-pageid для включення анотації відображуваної пам'яті.
- додано runtime-параметр prof_bt_max керування максимальною глибиною стека для профілювання;
- додано опцію компіляції -enable-force-getenv для використання getenv замість secure_getenv;
- додано опцію компіляції -disable-dss для відключення використання sbrk(2);
- додано опцію компіляції tcache_ncached_max для керування кількістю елементів у кеші потоків.
- додано runtime-параметр calloc_madvise_threshold для визначення, чи використовується ядро або memset для обнулення виділених блоків пам'яті під час виклику calloc;
- додано опцію компіляції -disable-user-config для відключення читання під час виконання конфігурацій з файлу /etc/malloc.conf або зі змінного середовища MALLOC_CONF;
- додано runtime-параметр disable_large_size_classes для забезпечення роботи нового алгоритму розрахунку доступного розміру, який мінімізує накладні витрати на пам'ять при виділенні великих блоків пам'яті, тобто з розміром >= 4 * PAGE;
- увімкнено використання process_madvise та додано runtime-параметр process_madvise_max_batch для управління максимальною кількістю регіонів пам'яті в кожній «пачці» madvise;
- додано інтерфейси mallctl:
- opt.prof_bt_max;
- arena.
- thread.tcache.max для зміни та отримання tcache_max поточного потоку;
- thread.tcache.ncached_max.write та thread.tcache.ncached_max.read_sizeclass для зміни та отримання ncached_max поточного потоку;
- arenas.hugepage для повернення використовуваного розміру hugepage, також експортується в статистику malloc;
- approximate_stats.active для отримання приблизного значення поточного обсягу активних байтів, яке не слід порівнювати з отриманими статистичними даними.
- також виправлено багато помилок та покращено документацію.
Джерело: linux.org.ru
