Firefox 3帶有一個新的分配器:jemalloc
。jemalloc如何工作?有什麼好處?
我在幾個地方聽說這個新分配器更好。 Google的最新結果並沒有提供任何進一步的信息,我對它的工作原理感興趣。
Firefox 3帶有一個新的分配器:jemalloc
。jemalloc如何工作?有什麼好處?
我在幾個地方聽說這個新分配器更好。 Google的最新結果並沒有提供任何進一步的信息,我對它的工作原理感興趣。
jemalloc
首次出現在FreeBSD上,這是一個「傑森埃文斯」的心血結晶,因此也是「je」。如果我沒有寫過一個名爲paxos
的操作系統,我會嘲笑他是自負的:-)
請參閱this PDF瞭解詳細信息。這是一份白皮書,詳細描述算法是如何工作的。
主要的好處是在多處理器和多線程系統中的可擴展性,部分是通過使用多個場(從中進行分配的原始內存塊)實現的。
在單線程的情況下,對於多個競技場沒有真正的好處,所以使用單個競技場。
但是,在多線程的情況下,創建了許多舞臺(處理器數量是競技場的四倍),並且線程以循環方式分配給這些舞臺。
這意味着可以減少鎖定爭用,因爲雖然多個線程可能同時調用malloc
或free
,但它們只會在共享同一個競技場的情況下競爭。兩個不同領域的線程不會相互影響。
此外,jemalloc
試圖優化高速緩存的本地化,因爲從RAM中獲取數據的行爲比使用CPU高速緩存中的數據慢得多(概念上與從RAM快速獲取與從低速獲取磁盤)。爲此,它首先嚐試最大限度地減少內存使用,因爲這更有可能確保應用程序的整個工作集都處於緩存中。
而且,如果無法實現,它會嘗試確保分配是連續的,因爲分配在一起的內存往往會一起使用。
從白皮書中可以看出,這些策略似乎給當前單線程使用的最佳算法提供了類似的性能,同時爲多線程使用提供了改進。
有一個野趣來源: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%。
Aerospike於2013年在一傢俬營分支機構實施了jemalloc。2014年,它被納入Aerospike 3.3。Psi Mankoski剛剛寫了關於Aerospike的實施方案,以及何時和如何有效使用jemalloc,對於High Scalability。
jemalloc確實幫助Aerospike充分利用現代多線程,多CPU,多核計算機架構。 jemalloc還內置了一些非常重要的調試功能來管理舞臺。調試允許Psi能夠告訴,例如,什麼是真正的內存泄漏,與內存碎片的結果是什麼。 Psi還討論了線程緩存和每線程分配如何提供整體性能(速度)改進。
似乎我真的監督了第一個結果。 :P但是非常感謝提示。 – Albert 2009-10-26 13:35:23