轉譯後備緩衝區
![本頁使用了標題或全文手工轉換](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
轉譯後備緩衝區(英語:Translation Lookaside Buffer,首字母縮略字:TLB),在中國大陸被翻譯為頁表快取、轉址旁路快取,為CPU的一種快取,由記憶體管理單元用於改進虛擬位址到實體位址的轉譯速度。目前所有的桌上型及伺服器型處理器(如 x86)皆使用TLB。TLB具有固定數目的空間槽,用於存放將虛擬位址對映至實體位址的分頁表條目。為典型的結合儲存(content-addressable memory,首字母縮略字:CAM)。其搜尋鍵碼為虛擬記憶體位址,其搜尋結果為實體位址。如果請求的虛擬位址在TLB中存在,CAM 將給出一個非常快速的匹配結果,之後就可以使用得到的實體位址存取記憶體。如果請求的虛擬位址不在 TLB 中,就會使用分頁表進行虛實位址轉換,而分頁表的存取速度比TLB慢很多。有些系統允許分頁表被交換到次級記憶體,那麼虛實位址轉換可能要花非常長的時間。
概觀
[編輯]TLB 用於快取一部分分頁表條目。TLB可介於CPU和 CPU快取之間,或在CPU、快取和主記憶體之間,這取決於快取使用的是真實或是虛擬定址。如果快取是虛擬定址,定址請求將會直接從 CPU 傳送給快取,然後從快取訪問所需的 TLB 條目。如果快取使用實體定址,CPU 會先對每一個記憶體操作進行TLB查尋,並且將取得的實體位址傳送給快取。兩種方法各有優缺點。
採用實體定址的快取的一種常見優化,是並列的進行 TLB 查尋和快取的存取。所有虛擬位址的較低位元(例如,在虛擬記憶體系統中具有 4KB 分頁時,虛擬位址中較低的那 12 位元)代表的是所請求的位址在分頁內部的位址偏移量(頁內位址),且這些位元不會在虛擬位址轉換到實體位址的過程中發生改變。訪問CPU快取的過程包含兩步:使用一條索引去尋找CPU快取的資料儲存區中的相應條目,然後比較找到的CPU快取條目的相應標記。如果快取是用虛實位址轉譯過程中不變的頁內位址來索引組織起來的,則可並列地執行TLB上虛實位址的較高位元(即分頁的頁間位址/頁號)的轉換與CPU快取的「索引」操作。然後,從 TLB 獲得的的實體位址的頁號會傳送給CPU快取。CPU快取會對頁號標記進行比較,以決定此次存取是尋中或是缺失。它也有可能並列的進行 TLB 查尋和CPU快取存取,即使CPU快取必須使用某些可能會在位址轉譯後發生改變的位元;參閱快取條目的位址轉譯一節,以取得關於虛擬定址下快取和 TLB 的進一步細節。
TLB 失誤
[編輯]兩種在現代架構中常用的解決 TLB 失誤的方案:
- 硬體式 TLB 管理,CPU 自行遍歷分頁表,檢視是否存在包含指定的虛擬位址的有效分頁表條目。如果存在這樣的分頁表條目,就把此分頁表條目存入 TLB ,並重新執行 TLB 訪問,而此次訪問肯定會尋中,程式可正常執行。如果 CPU 在分頁表中不能找到包含指定的虛擬位址有效條目,就會發生分頁錯誤例外,作業系統必須處理這個例外。處理分頁錯誤通常是把被請求的資料載入實體記憶體中,並在分頁表中建立將出錯的虛擬位址對映到正確的實體位址的相應條目,並重新啟動程式(詳見分頁錯誤)。
- 軟體管理式 TLB,TLB 失誤時會產生「TLB 失誤」例外,且作業系統遍歷分頁表,以軟體方式進行虛實位址轉譯。然後作業系統將分頁表中回應的條目載入 TLB 中,然後從引起 TLB 失誤的指令處重新啟動程式。如同硬體式 TLB 管理,如果作業系統在分頁表中不能找到有效的虛實位址轉譯條目,就會發生分頁錯誤,作業系統必須進行相應的處理。
典型的 TLB
[編輯]- 容量:12 - 4,096 分頁表條目
- 尋中時間:0.5 - 1 時脈週期
- 失誤代價:10 - 30 時脈週期
- 失誤率: 0.01% - 3%
假如在TLB 尋找需要 1 個時脈週期,而若在TLB找不到(miss hit)需要額外花 30 個時脈週期去尋找,而且miss hit的機率是 1%,則有效的記憶體訪問週期的平均值是 個時脈週期/每一記憶體存取。
指令與資料可以分別使用不同的TLB ,即Instruction TLB (ITLB)與 Data TLB (DTLB),或者指令與資料使用統一的TLB,即Unified TLB (UTLB),再或者使用分塊的TLB (BTLB)。
上下文交換
[編輯]在上下文交換(context switch)部分 TLB 條目可能會失效,例如先前執行的行程已訪問過一個頁面,但是將要執行的行程尚未訪問此頁面。最簡單的策略是清出整個 TLB。較新的 CPU 已有更多有效的策略;例如在 Alpha EV6 中,每一個 TLB 條目會有一個「位址空間號碼」(address space number,ASN)的標記,而且只有符合目前工作的 ASN 的 TLB 條目才會被視為有效。
AMD Phenom
[編輯]AMD Phenom CPU的B2版本存在一個TLB問題。如果改以軟體方式解決這個問題(如BIOS更新),這將會損失10-30%的效能。為此,AMD另外推出B3版本的Phenom處理器,在硬體電路上修正此問題,克服了B2版本Phenom處理器效能減少的問題。
參考
[編輯]- Virtual Memory in the IA-64 Kernel > Translation Lookaside Buffer (頁面存檔備份,存於網際網路檔案館)
- Virtual Translation Lookaside Buffer[永久失效連結]
外部連結
[編輯]- 記憶體管理/分頁架構 (頁面存檔備份,存於網際網路檔案館)
- 處理器的儲存子系統(三)-- 頁表和TLB (頁面存檔備份,存於網際網路檔案館)
- 處理器的儲存子系統(一)--概述 (頁面存檔備份,存於網際網路檔案館)
參閱
[編輯]
|
|
|