TLB與cache


一)TLB

1)TLB的概述

TLB是一個內存管理單元用於改進虛擬地址到物理地址轉換速度的緩存.

TLB是位於內存中的頁表的cache,如果沒有TLB,則每次取數據都需要兩次訪問內存,即查頁表獲得物理地址和取數據.

2)tlb的原理

當cpu對數據進行讀請求時,CPU根據虛擬地址(前20位)到TLB中查找.
TLB中保存着虛擬地址(前20位)和頁框號的對映關系,如果匹配到虛擬地址就可以迅速找到頁框號,通過頁框號與虛擬地址后12位的偏移組合得到最終的物理地址.
頁框號可以理解為頁表項

如果沒在TLB中匹配到虛擬地址,就出現TLB丟失,需要到頁表中查詢頁表項,如果不在頁表中,說明要讀取的內容不在內存,需要到磁盤讀取.

TLB是MMU中的一塊高速緩存,也是一種Cache.

在分頁機制中,TLB中的數據和頁表的數據關聯,不是由處理器維護,而是由OS來維護,TLB的刷新是通過裝入處理器中的CR3寄存器來完成.

如果MMU發現在TLB中沒有命中,它在常規的頁表查找后,用找到的頁表項替換TLB中的一個條目.

3)tlb的刷新原則

當進程進行上下文切換時重新設置cr3寄存器,並且刷新tlb.

有兩種情況可以避免刷tlb.
 第一種情況是使用相同頁表的進程切換.
 第二種情況是普通進程切換到內核線程.

lazy-tlb(懶惰模式)的技術是為了避免進程切換導致tlb被刷新.
當普通進程切換到內核線程時,系統進入lazy-tlb模式,切到普通進程時退出該模式.

二)cache


1)cache的概念:
cache是為了解決處理器與慢速DRAM設備之間巨大的速度差異而出現的.
cache屬於硬件系統,linux不能管理cache.但會提供flush整個cache的接口.
cache分為一級cache,二級cache,三級cache等等.一級cache與cpu處於同一個指令周期.


例如:查看當前系統的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直接讀/寫字節或字,從CPU到DRAM的每次讀或寫的第一步都要經過L1 cache,每次以整數行讀或寫到DRAM中.
Cache Line是cache與DRAM同步的最小單位.
典型的虛擬內存頁面大小為4KB,而典型的Cache line通常的大小為32或64字節.
CPU讀/寫內存都要通過Cache,如果數據不在Cache中,需要把數據以Cache Line為單位去填充到Cache,即使是讀/寫一個字節.
CPU不存在直接讀/寫內存的情況,每次讀/寫內存都要經過Cache.

3)Cache的工作模式

數據回寫(write-back):這是最高性能的模式,也是最典型的,在回寫模式下,cache內容更改不需要每次都寫回內存,直到一個新的cache要刷新或軟件要求刷新時,才寫回內存.
寫通過(write-through):這種模式比回寫模式效率低,因為它每次強制將內容寫回內存,以額外地保存cache的結果,在這種模式寫耗時,而讀和回寫模一樣快,這都為了內存與cache相一致而付出的代價.
預取(prefectching):一些cache允許處理器對cache line進行預取,以響應讀請求,這樣被讀取的相鄰內容也同時被讀出來,如果讀是隨機的,將會使CPU變慢,預取一般與軟件進行配合以達到最高性能.


注:
大部分的cache允許軟件在某個區域設置模式,一個區域可能是回寫,另一個可能是預取.用戶一般不能改變cache的模式,這些通常由設備驅動程序來控制.
預取通常由軟件通過所謂的cache隱函數madvise進行控制.

例如:查看當前系統的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

三)內存一致性

內存一致性涉有到一系列的問題:

1)多處理要系統更新cache時,一個處理器修改了cache的內容,第二個處理器將不能訪問這個cache,直到這個cache的內容被寫內存.
在現代處理器中硬件已經做了精心的設計,確保這種事情不會發生,硬件負責保持cache在各個CPU之間一致.

2)外圍硬件設備可以通過DMA(Direct Memory Access)訪問內存,而不讓處理器知道,也不會利用cache,這樣在內存和cache之間就會出現不同步的情況.
管理DMA的操作是操作系統的工作,比如設備驅動程序,它將保證內存與cache的一致性.

3)當在cache中的數據比內存中的數據老時,稱為stale.如果軟件初始化DMA,使設備和RAM之間傳遞數據,那么軟件必須告訴CPU,cache中的條目必須失效.

4)當在cache中的數據比內存中的數據新時,稱為dirty.在設備驅動程序允許一個設備經DMA從內存讀數據時,它必須確保所有的dirty條目寫進內存.也叫做flushing或sync cache.

四)總結

① 多處理器之間的cache問題,由硬件負責維護各個CPU之間的cache一致性。

② 外部設備通過DMA訪問內存,cache一致性由操作系統維護(設備驅動程序)。

 

轉:http://blog.chinaunix.net/uid-9012903-id-2011476.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM