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.

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top