TLB工作原理

2021-07-15 18:06:42 字數 2331 閱讀 6697

原文出處:

tlb - translation lookaside buffer

快表,直譯為旁路快表緩衝,也可以理解為頁表緩衝,位址變換快取記憶體。

由於頁表存放在主存中,因此程式每次訪存至少需要兩次:一次訪存獲取實體地址,第二次訪存才獲得資料。提高訪存效能的關鍵在於依靠頁表的訪問區域性性。當乙個轉換的虛擬頁號被使用時,它可能在不久的將來再次被使用到,。

tlb是一種快取記憶體,記憶體管理硬體使用它來改善虛擬位址到實體地址的轉換速度。當前所有的個人桌面,筆記本和伺服器處理器都使用tlb來進行虛擬位址到實體地址的對映。使用tlb核心可以快速的找到虛擬位址指向實體地址,而不需要請求ram記憶體獲取虛擬位址到實體地址的對映關係。這與data cache和instruction caches有很大的相似之處。

tlb原理

想像一下x86_32架構下沒有tlb的存在時的情況,對線性位址的訪問,首先從pgd中獲取pte(第一次記憶體訪問),在pte中獲取頁框位址(第二次記憶體訪問),最後訪問實體地址,總共需要3次ram的訪問。如果有tlb存在,並且tlb hit,那麼只需要一次ram訪問即可。

tlb表項

tlb內部存放的基本單位是頁表條目,對應著ram中存放的頁表條目。頁表條目的大小固定不變的,所以tlb容量越大,所能存放的頁表條目越多,tlb hit的機率也越大。但是tlb容量畢竟是有限的,因此ram頁表和tlb頁表條目無法做到一一對應。因此cpu收到乙個線性位址,那麼必須快速做兩個判斷:

1 所需的也表示否已經快取在tlb內部(tlb miss或者tlb hit)

2 所需的頁表在tlb的哪個條目內

為了儘量減少cpu做出這些判斷所需的時間,那麼就必須在tlb頁表條目和記憶體頁表條目之間的對應方式做足功夫

全相連 - full associative

在這種組織方式下,tlb cache中的表項和線性位址之間沒有任何關係,也就是說,乙個tlb表項可以和任意線性位址的頁表項關聯。這種關聯方式使得tlb表項空間的利用率最大。但是延遲也可能相當的大,因為每次cpu請求,tlb硬體都把線性位址和tlb的表項逐一比較,直到tlb hit或者所有tlb表項比較完成。特別是隨著cpu快取越來越大,需要比較大量的tlb表項,所以這種組織方式只適合小容量tlb

直接匹配

每乙個線性位址塊都可通過模運算對應到唯一的tlb表項,這樣只需進行一次比較,降低了tlb內比較的延遲。但是這個方式產生衝突的機率非常高,導致tlb miss的發生,降低了命中率。

比如,我們假定tlb cache共包含16個表項,cpu順序訪問以下線性位址塊:1, 17 , 1, 33。當cpu訪問位址塊1時,1 mod 16 = 1,tlb檢視它的第乙個頁表項是否包含指定的線性位址塊1,包含則命中,否則從ram裝入;然後cpu方位位址塊17,17 mod 16 = 1,tlb發現它的第乙個頁表項對應的不是線性位址塊17,tlb miss發生,tlb訪問ram把位址塊17的頁表項裝入tlb;cpu接下來訪問位址塊1,此時又發生了miss,tlb只好訪問ram重新裝入位址塊1對應的頁表項。因此在某些特定訪問模式下,直接匹配的效能差到了極點

組相連 - set-associative

為了解決全相連內部比較效率低和直接匹配的衝突,引入了組相連。這種方式把所有的tlb表項分成多個組,每個線性位址塊對應的不再是乙個tlb表項,而是乙個tlb表項組。cpu做位址轉換時,首先計算線性位址塊對應哪個tlb表項組,然後在這個tlb表項組順序比對。按照組長度,我們可以稱之為2路,4路,8路。

經過長期的工程實踐,發現8路組相連是乙個效能分界點。8路組相連的命中率幾乎和全相連命中率幾乎一樣,超過8路,組內對比延遲帶來的缺點就超過命中率提高帶來的好處了。

這三種方式各有優缺點,組相連是個折衷的選擇,適合大部分應用環境。當然針對不同的領域,也可以採用其他的cache組織形式。

tlb表項更新

tlb表項更新可以有tlb硬體自動發起,也可以有軟體主動更新

1. tlb miss發生後,cpu從ram獲取頁表項,會自動更新tlb表項

2. tlb中的表項在某些情況下是無效的,比如程序切換,更改核心頁表等,此時cpu硬體不知道哪些tlb表項是無效的,只能由軟體在這些場景下,重新整理tlb。

在linux kernel軟體層,提供了豐富的tlb表項重新整理方法,但是不同的體系結構提供的硬體介面不同。比如x86_32僅提供了兩種硬體介面來重新整理tlb表項:

1. 向cr3暫存器寫入值時,會導致處理器自動重新整理非全域性頁的tlb表項

2. 在pentium pro以後,invlpg彙編指令用來無效指定線性位址的單個tlb表項無效。

TLB工作原理

原文出處 tlb translation lookaside buffer 快表,直譯為旁路快表緩衝,也可以理解為頁表緩衝,位址變換快取記憶體。由於頁表存放在主存中,因此程式每次訪存至少需要兩次 一次訪存獲取實體地址,第二次訪存才獲得資料。提高訪存效能的關鍵在於依靠頁表的訪問區域性性。當乙個轉換的虛...

TLB工作原理

快表,直譯為旁路快表緩衝,也可以理解為頁表緩衝,位址變換快取記憶體。由於頁表存放在主存中,因此程式每次訪存至少需要兩次 一次訪存獲取實體地址,第二次訪存才獲得資料。提高訪存效能的關鍵在於依靠頁表的訪問區域性性。當乙個轉換的虛擬頁號被使用時,它可能在不久的將來再次被使用到,tlb是一種快取記憶體,記憶...

簡述hdfs工作原理 HDFS的工作原理

hdfs 的工作原理 hadoop 分布式檔案系統 hdfs 是一種被設計成適合執行在通用硬體上的分布式檔案系統。hdfs 是乙個高度容錯性的系統,適合部署在廉價的 機器上。它能提供高吞吐量的資料訪問,非常適合大規模資料集上的應用。要理解 hdfs 的內部工作原理,首先要理解什麼是分布式 檔案系統。...