更好的記憶體管理 jemalloc

2021-07-09 02:27:35 字數 2299 閱讀 1323

jemalloc的創始人jason evans也是在freebsd很有名的開發人員。此人就在2023年為提高低效能的malloc而寫的jemalloc。jemalloc是從2023年開始以freebsd標準引進來的。軟體技術革新很多是freebsd發起的。在freebsd應用廣泛的技術會慢慢匯入到linux。

目前jemalloc在firefox中也在使用。在firefox2中出現了記憶體碎片問題之後,便在firefox3中使用了jemalloc。在safari和chrome中使用的是google的tcmalloc。

jemalloc的技術特性

jemalloc聚集了malloc的使用過程中所驗證的很多技術。忽略細節,從架構著眼,最出色的部分仍是arena和thread cache。(事實上,這兩個與tcmalloc的架構幾乎相同。jemalloc only的部分將會在另一次posting中繼續**。)

arena

與其像malloc一樣集中管理一整塊記憶體,不如將其分成許多個小塊來分而治之。此小塊便稱為arena。讓我們想象一下,給幾個小朋友一張大圖紙,讓他們隨意地畫點。結果可想而知,他們肯定相互顧忌對方而不敢肆意地畫(synchronization),從而影響畫圖效率。但是如果老師事先在大圖紙上劃分好每個人的區域,小朋友們就可以又快又準地在各自地領域上畫圖。這樣的概念就是arena。

thread cache

如果是開闢小塊記憶體,為使不參照arena而直接malloc,給各自的執行緒thread cache領域。此idea是google的tcmalloc的核心部分,亦在jemalloc中體現。

再拿上面的例子,這次給小朋友們除了一張大圖紙外,再各自給a4紙一張。這樣,小朋友們在不畫大面積的點時,只在自己的a4紙上心情地畫即可(no arena seeking)。可以在自己手上的紙上畫或塗(using thread cache),完全不用顧忌別人(no synchronization, no locking),迅速有效地畫。

下圖是jemalloc的核心layout。看著複雜,其實都是上面說明的部分。

實際jemalloc的效能呢?

最左邊的就是glibc的malloc,最右邊的就是jemalloc。從圖表上可以看出,jemalloc的效能有glibc的兩倍以上。非常壓倒性的效能差異。因此,使用了jemalloc的應用程式自然會快很多。jemalloc旁邊的就是tcmalloc。tcmalloc的效能與其相差甚微,低jemalloc2.1.0慢4.5%。圖上和tcmalloc的1.4版本,而如今它已經到了1.6版本,因此實際上這兩者應該是不相仲伯的。jemalloc的創始人jason evans也意識到這一點,說在cpu core 8以上的計算機上jemalloc效率更高。

給程式設計師的最後的免費午餐 – kth分布式技術lab的例項

2023年發表了一篇文章「免費午餐的時代結束了」。在之前,程式就算不用費腦子,隨著cpu時鐘速度增加,程式效能自己就會上去。但現在不同,現在cpu時鐘趨於穩定,而核數不斷地增加。程式設計師需要適應這樣的多執行緒多程序的環境,並要開發出適合的程式。文章講的大概是這樣的內容。

6年之後的如今,這篇文章完全變成現實了。事實上cpu時鐘停留在3ghz,而核不斷上公升。現在程式要適應多執行緒多程序的分布式計算,速度才能上公升。但是這樣的程式很難。

現在在多執行緒的環境下,給程式設計師們的最後一道午餐便是tcmalloc,jemalloc這樣的malloc library。對於使用多執行緒的程式而言,效能會提高數十%。

共享一下我本人的經驗。我本人在kth技術研究所分布式技術lab中承擔ilock(分布式同步工具,請參考google的chubby)。在ilock中用了google的tcmalloc的結果,效能提公升了18~22%。

最大的優點就是你不需要做任何複雜的工作便可得到這樣的效果。不需要**重編譯。只需在執行二進位制之前,在cmd視窗中輸入

$ ld_preload=」tcmalloc所設定的資料夾/libtcmalloc.so」

這樣在之後執行的應用程式會使用tcmalloc或jemalloc,從而代替glibc標準malloc(ptmalloc)。這需設定此處,我們便可得到效能20%的提公升,這真可謂是送給我們的最後的免費午餐。

如今,在分布式技術lab中使用google的tcmalloc。原因在於效能上兩者差不多,但google的tcmalloc所提供的程式分析工具非常(heap profiler, cpu profiler)豐富。所以tcmalloc可能更方便一些。

一定要使用最新的malloc麼?一定要的!

jemalloc 記憶體分配管理

今天在安裝mariadb的時候發現編譯一直提示乙個錯誤 usr bin ld cannot find ljemalloc pic 後來發現是因為沒有用這個jemalloc 可能是mariadb資料庫預設就使用這種方式管理多執行緒記憶體分配 一 首先這個jemalloc是什麼 jemalloc源於ja...

高效能記憶體分配器 jemalloc 基本原理

jemalloc 架構設計 jemalloc 是由 jason evans 在 freebsd 專案中引入的新一代記憶體分配器。它是乙個通用的 malloc 實現,側重於減少記憶體碎片和提公升高併發場景下記憶體的分配效率,其目標是能夠替代 malloc。jemalloc 應用十分廣泛,在 firef...

有效管理時間,成就更好的自己

這個時代最難的事情是什麼?也許你會說是 把自己的思想裝進別人的口袋裡 賺它乙個億 但是我個人認為,最難的是有效管理時間。時間是公平的,給每個人每一天都是24小時,假如我們能有效管理時間,每天比別人哪怕多出一小時,積少成多,一年就多出365小時了。那麼就可以利用這些時間做自己想做的事情,旅遊 學習 提...