Como funciona jemalloc? Quais são os benefícios?
Pergunta
O Firefox 3 veio com um novo alocador: jemalloc
Eu ouvi em vários lugares que este novo alocador é melhor. Os primeiros resultados do Google não deu qualquer informação adicional embora e eu estou interessado em exatamente como ele funciona.
Solução
jemalloc
apareceu pela primeira vez para o FreeBSD, a ideia de um "Jason Evans", daí o "je". Gostaria de ridicularizá-lo por ser egoísta se eu não tivesse escrito uma vez um sistema operacional chamado paxos
: -)
este PDF para maiores detalhes. É um papel branco que descreve em detalhes como a algoritmos de trabalho.
O principal benefício é a escalabilidade em multi-processador e os sistemas multi-threaded conseguida, em parte, pelo uso de múltiplos estádios (os blocos de memória em bruto a partir da qual são feitas as alocações).
Em situações single-threaded, não há nenhum benefício real para múltiplas arenas de modo a arena única é usado.
No entanto, em situações de multi-threaded, muitas arenas são criadas (quatro vezes mais arenas como existem processadores), e tópicos são atribuídos a essas arenas de uma forma round-robin.
Isto significa que a disputa do bloqueio pode ser reduzido uma vez que, enquanto vários segmentos podem chamá malloc
ou free
simultaneamente, que só vai lutar se eles compartilham a mesma arena. Dois tópicos com diferentes arenas não afetará o outro.
Além disso, tentativas jemalloc
para otimizar a localidade de cache desde que o ato de buscar dados da memória RAM é muito mais lento do que usar dados já nos caches de CPU (não é diferente em conceito para a diferença entre obter rápido de RAM contra atraente lento a partir do disco ). Para esse fim, ele primeiro tenta minimizar o uso de memória em geral, desde que é mais provável para garantir todo o conjunto de trabalho do aplicativo está em cache.
E, quando tal não pode ser alcançado, ele tenta garantir que as dotações são contíguos, desde memória alocada em conjunto tende a ser usados ??juntos.
A partir do papel branco, estas estratégias parecem dar um desempenho semelhante às melhores algoritmos atuais para uso de rosca única, enquanto melhorias oferta pelo uso multi-threaded.
Outras dicas
Existe uma fonte intersting: o próprio C-source: http://mxr.mozilla.org/mozilla-central/source /memory/mozjemalloc/jemalloc.c
No início, um pequeno resumo descreve como ele funciona mais ou menos. No entanto, uma análise mais aprofundada algoritmo está faltando.
Como para que benefícios jemalloc trouxe a Mozilla, por http : //blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (também primeiro google resultado para mozilla + jemalloc):
[...] concluiu que jemalloc nos deu o menor quantidade de fragmentação depois de correr por um longo período de tempo. [...] testes automatizados Nosso no Windows Vista mostrou uma queda de 22% no uso de memória quando se transformou jemalloc diante.
Aerospike implementado jemalloc volta em um private branch em 2013. Em 2014, ela foi incorporada Aerospike 3.3. Psi Mankoski escreveu apenas sobre a implementação do Aerospike, além de quando e como usar eficazmente jemalloc, por alta escalabilidade .
jemalloc realmente ajudou Aerospike tomada vantagem de vários segmentos modernos, multi-CPU, arquiteturas de computadores multi-core. Existem também alguns recursos de depuração muito importantes construídas no jemalloc para gerenciar arenas. O Psi permitido depuração para ser capaz de dizer, por exemplo, o que foi um vazamento de memória verdadeira, versus o que foi o resultado da fragmentação de memória. Psi também discute como cache de threads e alocação por thread proporcionou uma melhoria global do desempenho (velocidade).