L1 快取
3 秒看懂
L1 Cache 是離 CPU 核心最近、訪問速度最快、但容量最小的片上快取記憶體。 它是處理器執行流水線的第一級儲存屏障——指令取指和資料讀寫若命中 L1,可在 1~5 個時鐘週期內完成;若未命中,代價是數十到數百週期的逐級回退。L1 的容量、延遲與命中率,直接決定了單核 IPC(每週期指令數)的上界。
3 分鐘產業解釋
為什麼 L1 快取是”晶片上的黃金地產”
現代處理器的主頻已達 4-6 GHz(桌面/伺服器),而 DRAM 訪問延遲約 50-80 ns,相當於 200-400+ 個時鐘週期。如果沒有快取層級(Memory Hierarchy),處理器大部分時間都在”空轉等待資料”。
L1 快取位於這個層級的最頂端:
┌──────────┐ ~0.5-1.5 ns (3-5 cycles)
│ L1 Cache │ ← 32~80 KB/core
├──────────┤ ~1-5 ns (10-20 cycles)
│ L2 Cache │ ← 256 KB~2 MB/core
├──────────┤ ~5-15 ns (30-70 cycles)
│ L3 Cache │ ← 數 MB~數百 MB (共享)
├──────────┤ ~50-100 ns (200-400+ cycles)
│ DRAM │ ← GB 級
└──────────┘
在半導體產業中,L1 快取的設計是CPU 微架構最核心的競爭維度之一。它的面積雖小,但處於關鍵時序路徑上——L1 命中延遲直接疊加到流水線級數中,影響頻率上限和 IPC。Intel、AMD、Arm 各家在 L1 的容量、關聯度、延遲上的取捨,體現了截然不同的架構哲學。
對投資者而言,理解 L1 快取的意義在於:它是評估一顆處理器”單核效能基線”的最底層技術指標,也是理解為什麼製程縮微(更小的 SRAM cell → 更大的 L1 或更短的線延遲)能直接轉化為效能收益的關鍵一環。
15 分鐘專家深入
一、L1 在 CPU 微架構中的位置
L1 快取不是一個”獨立的儲存模組”,而是深度嵌入處理器流水線的功能單元:
- L1-I(指令快取, L1 Instruction Cache):服務於取指階段(Fetch Stage),與分支預測器(Branch Predictor)緊密耦合。取指單元每個週期向 L1-I 發起請求,獲取 16-32 位元組的指令行(Fetch Line)。
- L1-D(資料快取, L1 Data Cache):服務於執行階段的 Load/Store 單元。現代超標量處理器每週期可發出 2-4 個 Load 和 1-2 個 Store 請求,要求 L1-D 具有多埠(multi-ported)或 Bank 交叉(bank-interleaved) 的訪問能力。
這種指令/資料分離的 L1 設計(Modified Harvard Architecture) 自 1980 年代末的 RISC 處理器以來已成標準範式,原因是指令流和資料流有不同的空間區域性性特徵和頻寬需求,分離後可獨立最佳化。
二、L1 的微觀結構
SRAM Cell
L1 由 SRAM(Static Random-Access Memory) 構成,每個 bit 需要 6 個電晶體(6T cell)。SRAM 的特點是:
- 無需重新整理,訪問延遲極低(可在一個週期內完成讀/寫)
- 面積大:相比 DRAM 的 1T1C 結構,每 bit 面積大 5-10 倍
- 與邏輯工藝相容:L1 與 CPU 邏輯共享同一製程,無需特殊工藝步驟
關鍵約束:L1 容量的上限,本質上由 SRAM 面積預算和訪問延遲共同決定。面積越大 → 譯碼/位線更長 → 延遲越高 → 可能需要增加流水線級。
組織方式
典型 L1-D 採用 N-way 組相聯(Set-Associative) 結構:
L1-D 組織示意(以 32KB, 8-way, 64B line 為例):
Set 0 Set 1 Set 2 ... Set 63
Way 0: [ Line ] [ Line ] [ Line ] ... [ Line ]
Way 1: [ Line ] [ Line ] [ Line ] ... [ Line ]
...
Way 7: [ Line ] [ Line ] [ Line ] ... [ Line ]
- 總 Sets = 32KB / (8 ways × 64B/line) = 64 Sets
- 地址劃分: [ Tag | Set Index (6 bits) | Block Offset (6 bits) ]
- 關聯度(Associativity):現代 L1-D 典型為 4-way 到 12-way。關聯度越高 → 衝突未命中越少 → 但比較電路更復雜、延遲更高。
- 快取行大小(Cache Line Size):絕大多數現代處理器為 64 位元組,部分架構(如早期某些 Arm 設計)曾用 32 位元組。
三、延遲與時序——為什麼 L1 延遲是硬約束
L1 延遲是處理器最關鍵的時序路徑之一。它直接疊加到 Load-to-Use 延遲中:
| 架構 | L1-D 延遲(週期) | 關聯度 | 容量 | 備註 |
|---|---|---|---|---|
| Intel Golden Cove (Alder Lake P-core) | 5 cycles | 12-way | 48 KB | [Intel 官方最佳化手冊] |
| Intel Raptor Cove (Raptor Lake P-core) | 5 cycles | 12-way | 48 KB | [同上] |
| AMD Zen 4 (Genoa/Raphael) | 4 cycles [估算] | 8-way | 32 KB | [Agner Fog 指令表/社群測試] |
| Arm Cortex-X4 | 4 cycles [Arm TRM] | 可配置 | 64 KB | [Arm 官方 TRM] |
| Apple M 系列 (Firestorm/Avalanche 等) | 3 cycles [估算] | ~12-way | ~128 KB | [社群反向工程/估算] |
⚠️ 來源說明:上表中 Intel 資料引自其公開最佳化參考手冊和微架構白皮書;AMD 延遲資料參考 Agner Fog 指令時序表及社群實測;Arm 資料參考 Cortex-X4 TRM;Apple 資料為社群逆向工程估算值,未經官方確認。具體數字可能因實現和測量方法略有差異。
關鍵洞察:
- Apple 通過堆大面積 L1(128 KB)換取極高的單核 IPC,配合其高頻率設計,是”以面積換效能”的典型。
- Intel 自 Ice Lake (Sunny Cove) 起將 L1-D 增至 48 KB(12-way),但延遲從 4 週期增到 5 週期——容量與延遲的權衡。
- AMD Zen 系列長期保持 32 KB L1-D,將更多面積預算給 L2(Zen 4 為 1 MB),走”小 L1 + 大 L2”路線。
四、L1 一致性與多核挑戰
在多核系統中,每個核心有獨立的 L1。當多個核心訪問同一記憶體地址時,必須維護 快取一致性(Cache Coherence)。
主流一致性協議:
- MESI/MOESI 協議:每個快取行有 Modified/Exclusive/Shared/Invalid 等狀態位。L1 中的每條快取行都需要維護這些狀態。
- Snoop-based(監聽式):核心通過匯流排/環形互連廣播失效請求。Intel 傳統上用 Ring Bus + Snoop。
- Directory-based(目錄式):維護集中式目錄追蹤哪些 L1 持有某行的副本,減少廣播開銷。更適合大規模多核(如 AMD Zen 的 Infinity Fabric + 目錄)。
L1 一致性流量對功耗和效能的影響:L1 越大,需要維護一致性的行越多,一致性協議的探查(snoop)開銷也越大。這是 L1 不能無限增大的原因之一。
五、L1 預取(Prefetching)
現代 L1 配備硬體預取器,在檢測到連續或步進式的訪問模式時,提前將後續快取行拉入 L1:
- Stride Prefetcher:檢測固定步長的訪問模式
- Stream Prefetcher:檢測連續流式訪問
- L1 預取與 L2 預取協同:L1 預取器通常將預取請求發給 L2,由 L2 決定是否從更下層獲取
預取的挑戰:過度預取(Aggressive Prefetching) 會汙染 L1 有用資料,降低有效命中率。預取精度 vs 覆蓋率的權衡是微架構設計的核心問題。
技術原理
L1 讀操作的完整資料通路
CPU Pipeline: Decode/Issue → AGU → L1-D 查詢 → 資料返回 → Execute
L1-D 內部流程(簡化):
┌─────────────────────────────────────────────────────────┐
│ 地址輸入: [Tag (高位) | Index (選 Set) | Offset (選位元組)]│
│ │ │
│ ┌────▼────┐ │
│ │ Set 譯碼 │ → 選定一個 Set (行集合) │
│ └────┬────┘ │
│ ┌───────────┼───────────┐ ... ┌───────┐ │
│ ▼ ▼ ▼ ▼ │ │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐│ │
│ │ Way 0 │ │ Way 1 │ │ Way 2 │ │Way N-1 ││ │
│ │ Tag+ │ │ Tag+ │ │ Tag+ │ │ Tag+ ││ │
│ │ Data │ │ Data │ │ Data │ │ Data ││ │
│ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘│ │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │
│ ┌──────────────────────────────────────────┐│ │
│ │ Tag 比較 + Valid 位檢查 (並行) ││ │
│ └──────────────────┬───────────────────────┘│ │
│ │ │ │
│ ┌─────▼─────┐ │ │
│ │ Hit/Miss? │ │ │
│ └─────┬─────┘ │ │
│ Hit │ Miss │ │
│ ┌───────┐ │ ┌──────────────┐ │ │
│ │MUX 選中│ │ │ 發請求給 L2 │ │ │
│ │對應 Way│ │ │ (Miss Handler)│ │ │
│ └───┬────┘ │ └──────────────┘ │ │
│ ▼ │ │ │
│ 資料 → 流水線 │ │ │
└─────────────────────────────────────────────────────────┘
關鍵引數解釋
| 引數 | 典型值 | 含義 |
|---|---|---|
| 容量 | 32~192 KB/core | 越大 → 命中率越高,延遲越高 |
| 關聯度 | 4-way ~ 12-way | 越高 → 衝突 miss 越少,比較器越多 |
| 快取行 | 64 Bytes | 與記憶體頁對齊,利用空間區域性性 |
| 訪問延遲 | 3~5 cycles | 從地址輸入到資料可用 |
| 頻寬 | 32~64 Bytes/cycle/core | 每週期可讀出的資料量 |
| 埠 | 2-Read + 1-Write (典型) | 支援每週期多 Load + Store |
| 寫策略 | Write-Back(典型) | 寫操作僅修改 L1,髒行在被替換時寫回 L2 |
| 替換策略 | Pseudo-LRU / Adaptive | 近似 LRU,硬體實現成本低 |
寫操作與寫緩衝
- Write-Back 策略:寫命中時僅修改 L1 中的資料並標記為 Dirty,不立即寫回 L2。被替換時才寫回 → 減少 L2 寫頻寬。
- Write Buffer(寫緩衝區):當 Store 執行時,資料先寫入 Store Buffer(在流水線中),隨後非同步寫入 L1-D。Store Buffer 還用於支援 Store-to-Load Forwarding(後續 Load 可直接從 Store Buffer 獲取資料,無需等待寫入 L1)。
- Write Combining:對某些 Non-Temporal Store 或 MMIO 區域,可將多個小寫合併為一個快取行寫入,減少匯流排事務。
虛擬索引物理標籤(VIPT)與快取一致性
- PIPT(Physically Indexed, Physically Tagged):地址在 TLB 翻譯後才查快取 → 無歧義,但 TLB 查詢疊加到延遲中。
- VIPT(Virtually Indexed, Physically Tagged):用虛擬地址低位(page offset 內的部分)作為索引,可與 TLB 查詢並行 → 延遲更低,但需處理同義(synonym)問題。
- 關鍵約束:VIPT 要保證 Index 位完全落在 page offset 之內,即
L1 容量 / 關聯度 ≤ Page Size。對於 4KB 頁,每路容量不超過 4 KB。Intel 的 48 KB L1-D 採用 12-way 關聯度,每路大小恰好為 4 KB,因此索引位完全在頁內偏移範圍內,與標準的 VIPT 無別名條件一致,無需額外的同義檢測機制。
這是 Intel 將 L1-D 擴充套件到 48KB 但仍能使用類 VIPT 方案的實現細節之一,具體工程方案未完全公開 [Intel 未充分揭露]。
技術演進史
時間線
| 時期 | 代表架構 | L1-D 規格 | 關鍵變革 |
|---|---|---|---|
| 1985 | MIPS R2000 | 無片上快取(外部) | RISC 原型,依賴外部快取 |
| 1989 | Intel 486 | 8 KB 統一 L1 | 首次在 x86 中整合片上快取 |
| 1993 | Pentium | 8KB I + 8KB D (分離) | x86 首次採用分離 L1 |
| 1995 | Pentium Pro | 8KB I + 8KB D | 引入 Out-of-Order + 多級快取 |
| 2000 | Pentium 4 (Willamette) | Trace Cache(約 12K uops)+ 8KB L1-D | Trace Cache 實驗 |
| 2006 | Intel Core 2 (Merom) | 32KB I + 32KB D (8-way) | 迴歸保守設計,高命中率 |
| 2011 | Intel Sandy Bridge | 32KB I + 32KB D (8-way) | 延續穩定設計 |
| 2017 | AMD Zen | 64KB I + 32KB D (4-way I / 8-way D) | AMD 大幅增加 L1-I 容量 |
| 2019 | Arm Cortex-A77 | 64KB I + 64KB D | Arm 移動核心 L1 逼近桌面級 |
| 2021 | Intel Alder Lake (Golden Cove) | 32KB I + 48KB D (8-way I / 12-way D) | L1-D 48KB(首次於 Ice Lake 引入) |
| 2022 | Apple Avalanche | 192KB I + 128KB D [估算] | Apple 激進堆面積 |
趨勢總結
- 容量緩慢增長:過去 20 年 L1-D 從 8KB → 32KB → 48KB,增速遠低於 L2/L3
- 延遲基本持平或略增:製程進步帶來的線延遲縮短,被容量增長和頻率提升部分抵消
- 關聯度持續提高:從 4-way → 8-way → 12-way,減少衝突未命中
- L1-I 趨向更大:尤其在 Arm 生態中,64KB L1-I 已成標配
技術路線對比
主流桌面/伺服器處理器 L1 快取規格對比
| 特性 | Intel (Golden Cove P-core) | AMD (Zen 4) | Arm (Cortex-X4) | Apple (Avalanche) |
|---|---|---|---|---|
| L1-I 容量 | 32 KB | 32 KB | 64 KB | ~192 KB [估算] |
| L1-D 容量 | 48 KB | 32 KB | 64 KB | ~128 KB [估算] |
| L1-I 關聯度 | 8-way | 8-way | 4-way [Arm TRM] | ~12-way [估算] |
| L1-D 關聯度 | 12-way | 8-way | 4-way [Arm TRM] | ~12-way [估算] |
| 快取行大小 | 64B | 64B | 64B | 64B |
| L1-D 延遲 | 5 cycles | ~4 cycles [估算] | ~4 cycles [Arm TRM] | ~3 cycles [估算] |
| 寫策略 | Write-Back | Write-Back | Write-Back | Write-Back |
| 典型工藝 | Intel 7 | TSMC 5nm | TSMC 4nm | TSMC 5nm [估算] |
| 設計哲學 | 容量適中 + 高關聯度 | 傾斜給 L2 (1MB) | 高頻寬 + 大容量 | 極致面積換延遲 |
來源說明:Intel 規格見 Intel Architecture Optimization Reference Manual;AMD 規格參考 AMD Software Optimization Guide 及社群測試資料;Arm 規格見 Cortex-X4 TRM;Apple 規格為社群逆向分析估算,未經官方確認。
上下游
上游:L1 快取的”製造依賴”
┌──────────────────────────────────────────────────┐
│ L1 快取的上游 │
├──────────────────────────────────────────────────┤
│ │
│ EDA 工具 ──→ SRAM 編譯器(Cache Compiler) │
│ ├─ Synopsys Memory Compiler │
│ ├─ Cadence Memory Compiler │
│ └─ 自研(大廠如 Intel/Apple) │
│ │
│ 製程工藝 ──→ SRAM bit cell 面積 │
│ ├─ 5nm → ~0.021 μm²/bit [估算] │
│ ├─ 3nm → ~0.015 μm²/bit [估算] │
│ └─ 面積縮小 → 同面積更大 L1 │
│ │
│ IP 授權 ──→ Arm 授權的 CPU 核自帶 L1 設計 │
│ └─ 或自研(Apple/高通 Nuvia) │
│ │
└──────────────────────────────────────────────────┘
下游:L1 如何影響系統表現
- CPU IPC:L1 命中率直接決定 IPC 上限。L1 miss 導致流水線停頓(stall)。
- 編譯器/軟體最佳化:資料結構版面配置(Data-Oriented Design)、迴圈分塊(Loop Tiling)等技術的核心目標就是提升 L1 命中率。
- 虛擬化/Hypervisor:L1 在 VM 遷移時無需特殊處理(它是 per-core 的瞬態狀態),但 cache flush 在上下文切換時有效能開銷。
- 安全性:Spectre 等側通道攻擊利用 L1 的時序側通道(命中/未命中的時間差異)洩露資料 → 催生了 L1 快取分割槽(Cache Partitioning)和 Flush 等安全機制。
關鍵指標
評估 L1 快取設計的核心指標:
| 指標 | 定義 | 為何重要 |
|---|---|---|
| 命中率(Hit Rate) | L1 訪問命中 / 總 L1 訪問 | 核心效能指標,典型 >95% |
| AMAT(Average Memory Access Time) | Hit Time + Miss Rate × Miss Penalty | 衡量快取子系統整體效率 |
| Load-to-Use Latency | Load 指令發射到資料可用的週期數 | 直接影響流水線停頓 |
| 頻寬(Bandwidth) | 每週期可服務的位元組數 | 超標量執行需要高 L1 頻寬 |
| 面積效率(Area Efficiency) | KB / mm² | 在給定工藝下能整合多大的 L1 |
| 功耗密度(Power Density) | mW / KB | SRAM 漏電隨工藝縮微惡化 |
| MPKI(Misses Per Kilo-Instruction) | 每千條指令的 L1 miss 次數 | 用於跨工作負載比較 |
供需與市場資料
L1 快取不是一個獨立的”市場”——它是 CPU 微架構的內生組成部分
L1 快取沒有獨立的供需市場。其規模和設計決策由以下因素驅動:
- 製程縮微紅利:工藝從 7nm → 5nm → 3nm,SRAM bit cell 面積每代縮小約 20-30% [行業報告估算]。這意味著在相同面積預算下,可容納更大的 L1 或保持 L1 大小但降低功耗。
- 工作負載變化:AI 推論、資料庫等隨機訪問密集型工作負載對 L1 容量更敏感;流式計算(如影片編碼)對 L1 頻寬更敏感。
- 移動 vs 桌面:移動處理器(如 Arm Cortex-X 系列)因功耗約束,L1 容量通常小於桌面處理器,但近年差距在縮小。
行業趨勢資料
- 全球 CPU 出貨量(含 x86 + Arm)每年數十億顆,每顆包含數個到上百個 L1 快取例項 [行業估算]。
- SRAM 在先進製程晶片中的面積佔比:典型高效能核心中,L1 + L2 SRAM 可佔核心面積的 30-50% [學術論文估算,ISSCC/Hot Chips 公開資料]。
- 台積電 3nm 工藝中,SRAM 密度約 30-40 Mbit/mm² [台積電公開技術簡報估算]。
代表公司與資本對映
L1 快取相關公司全景
| 層面 | 代表公司 | 與 L1 的關係 |
|---|---|---|
| CPU 設計(L1 定義者) | Intel、AMD、Apple、高通(Nuvia)、Arm | 定義 L1 容量/延遲/關聯度等微架構引數 |
| EDA 工具 | Synopsys (SNPS)、Cadence (CDNS) | 提供 SRAM 編譯器,幫助生成 L1 物理設計 |
| 晶圓代工 | TSMC、Samsung、Intel Foundry | SRAM bit cell 面積由製程決定 |
| 測試裝置 | Keysight (KEYS)、Advantest | 快取功能/時序的驗證 |
| 安全 IP | Arm (Arm Confidential Compute) | L1 快取隔離和側通道防護方案 |
資本對映邏輯
- Synopsys / Cadence:所有先進製程晶片的 L1 設計都依賴其 SRAM 編譯器,是”賣鏟子”的確定性受益者
- TSMC:製程進步 → SRAM 更密 → L1 可更大或更省電,製程領先直接轉化為 L1 設計優勢
- Arm:通過 CPU IP 授權(Cortex-X/A 系列)直接影響全球數十億顆 SoC 的 L1 設計
投資邏輯
L1 快取本身不直接構成投資標的,但它是理解以下投資邏輯的關鍵底層知識:
-
“製程為王”邏輯的技術支撐
- 製程每前進一代,SRAM 密度提升 → L1 容量可增大或延遲降低 → 直接提升單核效能。這是台積電製程領先能轉化為效能溢價的微觀機制之一。
-
處理器效能評估的”透視鏡”
- 評估 Intel vs AMD vs Arm 處理器競爭時,L1 規格是最底層的硬指標。例如,Apple 通過堆疊超大 L1(~192KB I + ~128KB D [估算])實現單核領先,說明在移動功耗約束下”面積換效能”仍然有效。
-
SRAM 縮微放緩 → 風險訊號
- 近代工藝中,SRAM 縮微速度開始慢於邏輯縮微(Logic Scaling)[ISSCC 公開討論]。如果 SRAM 面積不再有效縮小,L1 容量增長將受限,可能成為效能提升的瓶頸,推動行業尋找替代儲存技術(如 MRAM、STT-MRAM 作為 L1 的可能替代,但目前延遲差距巨大)。
-
安全側通道 → 新增開銷
- Spectre/Meltdown 類漏洞迫使處理器引入 L1 快取分割槽、頻繁 flush 等機制,帶來效能損失(可能 5-15% [公開安全評估]),也為安全 IP 提供了新增需求。
常見誤讀糾偏
❌ 誤讀 1:“L1 快取越大,效能一定越好”
糾偏:L1 增大帶來的收益服從遞減規律。從 32KB 增至 64KB,命中率提升可能僅 1-3 個百分點,但延遲可能從 4 週期增到 5-6 週期。當命中率已經很高(>95%)時,額外容量的邊際收益很小,而延遲增加對每次訪問都有影響。最佳 L1 大小是命中率提升收益 ≈ 延遲增加損失的平衡點。Apple 的策略之所以有效,部分原因是其處理器頻率極高(單週期時間極短),即使多一週期延遲,絕對時間仍很短,且其工作負載對 L1 容量敏感。
❌ 誤讀 2:“L1 miss 就是去 DRAM 拿資料”
糾偏:L1 miss 後,資料請求首先發往 L2(通常 ~10-20 週期),L2 miss 再去 L3(~30-70 週期),L3 miss 才去 DRAM(~200+ 週期)。快取層級是逐級回退的,不是跳級。而且 L2/L3 通常採用包含(Inclusive)或非包含(Non-inclusive/Exclusive) 策略,影響一致性維護複雜度和有效容量。
❌ 誤讀 3:“L1 快取設計是標準化的,各家差不多”
糾偏:L1 設計是各 CPU 廠商差異化競爭的核心領域之一。從上文對比表可以看出,Intel(48KB D, 12-way, 5 cycle)、AMD(32KB D, 8-way, ~4 cycle)、Apple(~128KB D [估算])三家的設計哲學截然不同。L1 的選擇映射了對目標工作負載、功耗預算、面積預算的綜合判斷。
❌ 誤讀 4:“SRAM 工藝和邏輯工藝是分開的,L1 用的是特殊 SRAM 工藝”
糾偏:在現代 SoC 中,L1 快取的 SRAM 與 CPU 邏輯共享同一製程節點(如 TSMC 5nm)。SRAM 和邏輯是同一晶片上用同一次光刻流程製造的。雖然部分晶片會在特定區域使用”高密度 SRAM 版本”的 bit cell,但這不是獨立工藝,而是同一製程的 cell library 變體。
學習路徑
入門級(建立直覺)
- 《Computer Organization and Design》 (Patterson & Hennessy) — 第 5 章 Memory Hierarchy,入門首選
- CS:APP (Computer Systems: A Programmer’s Perspective) 第 6 章 — 從程式設計師視角理解快取層次
- 實驗:編寫簡單的 C 程式測量陣列遍歷的快取行為(行優先 vs 列優先)
進階級(理解微架構)
- **《Computer Archi