




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、處理硬件高速緩存和TLB白皮書 P79-83 紅皮書 P228-230 徐波Why?RAM和和CPU速度不一樣,減少速度不一樣,減少CPU的等待時(shí)間的等待時(shí)間RAM相對(duì)于硬盤來(lái)說(shuō),已經(jīng)相當(dāng)?shù)目炝?。但和CPU相比,性能還是不夠。當(dāng)今的CPU時(shí)鐘頻率接近幾個(gè)GHz,而動(dòng)態(tài)RAM芯片的存取時(shí)間是時(shí)鐘周期的數(shù)百倍,這就意味著從RAM中取操作數(shù)或向RAM存放結(jié)果這樣的指令執(zhí)行時(shí),CPU可能需要等待過(guò)長(zhǎng)的時(shí)間。為了縮小CPU和RAM之間的速度不匹配,引入了硬件高速緩存(hardware cache memory)。硬件高速緩存基于局部性原理(locality principle)。該原理既適用程序結(jié)構(gòu)也適
2、用數(shù)據(jù)結(jié)構(gòu)。因此,引入小而快的內(nèi)存來(lái)存放最近最常用的代碼和數(shù)據(jù)變得很有意義。What?硬件高速緩存(hardware cache memory) 內(nèi)核將高速緩存視為通過(guò)虛擬地址快速訪問(wèn)數(shù)據(jù)的一種機(jī)制,TLB-轉(zhuǎn)換后援緩沖器(translation lookaside buffer) TLB的語(yǔ)義抽象是將虛擬地址轉(zhuǎn)換為物理地址的一種機(jī)制。(紅) TLB是一個(gè)內(nèi)存管理單元用于改進(jìn)虛擬地址到物理地址轉(zhuǎn)換速度的緩存。(網(wǎng))處理硬件高速緩存 硬件高速緩存是通過(guò)高速緩存行(cache line)尋址的。 L1_CACHE_BYTES宏產(chǎn)生以字節(jié)為單位的高速緩存的大小。 在早于Pentium 4 的inte
3、l模型中,這個(gè)宏產(chǎn)生的值為32;在Pentium 4以上則為128.處理硬件高速緩存 為了使高速緩存命中率達(dá)到最優(yōu)化,內(nèi)核一般考慮以下的幾點(diǎn): 1. 常用字段對(duì)齊:常用字段對(duì)齊:一個(gè)數(shù)據(jù)結(jié)構(gòu)中最常使用的字段盡可能的對(duì)齊的放在一起,從而使它們能夠緩沖到同一個(gè)cache line中。 2. 連續(xù)分配內(nèi)存:連續(xù)分配內(nèi)存:為一大組數(shù)據(jù)結(jié)構(gòu)分配空間時(shí),內(nèi)核試圖把這些數(shù)據(jù)結(jié)構(gòu)盡可能的存放在地址連續(xù)內(nèi)存里,使得它們能夠盡可能的被同一個(gè)cache line緩沖。 3. 使用高速緩存友好性的代碼友好性的代碼。審慎地混合使用普通函數(shù)、內(nèi)聯(lián)定義、宏。(紅皮書)處理硬件高速緩存 80X86微處理器自動(dòng)高速緩存的同步刷
4、新,所以用于這種處理器的linux內(nèi)核并不處理任何硬件高速緩存的刷新 但是內(nèi)核卻為不能同步高速緩存的處理器提供了高速緩存刷新接口對(duì)于X86微處理器體系結(jié)構(gòu)而言,Intel已經(jīng)為裝入高速緩存的數(shù)據(jù)提供了一種自動(dòng)與內(nèi)存保持一致性的機(jī)制(窺探 cache snooping),因此內(nèi)核對(duì)此就無(wú)需關(guān)心,所以對(duì)于Cache刷新的一些內(nèi)核接口的實(shí)現(xiàn)基本上都是空的,比如以下的幾個(gè)函數(shù):空操作 dowhile(0) 內(nèi)核代碼include/asm-x86/cacheflush.h處理TLB 處理器不能自動(dòng)同步它們自己的處理器不能自動(dòng)同步它們自己的TLB,因?yàn)橐驗(yàn)闆Q定決定線性地址和物理線性地址和物理地址之間映射何
5、時(shí)不再有效的是地址之間映射何時(shí)不再有效的是內(nèi)核,而內(nèi)核,而不是硬件不是硬件。 比如,從當(dāng)前進(jìn)程切換到另外的一個(gè)進(jìn)程,每個(gè)進(jìn)程都有自己的頁(yè)目錄頁(yè)表結(jié)構(gòu),都有著不同的從線性地址到物理地址的映射方案,所以,當(dāng)進(jìn)程切換的時(shí)候,原來(lái)TLB中的內(nèi)容就應(yīng)該失效。處理TLB 對(duì)于X86結(jié)構(gòu),Intel微處理器只提供了兩種使TLB無(wú)效的技術(shù),也就是說(shuō)Linux內(nèi)核提供的那么多的函數(shù)最后無(wú)非就是通過(guò)利用以下兩種機(jī)制兩種機(jī)制來(lái)實(shí)現(xiàn): 1. 在向CR3寄存器寫入值時(shí)CPU自動(dòng)刷新相對(duì)于非全局 頁(yè)的TLB表項(xiàng)。 2. Pentium Pro及其以后的CPU中,invlpg匯編語(yǔ)言指 令使映射制定線性地址的單個(gè)TLB表項(xiàng)
6、無(wú)效。 如果想要刷新全局頁(yè)對(duì)應(yīng)的TLB表項(xiàng),則需要通過(guò)把CR4的PGE標(biāo)志位清0,然后再將CR4的PGE標(biāo)志位置1,既:開啟關(guān)閉再開啟。 內(nèi)核中刷新TLB的函數(shù)最終是調(diào)用這3個(gè)宏來(lái)實(shí)現(xiàn)的:處理TLB _flush_tlb( ) 的實(shí)現(xiàn) _flush_tlb_global( ) 的實(shí)現(xiàn) _flush_tlb_single( ) 的實(shí)現(xiàn) 代碼:include/asm-x86/Tlbflush_64.h include/asm-x86/Tlbflush_32.h懶惰TLB模式 一般來(lái)說(shuō),任何進(jìn)程的切換都會(huì)暗示著更換活動(dòng)頁(yè)表集,不過(guò)內(nèi)核在下列情況將避免避免TLB被刷新:被刷新: 1. 當(dāng)兩個(gè)使用相同頁(yè)
7、表集的普通進(jìn)程之間執(zhí)行進(jìn)程切換時(shí)。 2. 當(dāng)在一個(gè)普通進(jìn)程和一個(gè)內(nèi)核線程間執(zhí)行進(jìn)程切換時(shí)。內(nèi)核線程并不擁有自己的頁(yè)表集,它們使用剛在CPU上執(zhí)行過(guò)的普通進(jìn)程的頁(yè)表集。一般來(lái)說(shuō),它只對(duì)內(nèi)核空間的內(nèi)容進(jìn)行訪問(wèn),所以如果用戶空間部分的頁(yè)目錄/頁(yè)表發(fā)生了變化,沒(méi)有必要更新TLB,因?yàn)閮?nèi)核線程用不到這些內(nèi)容內(nèi)核線程用不到這些內(nèi)容。在多處理機(jī)系統(tǒng)(SMP)上,為了避免避免多處理器系統(tǒng)上無(wú)用的無(wú)用的TLB刷新所造成的時(shí)間和刷新所造成的時(shí)間和空間資源的浪費(fèi)空間資源的浪費(fèi),內(nèi)核使用一種叫做懶惰懶惰TLB(Lazy TLB)模式)模式的技術(shù)?;舅枷耄喝绻麕讉€(gè)CPU正在使用相同的頁(yè)表,而且必須對(duì)這些CPU上的一個(gè)
8、TLB表項(xiàng)刷新,那么,在某些情況下,正在運(yùn)行內(nèi)核線程的那些CPU上的刷新就可以延遲。懶惰TLB模式 Linux內(nèi)核怎樣實(shí)現(xiàn)懶惰TLB模式的呢? 首先,內(nèi)核有一個(gè)由tlb_state結(jié)構(gòu)組成的全局?jǐn)?shù)組cpu_tlbstate,數(shù)組的大小就是CPU的個(gè)數(shù),數(shù)組中的每個(gè)tlb_state結(jié)構(gòu)包含兩個(gè)信息:一個(gè)是對(duì)應(yīng)該CPU對(duì)應(yīng)的正在執(zhí)行或者是最近執(zhí)行的進(jìn)程task_struct中的mm_struct字段;另一個(gè)是state,表明CPU是否處于懶惰TLB模式。懶惰TLB模式 Linux內(nèi)核怎樣實(shí)現(xiàn)懶惰TLB模式的呢? 每個(gè)進(jìn)程的mm_struct結(jié)構(gòu)有一個(gè)字段叫做cpu_vm_mask,這其實(shí)是一個(gè)位
9、圖結(jié)構(gòu),每一位對(duì)應(yīng)一個(gè)CPU,如果CPU的正在使用或者進(jìn)入內(nèi)核態(tài)之前使用的是該進(jìn)程的mm_struct結(jié)構(gòu)的話,則該mm_struct的cpu_vm_mask字段對(duì)應(yīng)的CPU的位就會(huì)置1。懶惰TLB模式 Linux內(nèi)核怎樣實(shí)現(xiàn)懶惰TLB模式的呢? 當(dāng)一個(gè)CPU開始執(zhí)行內(nèi)核線程時(shí),內(nèi)核把該CPU的cpu_tlbstate元素的state字段設(shè)置為TLBSTATE_LAZY;并且,此時(shí)活動(dòng)的mm_struct描述符的cpu_vm_mask字段存放著所有使用這個(gè)mm_struct結(jié)構(gòu)的CPU的下標(biāo)(包括處于懶惰TLB模式的CPU)。 當(dāng)某個(gè)CPU執(zhí)行該mm_struct結(jié)構(gòu)對(duì)應(yīng)進(jìn)程改變了頁(yè)映射關(guān)系時(shí),它就會(huì)發(fā)送一個(gè)處理器間中斷給所有cpu_vm_mask下標(biāo)為1的CPU,以便通知它們更新自己的TLB,這些CPU通過(guò)smp_invalidate_interrupt()來(lái)響應(yīng)該中斷。懶惰TLB模式如果設(shè)置了TLBSTATE_OK,就刷新,若設(shè)置了TLBSTATE_LAZY,就忽略中斷請(qǐng)求,不刷新TLB;如果中斷請(qǐng)求所要刷新TLB對(duì)應(yīng)的mm_struct與該CPU活躍的mm_struct一樣的話,進(jìn)行下一步操作;如果中斷請(qǐng)求所要刷新的TLB對(duì)應(yīng)的mm_struct與該CPU活躍的mm_struct不一樣的話,就完全沒(méi)有必要來(lái)刷新TLB;小結(jié)-處理硬件高速緩存和TLB Why? What
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司籃球隊(duì)日常管理制度
- 公司維修施工部管理制度
- 公司職工花名冊(cè)管理制度
- 公司自駕車出差管理制度
- 公司行政與財(cái)務(wù)管理制度
- 公司計(jì)算機(jī)日常管理制度
- 公司質(zhì)檢員歸誰(shuí)管理制度
- 養(yǎng)生食療公司組織管理制度
- 出租車公司酒駕管理制度
- 分公司應(yīng)收賬款管理制度
- 2025年佛山市南海區(qū)民政局招聘殘疾人專項(xiàng)工作人員題庫(kù)帶答案分析
- 2025年涼山昭覺(jué)縣委社會(huì)工作部選聘社區(qū)工作者題庫(kù)帶答案分析
- 2024北京高考一分一段表
- 出租房合同責(zé)任免除協(xié)議書
- 中國(guó)科技課件
- 2025年希臘語(yǔ)A2等級(jí)考試官方試卷
- 地理-2025年中考終極押題猜想(全國(guó)卷)
- 2024年廣東省新會(huì)市事業(yè)單位公開招聘輔警考試題帶答案分析
- 廣安2025年上半年廣安市岳池縣“小平故里英才”引進(jìn)急需緊缺專業(yè)人才筆試歷年參考題庫(kù)附帶答案詳解
- 派特靈用于女性下生殖道人乳頭瘤病毒感染及相關(guān)疾病專家共識(shí)(2025年版)解讀
- 數(shù)字化轉(zhuǎn)型背景下制造業(yè)產(chǎn)業(yè)鏈協(xié)同創(chuàng)新機(jī)制研究
評(píng)論
0/150
提交評(píng)論