强大的多线程内存分配器jemalloc

来源:互联网 发布:常州网络教育 编辑:程序博客网 时间:2024/06/12 01:45

目前使用的malloc() 库,调用的是 Poul-Henning Kamp 的 phkmalloc,这一实现已经有了近十年历史。这一实现设计于内存稀缺的时代,在内存分配优先级的考虑上与现在不同,而且当时多线程仍是一个学术问题。尽管如此,它仍然是相当流行的 malloc()实现,并广泛应用于所有的BSD中,甚至某些Linux发行版也使用了。
由于在多处理器系统中运行多线程应用时,它的缺乏效率,一个新的userland内存分配器被创建出来,并被它的创建者Jason Evans命名为jemalloc。它在计算机速度和内存可用性上的改进意味着,相对于phkmalloc——仅在内存使用上保守时使用,jemalloc 更适用于复杂情况,以及在底层属性上——比如CPU缓存位置和并发处理——需要记账时。 (此处似乎需要调整翻译)
这个allocator最终成为这个样子:使用多allocation arenas帮助并发性,针对多线程进行了优化。在单处理器的系统上,只有一个arena,但是在多处理器,或者则多核系统上,就分配4倍于处理器个数的arena。Allocations are divided into broad classes based on their size and those classes are further subdivided. 测试显示,jemalloc显然在多线程应用(比如MySQL)以及制造许多小allocation的应用上面有更佳表现。

 


下面是一片Paper
http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf

 

http://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919

 

 

类似的还有一个google开发的tcmalloc
http://code.google.com/p/google-perftools/

原创粉丝点击