十分鐘搞懂 Cache Coherence (快取一致性) 的底層邏輯
要理解 Cache Coherence(快取一致性),我們得先深刻體會「痛點」在哪
十分鐘搞懂 Cache Coherence (快取一致性) 的底層邏輯
要理解 Cache Coherence(快取一致性),我們得先深刻體會「痛點」在哪
想像一下,一個團隊正在共同開發一個大型專案。兩位工程師各自把同一份 RTL 程式碼複製到自己的本機端(這就像是處理器的 Local Cache)進行修改。如果工程師 A 修改了某個控制訊號並存檔,卻沒有立刻同步到主伺服器(Main Memory),這時工程師 B 繼續沿用自己本機端的舊檔案來進行編譯,就會引發系統性的錯誤。這就是硬體世界中的「資料不同步(Stale Data)」。
在現代 SoC 架構中,每個核心通常都有自己專屬的 L1 甚至 L2 Cache。為了追求極致的效能並降低延遲,多數架構會採用 Write-back(寫回) 策略:也就是當核心修改了 Cache 裡的資料時,它只會將這個 Cache Line 標記為「Dirty(髒資料)」,而不會立刻大費周章地寫回主記憶體。
這種設計雖然速度極快,卻也帶來嚴重的資料一致性危機
現在,我們來做個簡單的情境思考: 假設系統中 Core 0 和 Core 1 同時載入了一個記憶體位址 0x1000 的重要狀態標記(初始數值為 0)到各自的 Cache 中。接著,Core 0 處理完某項任務,將自己 Cache 裡這個位址的數值更新成了 1,但因為是 Write-back 機制,這個 1 還沒寫回主記憶體。
在完全沒有任何「快取一致性協定」介入的情況下,如果這個時候 Core 1 需要讀取位址 0x1000 來決定下一步的硬體動作,可能會發生什麼事?
— — — — — — — — — — — (請先花 10 秒鐘思考該情境) — —— — — — — — — —
在硬體底層,那個 0x1000 的位址很可能是一個同步鎖(Spinlock)。如果 Core 0 已經把鎖拿走(寫入 1),但 Core 1 讀到的還是舊的 0,以為鎖還是解開的,兩個核心就會同時闖入修改同一筆資料。這不僅會引發嚴重的競爭危害(Race Condition)導致邏輯全毀,更常見的下場就是系統死鎖(Deadlock)。
所以Cache Coherence是什麼? 它是指在多核心處理器中,對於同一塊記憶體資料存取時,硬體所需要的一套同步機制,確保每個核心看到的資料永遠是最新的、一致的
既然硬體層級的快取一致性這麼重要,那晶片設計師究竟是怎麼讓多個核心既能「同步」資料,又不會讓 Bus 流量爆炸、系統慢得像烏龜一樣呢?在下一篇文章中,我們將先介紹業界最經典的解決基礎 — — Snooping Protocol(監聽協議),包含它的運作原理、Bus Broadcast 機制,看看 CPU 是如何透過「觀察總線上的所有行為」,來維持 cache coherence。
메타데이터
- post_id
- c52871dec155
- slug
- 十分鐘搞懂-cache-coherence-快取一致性-的底層邏輯-c52871dec155
- url
- https://medium.com/@ic.mentor.kai/%E5%8D%81%E5%88%86%E9%90%98%E6%90%9E%E6%87%82-cache-coherence-%E5%BF%AB%E5%8F%96%E4%B8%80%E8%87%B4%E6%80%A7-%E7%9A%84%E5%BA%95%E5%B1%A4%E9%82%8F%E8%BC%AF-c52871dec155
- canonical_url
- https://medium.com/@ic.mentor.kai/%E5%8D%81%E5%88%86%E9%90%98%E6%90%9E%E6%87%82-cache-coherence-%E5%BF%AB%E5%8F%96%E4%B8%80%E8%87%B4%E6%80%A7-%E7%9A%84%E5%BA%95%E5%B1%A4%E9%82%8F%E8%BC%AF-c52871dec155
- author_url
- https://medium.com/@ic.mentor.kai
- status
- ok
- fetched_at
- 2026-06-10 18:44:10