1. 程式人生 > >TLB與cache的深入分析

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.

相關推薦

TLBcache深入分析

一)TLB1)TLB的概述TLB是一個記憶體管理單元用於改進虛擬地址到實體地址轉換速度的快取.TLB是位於記憶體中的頁表的cache,如果沒有TLB,則每次取資料都需要兩次訪問記憶體,即查頁表獲得實體地址和取資料.2)tlb的原理當cpu對資料進行讀請求時,CPU根據虛擬地址(前20位)到TLB中查詢.TLB

TLBcache深入分析(May, 14)

一)TLB 1)TLB的概述 TLB是一個記憶體管理單元用於改進虛擬地址到實體地址轉換速度的快取. TLB是位於記憶體中的頁表的cache,如果沒有TLB,則每次取資料都需要兩次訪問記憶體,即查頁表獲得實體地址和取資料. 2)tlb的原理 當cpu

Java多執行緒(六)之DequeLinkedBlockingDeque深入分析

1、LinkedBlockingDeque資料結構 雙向併發阻塞佇列。所謂雙向是指可以從佇列的頭和尾同時操作,併發只是執行緒安全的實現,阻塞允許在入隊出隊不滿足條件時掛起執行緒,這裡說的佇列是指支援FIFO/FILO實現的連結串列。 首先看下LinkedBlockingDeque的資料結構。通常情況

OpenStack neutron floatingips iptables 深入分析

1. 簡介neutron-l3-agent OpenStack neutron-l3-agent 主要負責實現網路三層協議,為虛擬機器完成SNAT,DNAT等地址的轉換與偽裝,提供安全彈性隔離的雲網絡環境, 下面詳細敘述了OpenStack如何使用iptables鏈與規則完

深入分析JavaWeb Item47 -- Struts2攔截器文件上傳下載

com custom public 面向切面 lang down pri 多功能 art 一、struts2中的攔截器(框架功能核心) 1、過濾器VS攔截器 過濾器VS攔截器功能是一回事。過濾器是Servlet規範中的技術,能夠對請求和響應進行過濾。

[數據庫事務鎖]詳解三: 深入分析事務的隔離級別

不可 ans 提高 重要 不能 標準 insert lec 使用 註明: 本文轉載自http://www.hollischuang.com/archives/943 本文詳細介紹四種事務隔離級別,並通過舉例的方式說明不同的級別能解決什麽樣的讀現象。並且介紹了在關系型數據

Guava Cache 實現源碼分析

def ews obj load existing ray cat 核心 poll() 目錄 Guava Cache 一、概述 1、內存緩存 2、核心數據結構 二、具體實現 0、一覽眾山小 1、CacheBuilder 構建器 2、LocalCache Guava

深入分析JavaWeb Item6 — servletConfig servletContext詳

顯示 www 程序 存在 文件夾 stream url mat 文件太大 一、ServletConfig講解首先看ServletConfig API文檔 1.1、配置Servlet初始化參數在Servlet的配置文件web.xml中,可以使用一個或多個<init-pa

深入分析JavaWeb技術內幕》之 12-Spring架構設計模式

    core context bean(bean工廠,bean定義,bean解析)   bean(bean工廠,bean定義,bean解析)     

深入分析JavaWeb技術內幕》之 11-Tomcat系統架構設計模式

1、 分發請求 2 、同時請求 3、 多級容器 4、 設計模式 Tomcat的組織結構 https://www.cnblogs.com/zhouyuqin/p/5143121.html   Tomcat Server處理一個HTTP請求的

深入分析JavaWeb技術內幕》之 10-SessionCookie

session與cookie     通過 返回的JsessionID 建立 session物件 查詢已經存在的session如果沒有就新建 session   standard manager管理session生命

深入分析JavaWeb技術內幕》之 15-iBatis系統架構對映原理

關鍵詞: 對映、 反射                              &

深入分析JavaWeb技術內幕》之 14-SpringMVC工作機制設計模式

 dispacherservlet初始化邏輯   handlerMapping            &nbs

數據結構算法分析-AVL樹深入探討

vhd tran ons c-s 算法 amp cal pascal oot .title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medi

Linux IO 監控深入分析

4.6 .cn 計時 說明 扇區 版本 play linux patch https://jaminzhang.github.io/os/Linux-IO-Monitoring-and-Deep-Analysis/ Linux IO 監控與深入分析 引言 接昨天電話面試

Netty深入分析Dubbo實戰解析(一)——網路程式設計模型介紹

Linux網路程式設計模型介紹 Linux核心將所有外部裝置都看作一個檔案來操作,對一個檔案的讀寫操作會呼叫核心提供的系統命令,返回一個file descriptor(fd,檔案描述符)。而對一個socket的讀寫也會有相應的描述符。描述符就是一個數字,它指向核心中的一個結構體(檔案路徑

深入分析JavaWeb Item6 — servletConfig servletContext詳解

一、ServletConfig講解 首先看ServletConfig API文件 1.1、配置Servlet初始化引數 在Servlet的配置檔案web.xml中,可以使用一個或多個標籤為servlet配置一些初始化引數。 例如: ServletCon

十四 第三章再續 快速選擇SELECT演算法的深入分析實現

                                          十四、亦第三章再續:快速選擇SELECT演算法的深入分析與實現前言    經典演算法研究系列已經寫了十三個演算法,共計22篇文章(詳情,見這:十三個經典演算法研究與總結、目錄+索引),我很怕我自己不再把這個算法系列給繼續寫下去

redis cluster叢集搭建深入分析(1)

對於之前所講的master+slave進行讀寫分離同時通過sentinel叢集保障高可用的架構,對於一般的資料量系統已經足夠。但是對於資料量龐大的T級別的資料,單master可能就無法滿足橫向擴充套件的場景。所以redis cluster支援多master

深入理解Spark-核心思想源碼分析》(二)第二章Spark設計理念和基本架構

基礎知識 cut info 負責 驅動 源碼分析 spa spark 節點 若夫乘天地之正,而禦六氣之辯解,以遊無窮者,彼且惡乎待哉?