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

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

圖片

內存Speed

在Linux上能夠查看到你機器上內存的Speed。性能

# dmidecode | grep -P -A16 "Memory Device"Memory DeviceArray Handle: 0x0009Error Information Handle: Not ProvidedTotal Width: 72 bitsData Width: 64 bitsSize: 8192 MBForm Factor: DIMMSet: NoneLocator: DIMM02Bank Locator: BANK02Type: OtherType Detail: UnknownSpeed: 1067 MHzManufacturer: MicronSerial Number: 65ED91DCAsset Tag: UnknownPart Number: 36KSF1G72PZ-1G4M1......


上述命令能夠看出每個插槽上內存物理設備的狀況,因爲結果太長我只抽取了其中一個內存的信息列了出來。對於咱們開發者來講,其中有兩個數據比較關鍵。測試

  • Speed: 1067 MHz:每秒能進行內存數據傳輸的速度,spa

  • Data Width: 64 bits:內存工做一次傳輸的數據寬度操作系統

個人機器上全部的內存條的Speed都是1067(你們別笑話,由於個人測試機器是線上過保淘汰下來的機器,因此老了一點點)。把Data Width和Speed相乘後獲得的就是數據帶寬了。咱們把歷史上各個階段的內存的Speed和帶寬彙總了一下,以下圖。設計

圖1 各代內存頻率code

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

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

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

圖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從業人員,非普通用戶。所以我以爲你們有必要來了解這個原理。(事實上,這兩個頻率會影響後面討論的內存的延遲參數,而延遲參數又決定了內存的真正性能)

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

內存延遲

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

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

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

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

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

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

相關文章
相關標籤/搜索