版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、TCMalloc:線程緩存的Malloc作者:SanjayGhemawatPaulMenage原文翻譯:ShiningRay動(dòng)機(jī)TCMalloc要比glibc2.3的malloc(可以從一個(gè)叫作ptmalloc2的獨(dú)立庫(kù)獲得)和其他我測(cè)試過(guò)的malloc都快。ptmalloc在一臺(tái)2.8GHz的P4機(jī)器上(對(duì)于小對(duì)象)執(zhí)行一次malloc及free大約需要300納秒。而TCMalloc的版本同樣的操作大約只需要50納秒。malloc版本
2、的速度是至關(guān)重要的,因?yàn)槿绻鹠alloc不夠快,應(yīng)用程序的作者就很有可能在malloc之上寫(xiě)一個(gè)自己的自由列表。這就可能導(dǎo)致額外的代碼復(fù)雜度,以及更多的內(nèi)存占用――除非作者本身非常仔細(xì)地劃分自由列表的大小并經(jīng)常從自由列表中清除空閑的對(duì)象。TCMalloc也減少了多線程程序中的鎖爭(zhēng)用情況。對(duì)于小對(duì)象,幾乎已經(jīng)達(dá)到了零爭(zhēng)用。對(duì)于大對(duì)象,TCMalloc嘗試使用粒度較好和有效的自旋鎖。ptmalloc同樣是通過(guò)使用每線程各自的場(chǎng)地來(lái)減少鎖爭(zhēng)用
3、,但是ptmalloc2使用每線程場(chǎng)地有一個(gè)很大的問(wèn)題。在ptmalloc2中,內(nèi)存可能會(huì)從一個(gè)場(chǎng)地移動(dòng)到另一個(gè)。這有可能導(dǎo)致大量空間被浪費(fèi)。例如,在一個(gè)Google的應(yīng)用中,第一階段可能會(huì)為其URL標(biāo)準(zhǔn)化的數(shù)據(jù)結(jié)構(gòu)分配大約300MB內(nèi)存。當(dāng)?shù)谝浑A段結(jié)束后,第二階段將從同樣的地址空間開(kāi)始。如果第二個(gè)階段被安排到了一個(gè)與第一階段什用的場(chǎng)地不同的場(chǎng)地,這個(gè)階段不會(huì)復(fù)用任何第一階段留下的的內(nèi)存,并會(huì)給地址空間添加另外一個(gè)300MB。類似的內(nèi)存
4、爆炸問(wèn)題也可以在其他的應(yīng)用中看到。TCMalloc的另一個(gè)好處是小對(duì)象的空間最優(yōu)表現(xiàn)形式。例如,分配N個(gè)8字節(jié)對(duì)象可能要使用大約8N1.01字節(jié)的空間。即,多用百分之一的空間。而ptmalloc2中每個(gè)對(duì)象都使用了一個(gè)四字節(jié)的頭,(我認(rèn)為)并將最終的尺寸規(guī)整為8字節(jié)的倍數(shù),最后使用了16N字節(jié)。使用要使用TCMalloc,只要將tcmalloc通過(guò)“l(fā)tcmalloc”鏈接器標(biāo)志接入你的應(yīng)用即可。你也可以通過(guò)使用LD_PRELOAD在不
5、是你自己編譯的應(yīng)用中使用tcmalloc:$LD_PRELOAD=“usrliblibtcmalloc.so“LD_PRELOAD比較討巧,我們也不十分推薦這種用法。TCMalloc還包含了一個(gè)堆檢查器以及一個(gè)堆測(cè)量器。如果你更想鏈接不包含堆測(cè)量器和檢查器的TCMalloc版本(比如可能為了減少靜態(tài)二進(jìn)制文件的大?。?,你可以接入libtcmalloc_minimal。概覽?如果自由列表不空,那么從移除列表的第一個(gè)對(duì)象并返回它。當(dāng)按照這個(gè)
6、快速通道時(shí),TCMalloc不會(huì)獲取任何鎖。這就可以極大提高分配的速度,因?yàn)殒i解鎖操作在一個(gè)2.8GHzXeon上大約需要100納秒的時(shí)間。如果自由列表為空:?從該尺寸類別的中央自由列表(中央自由列表是被所有線程共享的)取得一連串對(duì)象。?將他們放入線程局部的自由列表。?將新獲取的對(duì)象中的一個(gè)返回給應(yīng)用程序。如果中央自由列表也為空:(1)我們從中央頁(yè)分配器分配了一連串頁(yè)面。(2)將他們分割成該尺寸類的一系列對(duì)象。(4)像前面一樣,將部分對(duì)
7、象移入線程局部的自由列表中。大對(duì)象的分配一個(gè)大對(duì)象的尺寸(32K)會(huì)被除以一個(gè)頁(yè)面尺寸(4K)并取整(大于結(jié)果的最小整數(shù)),同時(shí)是由中央頁(yè)面堆來(lái)處理的。中央頁(yè)面堆又是一個(gè)自由列表的陣列。對(duì)于i=256個(gè)頁(yè)面的自由列表:k個(gè)頁(yè)面的一次分配通過(guò)在第k個(gè)自由列表中查找來(lái)完成。如果該自由列表為空,那么我們則在下一個(gè)自由列表中查找,如此繼續(xù)。最終,如果必要的話,我們將在最后一個(gè)自由列表中查找。如果這個(gè)動(dòng)作也失敗了,我們將向系統(tǒng)獲取內(nèi)存(使用sbr
8、k、mmap或者通過(guò)在devmem中進(jìn)行映射)。如果k個(gè)頁(yè)面的一次分配行為由連續(xù)的長(zhǎng)度k的頁(yè)面滿足了,剩下的連續(xù)頁(yè)面將被重新插回到頁(yè)面堆的對(duì)應(yīng)的自由列表中。跨度(Span)TCMalloc管理的堆由一系列頁(yè)面組成。連續(xù)的頁(yè)面由一個(gè)“跨度”(Span)對(duì)象來(lái)表示。一個(gè)跨度可以是已被分配或者是自由的。如果是自由的,跨度則會(huì)是一個(gè)頁(yè)面堆鏈表中的一個(gè)條目。如果已被分配,它會(huì)是一個(gè)已經(jīng)被傳遞給應(yīng)用程序的大對(duì)象,或者是一個(gè)已經(jīng)被分割成一系列小對(duì)象的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 一種基于緩存分區(qū)的線程間緩存干擾消除結(jié)構(gòu)的設(shè)計(jì)和實(shí)現(xiàn).pdf
- 流媒體服務(wù)器中線程與緩存結(jié)構(gòu)分析與研究.pdf
- 代理緩存集群緩存策略的研究.pdf
- 面向多線程分組分派的線程隊(duì)列狀態(tài)監(jiān)測(cè)技術(shù).pdf
- 基于TcMalloc的用戶態(tài)內(nèi)存管理軟件的研究與實(shí)現(xiàn).pdf
- 基于多線程應(yīng)用特性的多-眾核系統(tǒng)片上互連與緩存一致性整體優(yōu)化方法.pdf
- bcb線程池
- 面向通信優(yōu)化的MPSoC線程劃分與線程遷移方法研究.pdf
- 驗(yàn)證帶有線程動(dòng)態(tài)創(chuàng)建和退出的多線程程序.pdf
- Web集群緩存系統(tǒng)中代理緩存技術(shù)的研究.pdf
- 基于緩存訪問(wèn)規(guī)律的低級(jí)緩存優(yōu)化策略.pdf
- java多線程與線程安全實(shí)踐-基于http協(xié)議的斷點(diǎn)續(xù)傳
- 使用vc的mfc開(kāi)發(fā)線程
- java 線程的掛起與喚醒
- redis頁(yè)面緩存html,使用redis實(shí)現(xiàn)頁(yè)面緩存
- linux多線程編程
- 多線程的內(nèi)存調(diào)度.pdf
- 驗(yàn)證帶有線程動(dòng)態(tài)創(chuàng)建和退出多線程程序.pdf
- 操作系統(tǒng)課程設(shè)計(jì)--- 多線程管理與線程通信
- 高速緩存
評(píng)論
0/150
提交評(píng)論