Домой Софт Релиз аллокатора памяти jemalloc 5.3.1: главные изменения и новые функции

Релиз аллокатора памяти jemalloc 5.3.1: главные изменения и новые функции

Первое крупное обновление популярного аллокатора памяти за последние четыре года принесло более 390 коммитов, новые параметры и оптимизацию.

Пингвин Linux и логотип jemalloc
Релиз аллокатора памяти jemalloc 5.3.1: главные изменения и новые функции — иллюстрация к материалу. Источник: linux.org.ru

Спустя почти четыре года после предыдущего крупного релиза состоялся долгожданный выпуск версии 5.3.1 популярного аллокатора памяти jemalloc. Данная реализация malloc(3) традиционно делает главный акцент на эффективном предотвращении фрагментации памяти и обеспечении высокой масштабируемости в многопоточных приложениях.

Свежий релиз вобрал в себя свыше 390 разнообразных коммитов. Они включают в себя исправления накопленных ошибок, внедрение новых полезных функций, общую оптимизацию производительности, а также значительное улучшение переносимости между различными платформами.

Сам проект написан на классическом языке программирования Си и распространяется под свободной лицензией BSD.

Ключевые нововведения и изменения в версии 5.3.1:

  • реализована полноценная поддержка функции pvalloc(3);
  • добавлен механизм надежного обнаружения двойного освобождения памяти (double free) в специальных отладочных сборках;
  • представлена новая опция компиляции --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.<i>.name для изменения и получения пользовательских имён конкретной арены;
    • 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 для быстрого получения приблизительного объема активных байтов (полученные данные не рекомендуется напрямую сравнивать с другими статистическими показателями).
  • проведена масштабная работа по устранению множества мелких дефектов и улучшению сопутствующей технической документации.

Подробности проекта можно найти на официальной странице разработчиков на GitHub.

Источник: https://www.linux.org.ru