TLB
多年來的處理器並不是以實體記憶體位址運作,而是虛擬位址。除了其他優勢之外,這種方式可讓比電腦實際擁有的更多記憶體分配給程式使用,在特定時間只讓必要的資料留在實體記憶體中,其他資料則放在硬碟上。這代表每一次記憶體存取時,虛擬位址就必須轉譯成實體位址,為此,就必須藉由一龐大的表格負責追蹤其間的對應關係。問題在於這個表格會變得大到無法放在晶片上-它放在記憶體上,甚至還可分頁化 (表格的一部分可不存在記憶體上,而留在硬碟中)。
如果每次記憶體存取都需要動到此轉譯階段,記憶體存取就會變得太慢。因此工程師重拾了實體定址的原則,在處理器上直接加上一個小快取記憶體,以儲存最近存取的一些存取位址的對應資料。這個快取記憶體即稱為變換後備緩衝器 (Translation Lookaside Buffer; TLB)。Intel 在新架構中完全翻新了 TLB 的運作方式。過去的 Core 2 使用非常小 (16 個登錄項) 的 L1 TLB (但僅載入時相當快),以及較大的 L2 TLB (256 登錄項),以處理 L1 TLB 中的載入失誤並做為儲存處。
Nehalem 現在擁有一真正的兩層式 TLB:第一層 TLB 由資料與指令共享。現在的 L1 資料 TLB 針對小分頁 (4K) 儲存 64 登錄項,或是大分頁 (2M/4M) 的32 登錄項;而 L1 指令 TLB 針對小分頁儲存 128 個登錄項 (與 Core 2 相同),針對大分頁儲存七個登錄項。第二層是統一快取,可儲存最高 512 個登錄項,並只能針對小分頁運作。這項改良的目的在於增加會使用大型資料集的應用軟體的效能。就像兩層式分支預測的特色,這是該架構伺服器導向的進一步明證。
讓我們暫時回到 SMT 的話題,因為它也會影響 TLB。L1 資料 TLB 與 L2 TLB 會在兩個執行緒之間動態共享。反之,L1 指令 TLB 針對小分頁靜態共享,而大分頁專用的 TLB 則是整個複製-有鑑於其容積小 (每執行緒僅七個登錄項),此處的浪費可以諒解。