1. 程式人生 > >記憶體二三事,part1

記憶體二三事,part1

1.簡介

早期的計算機較現在更簡單。計算機系統的元件例如CPU,記憶體,硬碟,網路介面同時發展起來,結果就是他們在效能上很平衡。例如在資料傳輸速度上,記憶體網絡卡cpu相差不多。

但是,當計算機系統的整個結構確定後,每個子部件的發展速度就各不相同了。例如 CPU發展非常快,但是記憶體和硬碟由於很多原因發展很慢。於是,記憶體,硬碟等成為了計算機效能發展的瓶頸。這些瓶頸,我們通過軟體技術,例如OS來彌補。例如,儲存系統較CPU還是非常慢,我們通過資料快取(把硬碟中的資料快取導RAM中)來緩解高速和低速間的不平衡。

對於資料儲存和訪問,有下面幾個措施來改善:

  • RAM硬體的設計
  • 記憶體控制器設計
  • cpu快取區
  • 外設DMA

本文件只對CPU緩衝區和記憶體控制器做介紹,並且僅侷限於LINUX的。

2.計算機系統架構

宣告:這裡只對商用型別做介紹,專用的不在談論範圍內。

歷來,個人PC通常由兩部分組成:
{北橋南橋
最開始的計算機架構:

所有的CPU通過匯流排與北橋連線,北橋包括記憶體控制器,對於不同的RAM,例如SRAM,DRAM,SDRAM,需要不同的記憶體控制器。
為了與其他裝置通訊,南橋和上面的北橋連線。南橋充當輸入/輸出的橋,通過各種不同的匯流排協議(USB,SATA,PCI等)與外部裝置通訊。
這裡有以下結論:

  • 多CPU必須經北橋進行通訊
  • 與RAM通訊必須經北橋
  • RAM只有一個通道(文件年代久遠,現在有DDR3,DDR4)
  • 與南橋相連的裝置若想同CPU通訊,必須經北橋

對於上圖的設計,存在兩個瓶頸
(1)裝置訪問RAM要經過CPU,這樣效能差。於是提出DMA(directly data access ),裝置直接經過北橋訪問記憶體,不經過CPU。這樣減少了CPU的負載,但同時北橋的頻寬被佔用了,於是出現瓶頸(2)。
(2)早期RAM只有一個通道(現在有多通道了,DDR3,DDR4),頻寬有限,高併發通訊時,資料通訊延遲大。所以,增加資料流通的管道可以提高速度。記憶體條DDR4就比DDR3快。

如何在計算機系統架構上提高頻寬

呢?

方法一:在一些比較貴的計算機系統中,為了提高RAM的訪問頻寬,使用下圖架構:

這個系統的特點是:把記憶體控制器從北橋剝離出來,使用外部記憶體控制器,這樣的設計可以提高記憶體訪問的頻寬,也拓展了記憶體容量。

方法二:
在多cpu系統中(SMP),把記憶體控制器整合到CPU中,記憶體通道一下擴大4倍。

這種架構拓展了RAM的頻寬,現在大型伺服器很流行用,但也有缺點。即NUMA,非一致記憶體訪問。每個CPU對自己attach的RAM訪問速度很高,但訪問別的CPU的RAM速度就打折了(多走路了)。但這些都可以通過軟體層面優化,比如OS。

3.附加

自己的電腦到底使用的何種架構,我也沒深究過,不過,架構主要由CPU主機板共同決定。

4.參考