Высокопроизводительный менеджер распределения памяти jemalloc выпущен
в виде отдельной библиотеки для платформы Linux. Jemalloc представляет
собой реализацию функций malloc, оптимизированную для решения проблем
фрагментации и оптимальной утилизации ресурсов CPU при выделения памяти
в нескольких потоках на многопроцессорных системах. Изначально jemalloc
был разработан Джейсоном Эвансом (Jason Evans) для FreeBSD 7.0, а
позднее был портирован в NetBSD и интегрирован в состав браузера
Firefox 3. Для решения проблем с блокировками на SMP системах в jemalloc для каждого процессора используется
своя изолированная область распределения памяти, что позволяет добиться
линейной масштабируемости при измерении числа распределений памяти в
единицу времени при росте числа нитей в многопоточных приложениях, при
том что в таких системах как pkhmalloc и dlmalloc производительность
падает с ростом числа потоков. Использование jemalloc позволяет
увеличить производительность, сократив при этом фрагментацию и в связи
с этим требуя для своей работы меньше памяти. Например, переход Firefox
на jemalloc привел к уменьшению потребления памяти при длительной работе в среднем на 22%.
С выходом обособленной библиотеки пользователи Linux получили
возможность использовать jemalloc в своих программах не прибегая к
интеграции кода jemalloc в свой проект. В представленном варианте
jemalloc поддерживаются такие возможности, как локальное для нитей
кеширование, профилирование кучи, интроспекция, альтернативная реализация красно-черных деревьев. Источник
|