從DDR到DDR4,內存核心頻率其實基本上就沒太大的進步

從2001年DDR內存面世以來發展到2019年的今天,已經走過了DDR、DDR2、DDR3、DDR4四個大的規格時代了(DDR5現在也出來了)。內存的工作頻率也從DDR時代的266MHz進化到了今天的3200MHz。這個頻率在操作系統裡叫Speed、在內存術語裡叫等效頻率、或乾脆直接簡稱頻率。這個頻率越高,每秒鐘內存IO的吞吐量越大。但其實內存有一個最最基本的頻率叫核心頻率,是實際內存電路的工作時的一個振盪頻率。它是內存工作的基礎,很大程度上會影響內存的IO延遲。我今天想給大家揭開另外一面,這個叫核心頻率的東東其實在最近的18年裡,基本上就沒有什麼太大的進步。

從DDR到DDR4,內存核心頻率其實基本上就沒太大的進步

內存Speed

在Linux上可以查看到你機器上內存的Speed。

dmidecode | grep -P -A16 "Memory Device"

Memory Device

Array Handle: 0x0009

Error Information Handle: Not Provided

Total Width: 72 bits

Data Width: 64 bits

Size: 8192 MB

Form Factor: DIMM

Set: None

Locator: DIMM02

Bank Locator: BANK02

Type: Other

Type Detail: Unknown

Speed: 1067 MHz

Manufacturer: Micron

Serial Number: 65ED91DC

Asset Tag: Unknown

Part Number: 36KSF1G72PZ-1G4M1

......

上述命令可以看出每一個插槽上內存物理設備的情況,由於結果太長我只抽取了其中一個內存的信息列了出來。對於我們開發者來說,其中有兩個數據比較關鍵。

  • Speed: 1067 MHz: 每秒能進行內存數據傳輸的速度,
  • Data Width: 64 bits: 內存工作一次傳輸的數據寬度

我的機器上所有的內存條的Speed都是1067(大家別笑話,因為我的測試機器是線上過保淘汰下來的機器,所以老了一點點)。 把Data Width和Speed相乘後得到的就是數據帶寬了。我們把歷史上各個階段的內存的Speed和帶寬彙總了一下,如下圖。

從DDR到DDR4,內存核心頻率其實基本上就沒太大的進步

圖1 各代內存頻率

內存背後的秘密-核心頻率

通過Linux我們只看到了內存的一個Speed,它是數據傳輸的頻率。這個頻率又叫Data Speed,或等效頻率。各個商家在內存的銷售頁面上也把這個頻率標在特別明顯的位置,提醒消費者他家的內存有多快多快。但其實從內存條的技術參數上來講,有個最為重要的頻率,是核心頻率,它是內存電路的震盪頻率,是內存一切工作的基石

我們來看一下各代內存的更全面詳細的數據。

從DDR到DDR4,內存核心頻率其實基本上就沒太大的進步

圖2 各代內存的核心頻率與技術提升手段

我彙總了從SDR時代,一直到目前主流的DDR4的內存的頻率表對比。大家可以看到核心頻率已經多年沒有實質性進步了,這是受物理材料的極限限制,內存的核心頻率一直在133MHz~200MHz之間徘徊。我們所看到的內存Speed是在這個核心頻率的基礎上,通過各種技術手段放大出來的。之所以我們感覺內存在越來越快,就是放大技術手段在不斷進步而已。

  • SDR時代:在最古老的SDR(Single Data Rate SDRAM)年代裡,一個時鐘脈衝只能在脈衝上沿時傳輸數據,所以也叫單倍數據傳輸率內存。這個時期內存的提升方法就是提升內存電路的核心頻率。
  • DDR時代:但是內存製造商們發現核心頻率到了200MHz再提升的話,難度就很大了。所以在電路時鐘週期內預取2bit,輸出的時候就在上升期和下降期各傳輸一次數據。所以核心頻率不變的情況下,Speed(等效頻率)就翻倍了。
  • DDR2時代
    :同樣是在上下沿各傳一次數據,但將Prefech提升為4,每個電路週期一次讀取4bit。所以DDR2的Speed(等效頻率)就達到了核心頻率的4倍。
  • DDR3時代:同樣也是上下沿各傳一次數據,進一步將Prefect提升為8。所以DDR3的等效頻率可以達到核心頻率的8倍。
  • DDR4時代:這時預取的提升已經非常困難,所以和DDR3一樣,Prefech仍然為8。內存製造商們又另闢蹊徑,提出了Bank Group設計。允許各個Bank Group具備獨立啟動操作讀、寫等動作特性。所以等效頻率可以提升到核心頻率的16倍。

內存還有個概念叫IO頻率、也叫時鐘頻率。簡單理解為將DDR內存的Speed頻率除以2,就是內存的IO頻率。這個必須和CPU的外頻相匹配才能工作。例如對於DDR3來說,假如核心頻率133Mhz的內存工作頻率下,匹配533MHz的CPU外頻,其IO頻率就是533Mhz。數據傳輸因為上下沿都可以傳,所以是核心頻率的8倍,也就是1066MHz。

我曾試圖在Linux下找到能查看核心頻率和IO頻率的命令,但是沒有找到,在售的各種內存條似乎也很少會提及它。 但我們是IT從業人員,非普通用戶。因此我覺得大家有必要來了解這個原理。(事實上,這兩個頻率會影響後面討論的內存的延遲參數,而延遲參數又決定了內存的真正性能)

彙總一句話,內存真正的工作頻率是核心頻率,時鐘頻率和數據頻率都是在核心頻率的基礎上,通過技術手段放大出來的。內存越新,放大的倍數越多。但其實這些放大手段都有一些侷限性。比如你的內存數據存儲並不連續,這時候DDR2、DDR3的數據預取對你幫助並不大。再比如你的進程數據都存在一個Bank Group裡,你的進程內存IO就根本不會達到DDR4廠家宣傳的速度。

內存延遲

除了頻率以外,內存還有幾個比較重要的參數,但是同樣在Linux裡沒有找到查看的命令。內存的銷售頁面想找到這幾個參數也不是特別容易。

所有的內存條都有CL-tRCD-tRP-tRAS四個參數。其中最重要的是CL-tRCD-tRP這三個參數,只要你費點勁,所有的在售內存你都能找到這3個值。例如經典的DDR3-1066、DDR3-1333及DDR3-1600的CL值分別為7-7-7、8-8-8及9-9-9。現在京東上一條比較流行的臺式機內存金士頓(Kingston)DDR4 2400 8G,其時序是17-17-17。

第四個參數有時候會被省略。原因有二,第一:現在的開發者不需要直接和內存打交道,而操作系統呢又做的比較內存友好,很少會有這個開銷真正發生。第二,這個開銷的值要比其它的值大很多,實在不太好看。商家為了內存能多賣一些,乾脆就避而不談了。

好了,問題來了。為什麼內存越進步,延遲週期反而會變大了呢?

這就是因為延遲週期使用延遲時間除以內存Speed算出來的。這其實根本就不科學,最科學的辦法應該是用延遲時間來評估。延遲時間很大程度上是受內存的核心頻率的制約的。而這些年核心頻率又基本上沒有進步,所以延遲時間也不會有實質的降低。內存的製造商們又為了頻率數據好看,能多賣些內存,非得采用Speed作為主週期來用。導致在用這個週期一衡量,貌似延遲週期就越來越大了。

今天就帶大家瞭解到這裡,後面我會用實驗來讓你理解你的內存的實際延時。


分享到:


相關文章: