jemalloc是如何工作的?有什么好处?

时间:2009-10-26 13:17:21

标签: firefox malloc

Firefox 3附带了一个新的分配器:jemalloc

我在几个地方听说这个新的分配器更好。谷歌的最高结果虽然没有提供任何进一步的信息,但我对其运作方式感兴趣。

4 个答案:

答案 0 :(得分:86)

jemalloc首次出现在FreeBSD上,这是一个“Jason Evans”的心血结晶,因此就是“je”。如果我没有写过一个名为paxos的操作系统,我会嘲笑他是自负的: - )

有关详细信息,请参阅this PDF。这是一份白皮书,详细描述了算法的工作原理。

主要的好处是多处理器和多线程系统的可扩展性,部分是通过使用多个场所(分配的原始内存块)实现的。

在单线程情况下,多个竞技场没有真正的好处,因此使用了单个竞技场。

然而,在多线程情况下,创建了许多竞技场(是处理器数量的四倍),线程以循环方式分配给这些竞技场。

这意味着可以减少锁争用,因为虽然多个线程可以同时调用mallocfree,但只有当它们共享相同的竞技场时它们才会竞争。具有不同竞技场的两个线程不会相互影响。

此外,jemalloc尝试优化缓存局部性,因为从RAM中获取数据的行为比使用CPU缓存中已有的数据要慢得多(概念上与从RAM快速获取的差异相比没有什么不同从磁盘缓慢获取)。为此,它首先尝试最小化整体内存使用,因为这更有可能确保应用程序的整个工作集在缓存中。

并且,在无法实现的情况下,它会尝试确保分配是连续的,因为分配在一起的内存往往会一起使用。

从白皮书中,这些策略似乎提供了与当前最佳单线程算法相似的性能,同时为多线程使用提供了改进。

答案 1 :(得分:9)

有一个有趣的来源:C源本身: http://mxr.mozilla.org/mozilla-central/source/memory/mozjemalloc/jemalloc.c

最初,简短的摘要描述了它的工作原理。想到了,缺少更深入的算法分析。

答案 2 :(得分:4)

关于jemalloc给mozilla带来的好处,每http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/(也是mozilla + jemalloc的第一个谷歌搜索结果):

[...]得出结论,jemalloc在长时间运行后给了我们最小量的碎片。 [...]当我们开启jemalloc时,我们在Windows Vista上的自动化测试显示内存使用量下降了22%

答案 3 :(得分:1)

Aerospike于2013年在私人分公司实施了jemalloc。2014年,它被纳入Aerospike 3.3。 Psi Mankoski刚刚写了关于Aerospike的实现,以及何时以及如何有效地使用jemalloc,High Scalability

jemalloc真正帮助Aerospike利用现代多线程,多CPU,多核计算机架构。还有一些非常重要的调试功能内置于jemalloc来管理竞技场。调试允许Psi能够告诉,例如,什么是真正的内存泄漏,而不是内存碎片的结果。 Psi还讨论了线程缓存和每线程分配如何提供整体性能(速度)改进。