Как работает jemalloc? Каковы преимущества?

StackOverflow https://stackoverflow.com/questions/1624726

  •  06-07-2019
  •  | 
  •  

Вопрос

Firefox 3 поставляется с новым распределителем: jemalloc .

Я слышал в нескольких местах, что этот новый распределитель лучше. Лучшие результаты Google не дали никакой дополнительной информации, и меня интересует, как именно это работает.

Это было полезно?

Решение

jemalloc впервые появился для FreeBSD, детища одного «Джейсона Эванса», отсюда и «je». Я бы высмеял его за эгоистичность, если бы я ни разу не написал операционную систему под названием paxos : -)

См. этот PDF-файл для получения полной информации. Это официальный документ, подробно описывающий работу алгоритмов.

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

В однопоточных ситуациях нет реальной выгоды для нескольких арен, поэтому используется одна арена.

Однако в многопоточных ситуациях создается много арен (в четыре раза больше арен, чем процессоров), и потоки назначаются этим аренам в циклическом порядке.

Это означает, что конкуренция за блокировку может быть уменьшена, поскольку, хотя несколько потоков могут одновременно вызывать malloc или free , они будут бороться только в том случае, если они используют одну и ту же арену. Два потока с разными аренами не будут влиять друг на друга.

Кроме того, jemalloc пытается оптимизировать локальность кэша, поскольку процесс извлечения данных из ОЗУ происходит намного медленнее, чем использование данных, уже находящихся в кэш-памяти ЦП (по концепции не отличается от разницы между быстрой выборкой) из ОЗУ по сравнению с медленной загрузкой с диска). С этой целью он сначала пытается минимизировать общее использование памяти, так как это с большей вероятностью гарантирует, что весь рабочий набор приложения находится в кеше.

И там, где это не может быть достигнуто, он пытается гарантировать, что выделения являются непрерывными, поскольку выделенная вместе память, как правило, используется вместе.

Из официального документа видно, что эти стратегии дают производительность, аналогичную лучшим на сегодняшний день алгоритмам для однопоточного использования, и предлагают улучшения для многопоточного использования.

Другие советы

Существует один интересный источник: сам C-источник: http://mxr.mozilla.org/mozilla-central/source /memory/mozjemalloc/jemalloc.c

Вначале краткое резюме описывает, как это работает примерно. Однако более глубокий анализ алгоритма отсутствует.

Что касается преимуществ, которые jemalloc принесла Mozilla, за http : //blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (также первый результат Google для mozilla + jemalloc):

[...] пришел к выводу, что jemalloc дал нам наименьшее количество фрагментации после длительной работы. [...] Наши автоматические тесты в Windows Vista показали 22% -ное снижение использования памяти , когда мы включили jemalloc.

Aerospike внедрил jemalloc в частном филиале в 2013 году. В 2014 году он был включен в Aerospike 3.3. Пси Манкоски только что написал о реализации Aerospike, а также о том, когда и как эффективно использовать jemalloc для Высокая масштабируемость .

jemalloc действительно помог Aerospike воспользоваться преимуществами современных многопоточных, многоядерных, многоядерных компьютерных архитектур. Есть также некоторые очень важные возможности отладки, встроенные в jemalloc для управления аренами. Отладка позволила Psi, например, сказать, что является настоящей утечкой памяти по сравнению с тем, что было результатом фрагментации памяти. Psi также обсуждает, как кэш потоков и распределение между потоками обеспечивают общее повышение производительности (скорости).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top