tcmalloc線程緩存的malloc_第1頁
已閱讀1頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、TCMalloc:線程緩存的Malloc作者:SanjayGhemawatPaulMenage原文翻譯:ShiningRay動機TCMalloc要比glibc2.3的malloc(可以從一個叫作ptmalloc2的獨立庫獲得)和其他我測試過的malloc都快。ptmalloc在一臺2.8GHz的P4機器上(對于小對象)執(zhí)行一次malloc及free大約需要300納秒。而TCMalloc的版本同樣的操作大約只需要50納秒。malloc版本

2、的速度是至關重要的,因為如果malloc不夠快,應用程序的作者就很有可能在malloc之上寫一個自己的自由列表。這就可能導致額外的代碼復雜度,以及更多的內存占用――除非作者本身非常仔細地劃分自由列表的大小并經常從自由列表中清除空閑的對象。TCMalloc也減少了多線程程序中的鎖爭用情況。對于小對象,幾乎已經達到了零爭用。對于大對象,TCMalloc嘗試使用粒度較好和有效的自旋鎖。ptmalloc同樣是通過使用每線程各自的場地來減少鎖爭用

3、,但是ptmalloc2使用每線程場地有一個很大的問題。在ptmalloc2中,內存可能會從一個場地移動到另一個。這有可能導致大量空間被浪費。例如,在一個Google的應用中,第一階段可能會為其URL標準化的數據結構分配大約300MB內存。當第一階段結束后,第二階段將從同樣的地址空間開始。如果第二個階段被安排到了一個與第一階段什用的場地不同的場地,這個階段不會復用任何第一階段留下的的內存,并會給地址空間添加另外一個300MB。類似的內存

4、爆炸問題也可以在其他的應用中看到。TCMalloc的另一個好處是小對象的空間最優(yōu)表現形式。例如,分配N個8字節(jié)對象可能要使用大約8N1.01字節(jié)的空間。即,多用百分之一的空間。而ptmalloc2中每個對象都使用了一個四字節(jié)的頭,(我認為)并將最終的尺寸規(guī)整為8字節(jié)的倍數,最后使用了16N字節(jié)。使用要使用TCMalloc,只要將tcmalloc通過“l(fā)tcmalloc”鏈接器標志接入你的應用即可。你也可以通過使用LD_PRELOAD在不

5、是你自己編譯的應用中使用tcmalloc:$LD_PRELOAD=“usrliblibtcmalloc.so“LD_PRELOAD比較討巧,我們也不十分推薦這種用法。TCMalloc還包含了一個堆檢查器以及一個堆測量器。如果你更想鏈接不包含堆測量器和檢查器的TCMalloc版本(比如可能為了減少靜態(tài)二進制文件的大?。?,你可以接入libtcmalloc_minimal。概覽?如果自由列表不空,那么從移除列表的第一個對象并返回它。當按照這個

6、快速通道時,TCMalloc不會獲取任何鎖。這就可以極大提高分配的速度,因為鎖解鎖操作在一個2.8GHzXeon上大約需要100納秒的時間。如果自由列表為空:?從該尺寸類別的中央自由列表(中央自由列表是被所有線程共享的)取得一連串對象。?將他們放入線程局部的自由列表。?將新獲取的對象中的一個返回給應用程序。如果中央自由列表也為空:(1)我們從中央頁分配器分配了一連串頁面。(2)將他們分割成該尺寸類的一系列對象。(4)像前面一樣,將部分對

7、象移入線程局部的自由列表中。大對象的分配一個大對象的尺寸(32K)會被除以一個頁面尺寸(4K)并取整(大于結果的最小整數),同時是由中央頁面堆來處理的。中央頁面堆又是一個自由列表的陣列。對于i=256個頁面的自由列表:k個頁面的一次分配通過在第k個自由列表中查找來完成。如果該自由列表為空,那么我們則在下一個自由列表中查找,如此繼續(xù)。最終,如果必要的話,我們將在最后一個自由列表中查找。如果這個動作也失敗了,我們將向系統(tǒng)獲取內存(使用sbr

8、k、mmap或者通過在devmem中進行映射)。如果k個頁面的一次分配行為由連續(xù)的長度k的頁面滿足了,剩下的連續(xù)頁面將被重新插回到頁面堆的對應的自由列表中??缍龋⊿pan)TCMalloc管理的堆由一系列頁面組成。連續(xù)的頁面由一個“跨度”(Span)對象來表示。一個跨度可以是已被分配或者是自由的。如果是自由的,跨度則會是一個頁面堆鏈表中的一個條目。如果已被分配,它會是一個已經被傳遞給應用程序的大對象,或者是一個已經被分割成一系列小對象的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論