Try   HackMD

CPU Caches in the Big Picture

contributed by <krimson8, aben20807, allenchen8210, dange0, flawless0714>

tags: sysprog2018

Cache 提供了加速 CPU 存取記憶體的功能,但隨著 CPU 變成多核、多執行緒,cache 又分成 CPU 共享的 cache 和各自獨立的 cache ,使 cache 的資料存取不再這麼直觀,也遇到了一些問題。

Minimum Cache Configuration

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

為早期系統採用的 cache 架構,在 CPU core 與 main memory 之間插入 cache,所有的讀取與寫入都需要通過 cache。

Processor with Level 3 Cache

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

雖然 CPU 架構是採用范紐曼型架構(Von Neumann architecture),但是將 instruction 與 data 分離可以有效的提升高速緩存的效率,因此於 L1 cache 會區分為 L1i 與 L1d。詳見:哈佛架構(Harvard architecture)。

隨著系統越來越複雜,cache 的大小漸漸的不夠用,然而增加 L1 cache 的大小卻會帶來巨大的成本,因此採用新增不同大小、不同速度的 cache 解決 cache 不夠用的問題。

值得注意的是,雖然上圖中 L3 cache 看似 CPU 唯一進入 bus 的入口。但是實際上 CPU 在與 main memory 傳輸資料流時,並不需要經過更高級別的 cache。
補充範例:假設某資料在 L2,沒有在 L1。則 CPU 在 L1 miss 時,CPU 會去 L2 找並直接拿來使用,不需要先把資料搬到 L1 後 CPU 再透過 L1 獲得該資料。

Multi processor, multi-core, multi-thread

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

除此之外,現代處理器往往附有多個核心,且一個核心可能擁有多個執行緒。處理器的物理核心擁有獨立的硬體資源,大部分早期的多核心處理器甚至擁有獨立的 L2 Cache 而沒有 L3 Cache。比方說,處理器核心都可以獨立運作,除了當需要使用網絡連結這一類資源的時候。而執行緒則幾乎是共用 CPU 上的所有資源。Intel 的處理器上有一些獨立的暫存器供執行緒使用。一個完整的現代處理器的架構就如上圖所示。

在進入多核心多執行緒,cache 的管理就更為複雜了。
上圖為一個雙處理器,雙核心,雙執行緒之範例,可以觀察的以下特性:

  • 一個核心(深灰色框框)內的執行緒(橘色)共享 L1 cache(淺綠色)
  • 同一個處理器內(淺灰色框框)內的核心共用 L2、L3 cache(綠色)
  • 不同處理器間的 cache 是完全獨立