Firefox 3附带了一个新的分配器:jemalloc.
我在几个地方听说过这个新的分配器更好.谷歌的最高结果虽然没有提供任何进一步的信息,但我对其运作方式感兴趣.
pax*_*blo 103
jemalloc首次出现在FreeBSD上,这是一个"Jason Evans"的心血结晶,因此就是"je".如果我没有写过一个名为paxos:-) 的操作系统,我会嘲笑他是自负的
有关详细信息,请参阅此PDF.这是一份白皮书,详细描述了算法的工作原理.
主要的好处是多处理器和多线程系统的可扩展性,部分是通过使用多个竞技场(从中进行分配的原始内存块)实现的.
在单线程情况下,多个竞技场没有真正的好处,因此使用单个竞技场.
但是,在多线程情况下,创建了许多竞技场(是处理器数量的四倍),并且线程以循环方式分配给这些竞技场.
这意味着可以减少锁争用,因为虽然多个线程可以调用malloc或free同时调用,但只有当它们共享相同的竞技场时它们才会竞争.具有不同竞技场的两个线程不会相互影响.
此外,jemalloc尝试优化缓存局部性,因为从RAM中获取数据的行为比使用CPU缓存中已有的数据要慢得多(概念上与从RAM快速获取到从磁盘缓慢获取之间的差异没有什么不同).为此,它首先尝试最小化整体内存使用,因为这更有可能确保应用程序的整个工作集在缓存中.
并且,在无法实现的情况下,它会尝试确保分配是连续的,因为分配在一起的内存往往会一起使用.
从白皮书中,这些策略似乎与当前用于单线程使用的最佳算法具有相似的性能,同时提供了对多线程使用的改进.
Alb*_*ert 11
有一个有趣的来源: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/(也是mozilla+jemalloc的第一个谷歌结果):
[...]得出的结论是,在长时间运行后,jemalloc 给我们带来了最少的碎片量。[...] 我们在 Windows Vista 上的自动化测试显示,当我们打开 jemalloc 时,内存使用量下降了 22% 。
| 归档时间: |
|
| 查看次数: |
32360 次 |
| 最近记录: |