TLB和cache的关系
一)TLB
1)TLB的概述
TLB是一個內存管理單元用于改進虛擬地址到物理地址轉換速度的緩存.
TLB是位于內存中的頁表的cache,如果沒有TLB,則每次取數(shù)據(jù)都需要兩次訪問內存,即查頁表獲得物理地址和取數(shù)據(jù).
分頁與頁表
概念性內容不再闡述。直接給出解釋。
MMU為內存管理單元,其作為硬件用于將虛擬地址映射為物理地址。上圖右邊部分,箭頭所述部分內容即采用MMU完成地址映射。
虛擬地址通過多級頁表映射后對應末級頁表項,末級頁表項中存放的是物理地址頁框號。即一個虛擬地址,通過MMU找到對應的物理頁框號,通過虛擬地址后12位作為頁內偏移,索引到具體物理地址上的內容。
頁表項的結構:
長度為32位,其中最后20位為頁框號內容,“在/不在“位表示當前頁表項對應的物理頁框是位于內存中還是位于物理磁盤上,“保護”位指定當前頁面是否可讀、寫、執(zhí)行,“修改”位指明當前物理頁面是否是一個臟頁,即是否已經(jīng)被寫入到磁盤上。
2)tlb的原理
當cpu對數(shù)據(jù)進行讀請求時,CPU根據(jù)虛擬地址(前20位)到TLB中查找.
TLB中保存著虛擬地址(前20位)和頁框號的對映關系,如果匹配到虛擬地址就可以迅速找到頁框號(頁框號可以理解為頁表項),通過頁框號與虛擬地址后12位的偏移組合得到最終的物理地址.
如果沒在TLB中匹配到虛擬地址,就出現(xiàn)TLB丟失,需要到頁表中查詢頁表項,如果不在頁表中,說明要讀取的內容不在內存,需要到磁盤讀取.
TLB是MMU中的一塊高速緩存,也是一種Cache.
在分頁機制中,TLB中的數(shù)據(jù)和頁表的數(shù)據(jù)關聯(lián),不是由處理器維護,而是由OS來維護,TLB的刷新是通過裝入處理器中的CR3寄存器來完成.
如果MMU發(fā)現(xiàn)在TLB中沒有命中,它在常規(guī)的頁表查找后,用找到的頁表項替換TLB中的一個條目.
3)tlb的刷新原則
當進程進行上下文切換時重新設置cr3寄存器,并且刷新tlb.
有兩種情況可以避免刷tlb.
?第一種情況是使用相同頁表的進程切換.
?第二種情況是普通進程切換到內核線程.
lazy-tlb(懶惰模式)的技術是為了避免進程切換導致tlb被刷新.
當普通進程切換到內核線程時,系統(tǒng)進入lazy-tlb模式,切到普通進程時退出該模式.
?
?
二)cache?
1)cache的概念:
cache是為了解決處理器與慢速DRAM(慢速DRAM即內存)設備之間巨大的速度差異而出現(xiàn)的.
cache屬于硬件系統(tǒng),linux不能管理cache.但會提供flush整個cache的接口.
cache分為一級cache,二級cache,三級cache等等.一級cache與cpu處于同一個指令周期.
例如:查看當前系統(tǒng)的cache.
dmidecode -t cache
# dmidecode 2.9
SMBIOS 2.6 present.
Handle 0x0700, DMI type 7, 19 bytes
Cache Information
????????Socket Designation: Not Specified
????????Configuration: Enabled, Not Socketed, Level 1
????????Operational Mode: Write Back
????????Location: Internal
????????Installed Size: 128 KB
????????Maximum Size: 128 KB
????????Supported SRAM Types:
????????????????Unknown
????????Installed SRAM Type: Unknown
????????Speed: Unknown
????????Error Correction Type: Single-bit ECC
????????System Type: Data
????????Associativity: 8-way Set-associative
Handle 0x0701, DMI type 7, 19 bytes
Cache Information
????????Socket Designation: Not Specified
????????Configuration: Enabled, Not Socketed, Level 2
????????Operational Mode: Write Back
????????Location: Internal
????????Installed Size: 1024 KB
????????Maximum Size: 2048 KB
????????Supported SRAM Types:
????????????????Unknown
????????Installed SRAM Type: Unknown
????????Speed: Unknown
????????Error Correction Type: Single-bit ECC
????????System Type: Unified
????????Associativity: 8-way Set-associative
Handle 0x0702, DMI type 7, 19 bytes
Cache Information
????????Socket Designation: Not Specified
????????Configuration: Enabled, Not Socketed, Level 3
????????Operational Mode: Write Back
????????Location: Internal
????????Installed Size: 4096 KB
????????Maximum Size: 4096 KB
????????Supported SRAM Types:
????????????????Unknown
????????Installed SRAM Type: Unknown
????????Speed: Unknown
????????Error Correction Type: Single-bit ECC
????????System Type: Unified
????????Associativity: 16-way Set-associative
分別是:
1級cache:128KB
2級cache:1024KB
3級cache:4096KB
2)Cache的存取單位(Cache Line)
CPU從來不從DRAM直接讀/寫字節(jié)或字,從CPU到DRAM的每次讀或寫的第一步都要經(jīng)過L1 cache,每次以整數(shù)行讀或寫到DRAM中.
Cache Line是cache與DRAM同步的最小單位.
典型的虛擬內存頁面大小為4KB,而典型的Cache line通常的大小為32或64字節(jié).
CPU 讀/寫內存都要通過Cache,如果數(shù)據(jù)不在Cache中,需要把數(shù)據(jù)以Cache Line為單位去填充到Cache,即使是讀/寫一個字節(jié).
CPU 不存在直接讀/寫內存的情況,每次讀/寫內存都要經(jīng)過Cache.
3)Cache的工作模式
數(shù)據(jù)回寫(write-back):這是最高性能的模式,也是最典型的,在回寫模式下,cache內容更改不需要每次都寫回內存,直到一個新的 cache要刷新或軟件要求刷新時,才寫回內存.
寫通過(write-through):這種模式比回寫模式效率低,因為它每次強制將內容寫回內存,以額外地保存cache的結果,在這種模式寫耗時,而讀和回寫模一樣快,這都為了內存與cache相一致而付出的代價.
預取 (prefectching):一些cache允許處理器對cache line進行預取,以響應讀請求,這樣被讀取的相鄰內容也同時被讀出來,如果讀是隨機的,將會使CPU變慢,預取一般與軟件進行配合以達到最高性能.
注:
大部分的cache允許軟件在某個區(qū)域設置模式,一個區(qū)域可能是回寫,另一個可能是預取.用戶一般不能改變cache的模式, 這些通常由設備驅動程序來控制.
預取通常由軟件通過所謂的cache隱函數(shù)madvise進行控制.
例如:查看當前系統(tǒng)的cache在哪種模式下工作
dmidecode -t cache
# dmidecode 2.9
SMBIOS 2.6 present.
Handle 0x0700, DMI type 7, 19 bytes
Cache Information
????????Socket Designation: Not Specified
????????Configuration: Enabled, Not Socketed, Level 1
????????Operational Mode: Write Back
????????Location: Internal
????????Installed Size: 128 KB
????????Maximum Size: 128 KB
????????Supported SRAM Types:
????????????????Unknown
????????Installed SRAM Type: Unknown
????????Speed: Unknown
????????Error Correction Type: Single-bit ECC
????????System Type: Data
????????Associativity: 8-way Set-associative
Handle 0x0701, DMI type 7, 19 bytes
Cache Information
????????Socket Designation: Not Specified
????????Configuration: Enabled, Not Socketed, Level 2
????????Operational Mode: Write Back
????????Location: Internal
????????Installed Size: 1024 KB
????????Maximum Size: 2048 KB
????????Supported SRAM Types:
????????????????Unknown
????????Installed SRAM Type: Unknown
????????Speed: Unknown
????????Error Correction Type: Single-bit ECC
????????System Type: Unified
????????Associativity: 8-way Set-associative
Handle 0x0702, DMI type 7, 19 bytes
Cache Information
????????Socket Designation: Not Specified
????????Configuration: Enabled, Not Socketed, Level 3
????????Operational Mode: Write Back
????????Location: Internal
????????Installed Size: 4096 KB
????????Maximum Size: 4096 KB
????????Supported SRAM Types:
????????????????Unknown
????????Installed SRAM Type: Unknown
????????Speed: Unknown
????????Error Correction Type: Single-bit ECC
????????System Type: Unified
????????Associativity: 16-way Set-associative
????????
結果表明都是回寫,如下:
Operational Mode: Write Back
?
三)內存一致性
write back會涉及內存一致性,涉有到一系列的問題:
1)多處理要系統(tǒng)更新cache時,一個處理器修改了cache的內容,第二個處理器將不能訪問這個cache,直到這個cache的內容被寫內存.
在現(xiàn)代處理器中硬件已經(jīng)做了精心的設計,確保這種事情不會發(fā)生,硬件負責保持cache在各個CPU之間一致.
2)外圍硬件設備可以通過DMA(Direct Memory Access)訪問內存,而不讓處理器知道,也不會利用cache,這樣在內存和cache之間就會出現(xiàn)不同步的情況.
管理DMA的操作是操作系統(tǒng)的工作,比如設備驅動程序,它將保證內存與cache的一致性.
3)當在cache中的數(shù)據(jù)比內存中的數(shù)據(jù)老時,稱為stale.如果軟件初始化DMA,使設備和RAM之間傳遞數(shù)據(jù),那么軟件必須告訴 CPU,cache中的條目必須失效.
4)當在cache中的數(shù)據(jù)比內存中的數(shù)據(jù)新時,稱為dirty.在設備驅動程序允許一個設備經(jīng)DMA從內存讀數(shù)據(jù)時,它必須確保所有的dirty 條目寫進內存.也叫做flushing或sync cache
總結
以上是生活随笔為你收集整理的TLB和cache的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超级计算机紫金,紫金山天文台将用“天河一
- 下一篇: 基于VB图书管理系统的设计与实现