




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、處理硬件高速緩存和TLB白皮書 P79-83 紅皮書 P228-230 徐波Why?RAM和和CPU速度不一樣,減少速度不一樣,減少CPU的等待時間的等待時間RAM相對于硬盤來說,已經(jīng)相當(dāng)?shù)目炝?。但和CPU相比,性能還是不夠。當(dāng)今的CPU時鐘頻率接近幾個GHz,而動態(tài)RAM芯片的存取時間是時鐘周期的數(shù)百倍,這就意味著從RAM中取操作數(shù)或向RAM存放結(jié)果這樣的指令執(zhí)行時,CPU可能需要等待過長的時間。為了縮小CPU和RAM之間的速度不匹配,引入了硬件高速緩存(hardware cache memory)。硬件高速緩存基于局部性原理(locality principle)。該原理既適用程序結(jié)構(gòu)也適
2、用數(shù)據(jù)結(jié)構(gòu)。因此,引入小而快的內(nèi)存來存放最近最常用的代碼和數(shù)據(jù)變得很有意義。What?硬件高速緩存(hardware cache memory) 內(nèi)核將高速緩存視為通過虛擬地址快速訪問數(shù)據(jù)的一種機制,TLB-轉(zhuǎn)換后援緩沖器(translation lookaside buffer) TLB的語義抽象是將虛擬地址轉(zhuǎn)換為物理地址的一種機制。(紅) TLB是一個內(nèi)存管理單元用于改進虛擬地址到物理地址轉(zhuǎn)換速度的緩存。(網(wǎng))處理硬件高速緩存 硬件高速緩存是通過高速緩存行(cache line)尋址的。 L1_CACHE_BYTES宏產(chǎn)生以字節(jié)為單位的高速緩存的大小。 在早于Pentium 4 的inte
3、l模型中,這個宏產(chǎn)生的值為32;在Pentium 4以上則為128.處理硬件高速緩存 為了使高速緩存命中率達到最優(yōu)化,內(nèi)核一般考慮以下的幾點: 1. 常用字段對齊:常用字段對齊:一個數(shù)據(jù)結(jié)構(gòu)中最常使用的字段盡可能的對齊的放在一起,從而使它們能夠緩沖到同一個cache line中。 2. 連續(xù)分配內(nèi)存:連續(xù)分配內(nèi)存:為一大組數(shù)據(jù)結(jié)構(gòu)分配空間時,內(nèi)核試圖把這些數(shù)據(jù)結(jié)構(gòu)盡可能的存放在地址連續(xù)內(nèi)存里,使得它們能夠盡可能的被同一個cache line緩沖。 3. 使用高速緩存友好性的代碼友好性的代碼。審慎地混合使用普通函數(shù)、內(nèi)聯(lián)定義、宏。(紅皮書)處理硬件高速緩存 80X86微處理器自動高速緩存的同步刷
4、新,所以用于這種處理器的linux內(nèi)核并不處理任何硬件高速緩存的刷新 但是內(nèi)核卻為不能同步高速緩存的處理器提供了高速緩存刷新接口對于X86微處理器體系結(jié)構(gòu)而言,Intel已經(jīng)為裝入高速緩存的數(shù)據(jù)提供了一種自動與內(nèi)存保持一致性的機制(窺探 cache snooping),因此內(nèi)核對此就無需關(guān)心,所以對于Cache刷新的一些內(nèi)核接口的實現(xiàn)基本上都是空的,比如以下的幾個函數(shù):空操作 dowhile(0) 內(nèi)核代碼include/asm-x86/cacheflush.h處理TLB 處理器不能自動同步它們自己的處理器不能自動同步它們自己的TLB,因為因為決定決定線性地址和物理線性地址和物理地址之間映射何
5、時不再有效的是地址之間映射何時不再有效的是內(nèi)核,而內(nèi)核,而不是硬件不是硬件。 比如,從當(dāng)前進程切換到另外的一個進程,每個進程都有自己的頁目錄頁表結(jié)構(gòu),都有著不同的從線性地址到物理地址的映射方案,所以,當(dāng)進程切換的時候,原來TLB中的內(nèi)容就應(yīng)該失效。處理TLB 對于X86結(jié)構(gòu),Intel微處理器只提供了兩種使TLB無效的技術(shù),也就是說Linux內(nèi)核提供的那么多的函數(shù)最后無非就是通過利用以下兩種機制兩種機制來實現(xiàn): 1. 在向CR3寄存器寫入值時CPU自動刷新相對于非全局 頁的TLB表項。 2. Pentium Pro及其以后的CPU中,invlpg匯編語言指 令使映射制定線性地址的單個TLB表項
6、無效。 如果想要刷新全局頁對應(yīng)的TLB表項,則需要通過把CR4的PGE標志位清0,然后再將CR4的PGE標志位置1,既:開啟關(guān)閉再開啟。 內(nèi)核中刷新TLB的函數(shù)最終是調(diào)用這3個宏來實現(xiàn)的:處理TLB _flush_tlb( ) 的實現(xiàn) _flush_tlb_global( ) 的實現(xiàn) _flush_tlb_single( ) 的實現(xiàn) 代碼:include/asm-x86/Tlbflush_64.h include/asm-x86/Tlbflush_32.h懶惰TLB模式 一般來說,任何進程的切換都會暗示著更換活動頁表集,不過內(nèi)核在下列情況將避免避免TLB被刷新:被刷新: 1. 當(dāng)兩個使用相同頁
7、表集的普通進程之間執(zhí)行進程切換時。 2. 當(dāng)在一個普通進程和一個內(nèi)核線程間執(zhí)行進程切換時。內(nèi)核線程并不擁有自己的頁表集,它們使用剛在CPU上執(zhí)行過的普通進程的頁表集。一般來說,它只對內(nèi)核空間的內(nèi)容進行訪問,所以如果用戶空間部分的頁目錄/頁表發(fā)生了變化,沒有必要更新TLB,因為內(nèi)核線程用不到這些內(nèi)容內(nèi)核線程用不到這些內(nèi)容。在多處理機系統(tǒng)(SMP)上,為了避免避免多處理器系統(tǒng)上無用的無用的TLB刷新所造成的時間和刷新所造成的時間和空間資源的浪費空間資源的浪費,內(nèi)核使用一種叫做懶惰懶惰TLB(Lazy TLB)模式)模式的技術(shù)?;舅枷耄喝绻麕讉€CPU正在使用相同的頁表,而且必須對這些CPU上的一個
8、TLB表項刷新,那么,在某些情況下,正在運行內(nèi)核線程的那些CPU上的刷新就可以延遲。懶惰TLB模式 Linux內(nèi)核怎樣實現(xiàn)懶惰TLB模式的呢? 首先,內(nèi)核有一個由tlb_state結(jié)構(gòu)組成的全局數(shù)組cpu_tlbstate,數(shù)組的大小就是CPU的個數(shù),數(shù)組中的每個tlb_state結(jié)構(gòu)包含兩個信息:一個是對應(yīng)該CPU對應(yīng)的正在執(zhí)行或者是最近執(zhí)行的進程task_struct中的mm_struct字段;另一個是state,表明CPU是否處于懶惰TLB模式。懶惰TLB模式 Linux內(nèi)核怎樣實現(xiàn)懶惰TLB模式的呢? 每個進程的mm_struct結(jié)構(gòu)有一個字段叫做cpu_vm_mask,這其實是一個位
9、圖結(jié)構(gòu),每一位對應(yīng)一個CPU,如果CPU的正在使用或者進入內(nèi)核態(tài)之前使用的是該進程的mm_struct結(jié)構(gòu)的話,則該mm_struct的cpu_vm_mask字段對應(yīng)的CPU的位就會置1。懶惰TLB模式 Linux內(nèi)核怎樣實現(xiàn)懶惰TLB模式的呢? 當(dāng)一個CPU開始執(zhí)行內(nèi)核線程時,內(nèi)核把該CPU的cpu_tlbstate元素的state字段設(shè)置為TLBSTATE_LAZY;并且,此時活動的mm_struct描述符的cpu_vm_mask字段存放著所有使用這個mm_struct結(jié)構(gòu)的CPU的下標(包括處于懶惰TLB模式的CPU)。 當(dāng)某個CPU執(zhí)行該mm_struct結(jié)構(gòu)對應(yīng)進程改變了頁映射關(guān)系時,它就會發(fā)送一個處理器間中斷給所有cpu_vm_mask下標為1的CPU,以便通知它們更新自己的TLB,這些CPU通過smp_invalidate_interrupt()來響應(yīng)該中斷。懶惰TLB模式如果設(shè)置了TLBSTATE_OK,就刷新,若設(shè)置了TLBSTATE_LAZY,就忽略中斷請求,不刷新TLB;如果中斷請求所要刷新TLB對應(yīng)的mm_struct與該CPU活躍的mm_struct一樣的話,進行下一步操作;如果中斷請求所要刷新的TLB對應(yīng)的mm_struct與該CPU活躍的mm_struct不一樣的話,就完全沒有必要來刷新TLB;小結(jié)-處理硬件高速緩存和TLB Why? What
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)級智能零售解決方案協(xié)議
- 鋼鐵制品生產(chǎn)加工投資協(xié)議
- 傲慢與偏見節(jié)選英文閱讀與理解教學(xué)教案
- 人工智能人才培訓(xùn)合作協(xié)議
- 車間場地租賃合同
- 高中生英語閱讀理解征文
- 農(nóng)業(yè)項目管理方案
- 保密信息及非競爭協(xié)議條款
- 智能機器人研發(fā)與生產(chǎn)計劃書
- 童年小說人物解析作文
- 考前沖刺攻略課件
- 2024年中煤電力有限公司所屬企業(yè)招聘29人筆試參考題庫附帶答案詳解
- 2024年12月2025中央統(tǒng)戰(zhàn)部直屬事業(yè)單位應(yīng)屆高校畢業(yè)生公開招聘21人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 積極心理學(xué)視角下高職院校學(xué)生心理健康教育路徑研究
- 2024年湖北省煙草專賣局(公司)招聘筆試真題
- 2025中鐵快運股份限公司招聘全日制普通高校畢業(yè)生35人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年浙江寧波寧興集團有限公司招聘筆試參考題庫含答案解析
- 計算機網(wǎng)絡(luò)試題及答案
- 2025年安徽馬鞍山市兩山綠色生態(tài)環(huán)境建設(shè)有限公司招聘筆試參考題庫附帶答案詳解
- 人效管理措施
- 四年級下冊勞動《小小快遞站》課件
評論
0/150
提交評論