L1、L2、L3 快取的差異:容量、延遲、共用範圍、包含關係比較

L1、L2、L3 快取是依距離 CPU 核心由近到遠排列的多層快取,越近越小越快,越遠越大越慢。在一般 PC 與伺服器的 CPU 中,代表性的範圍是 L1 為數十 KB、數個週期,L2 為數百 KB 至數 MB、十幾個週期,L3 為數 MB 至數十 MB、數十個週期。L1 與 L2 多半由每個核心各自擁有,L3 則由多個核心共用。存取主記憶體 DRAM 需要數百個週期,因此要以此階層盡可能承接大部分的存取。

項目L1 快取L2 快取L3 快取
與核心的關係各核心專用多半為各核心專用。也有由數個核心共用的設計由多個核心(整顆晶片或一群核心)共用
容量(PC、伺服器用 CPU 的代表性範圍)指令用、資料用各約 32 至 64 KB每個核心約 256 KB 至數 MB整顆晶片數 MB 至數十 MB
延遲(代表性範圍)約 3 至 5 個週期約 10 至 20 個週期約 30 至 70 個週期。離核心越遠的部分越長
指令與資料分開(I 快取與 D 快取)共用(統一快取)共用(統一快取)
設計重點命中時間短。在管線中每個週期都會使用承接 L1 的未命中,降低未命中懲罰減少對主記憶體的存取,並在核心之間共用資料
未命中時的去處L2L3主記憶體(DRAM)
位址的處理多為虛擬索引、實體標籤(VIPT)實體位址實體位址
包含關係最上層。是否包含於下層由下層的方式決定依設計而定,例如包含式、非包含式採包含式較容易縮小一致性檢查的範圍。也有消除重複的互斥式或非包含式設計
實體配置在核心內,緊鄰執行單元在核心外側附近,作為核心的一部分配置多半分割為每個核心的切片,以環狀或網狀網路連接
快取行大小一般為 64 位元組一般為 64 位元組一般為 64 位元組

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

L1 快取
每次擷取指令或執行載入、儲存時都會使用的最近快取。將常用資料集中在小範圍內、提高時間局部性時效果明顯。
L2 快取
承接放不進 L1 的工作資料。以迴圈分塊等方式,將工作資料控制在數百 KB 至數 MB 左右時較容易見效。
L3 快取
在多個核心共用資料,或處理放不進各核心快取的大型資料時有效。由於與其他核心爭奪容量,會受到同時執行之程式的影響。

常見問題

為什麼不把 L1 快取做得更大?

因為加大容量會使記憶單元陣列與配線變長,命中時間隨之延長。L1 在管線中每個週期都會使用,即使延遲 1 個週期也會對效能造成很大影響。因此 L1 控制在數十 KB,大容量則由 L2 與 L3 提供。在 VIPT 方式中,容量也會受到分頁大小與關聯度之間關係的限制。

為什麼只有 L1 分成指令用與資料用?

因為在管線中,每個週期都在擷取指令,同時另一個指令在讀寫資料。分開後兩種存取可以同時進行,也能各自採用合適的結構。L2 以後存取頻率較低,一般採用容量可彈性分配的共用快取。

包含式與互斥式哪一種比較好?

各有優缺點。包含式中上層的內容一定也存在於下層,因此來自其他核心的查詢只需由下層判斷,但重複的部分會使實際容量減少。互斥式沒有重複,可以有效利用總容量,但快取行的搬移與一致性管理會變得複雜。會依核心數量與快取大小來選擇。

表中的容量與週期數在每種 CPU 都相同嗎?

不,這些是假設 PC 與伺服器用 CPU 的代表性範圍。會隨設計世代、操作頻率、核心數量與晶片構成而改變。嵌入式微控制器多半沒有 L2 或 L3,相反地也有堆疊快取晶片以加大 L3 的產品。實際數值可用效能計數器或量測記憶體延遲的程式來確認。

理解度檢測

在一般電腦中,依存取速度由快到慢排列的記憶體階層,下列何者正確?

  1. ASSD → 主記憶體 → L2 快取 → L1 快取 → 暫存器
  2. B主記憶體 → 暫存器 → SSD → L1 快取
  3. C暫存器 → L1 快取 → L2 快取 → 主記憶體(DRAM)→ SSD
查看答案與解析

正確答案:C. 暫存器 → L1 快取 → L2 快取 → 主記憶體(DRAM)→ SSD

越靠近 CPU 的記憶體越快速且容量越小,越遠則越慢、容量越大且越便宜。大致的標準為:暫存器不到 1 個時脈,L1 約 1 ns(數十 KB),L2 為數 ns(數 MB),L3 為十幾 ns(數十 MB),DRAM 約 100 ns(數十 GB),SSD 為數十〜100 µs(數 TB)。藉由將常用資料放在較快的階層,整體上以低廉的成本實現了快速又大容量的記憶體。

將快取分為指令用(I快取)與資料用(D快取)的L1快取,其主要優點為下列何者?

  1. A即使指令與資料放在相同位址也不會衝突,容量看起來變成2倍
  2. B指令的提取與資料的讀寫可在同一個時脈中並行進行
  3. C指令不會被改寫,所以可以不需要D快取
查看答案與解析

正確答案:B. 指令的提取與資料的讀寫可在同一個時脈中並行進行

在管線中,每個時脈都要提取指令,同時另一條指令要讀寫資料。將L1分為指令用與資料用後,兩個存取不必爭用單一快取的埠即可並行進行,也能依各自的性質選擇配置。容量並不會變成2倍,而是將總容量分開使用。由於資料的讀寫始終是必要的,不可能不需要D快取。L2以後一般是指令與資料共用。

在L1快取之下設置L2快取的多層快取中,L2快取的主要作用為下列何者?

  1. A以比L1快取更快的命中時間,消除L1本身的未命中
  2. B雖比L1大且慢,但能縮小L1的未命中代價
  3. C取代主記憶體,隨時保存程式的所有資料
查看答案與解析

正確答案:B. 雖比L1大且慢,但能縮小L1的未命中代價

L1為了優先追求速度而做得很小,因此會發生一定程度的未命中。L2比L1大,命中時間雖較長,但比主記憶體快得多,所以L1未命中的存取大多由L2承接,使L1的未命中代價比直接到主記憶體大幅減少。L2並不比L1快,也無法消除L1的未命中。其容量遠小於主記憶體,也不可能保存所有資料。

  1. 下層快取(L2等)完全包含上層快取(L1)內容的包含式(inclusive)方式,其特徵下列何者正確?
  2. 加大快取的容量時,命中時間一般會如何變化?連同理由一起,下列何者正確?
  3. L1快取的命中時間為1 ns、未命中率為5%,L2快取的命中時間為10 ns、L2的區域未命中率為20%,主記憶體的存取時間為100 ns時,平均記憶體存取時間為多少?

前往記憶體階層與效能的練習題

相關名詞的解說

快取記憶體
設置在 CPU 附近的高速、小容量記憶體。保存常用資料,以緩和與主記憶體之間的速度差。主要由 SRAM 製成。
平均記憶體存取時間(AMAT)
一次記憶體存取所需時間的平均。以命中時間 + 失誤率 × 失誤懲罰求得,是比較快取性能的基本指標。
失誤懲罰
發生快取失誤時,從下層取得資料所額外花費的時間。由下層的存取時間與行的傳輸時間決定。
快取一致性
在多核心 CPU 中,各核心的快取內有相同位址的資料時,維持其內容一致性的機制。當某個核心改寫時,藉由讓其他核心的舊副本失效等方式來實現。
時間局部性
曾經存取過的資料或指令,在不久之後容易再次被存取的性質。例如在迴圈中重複使用的變數,是快取有效的原因之一。

相關的比較