1. 程式人生 > >記憶體系列一:快速讀懂記憶體條標籤

記憶體系列一:快速讀懂記憶體條標籤

記憶體是我們平常接觸最頻繁的計算機硬體之一,記憶體的大小、多寡和型號和我們計算機、手機等效能密切相關。記憶體系列計劃通過三篇文章由淺入深介紹記憶體的軟硬體特性以及與韌體的關係。這是第一篇,以一個生活情景給讀者介紹記憶體的背景知識,為後面打下基礎。

情景

小張有一定的計算機背景知識,最近他在京東上買了兩條DDR3的記憶體,打算把筆記本升級成8G。可是一拆開包裝到就傻眼了:

 

 

4GB看起來很好,兩根剛好8GB。2Rx8是啥,PC3又是啥,10600似乎和他想買的1333的差好遠,後面那串數字又代表什麼呢?

小張找到了我,讓我幫忙給他說說這些字母和數字都代表什麼。我最是好為人師,於是開始了我們今天的介紹。

什麼是DIMM?

在80286時代,記憶體顆粒(Chip)是直接插在主機板上的,叫做DIP(Dual In-line Package)。到了80386時代,換成1片焊有記憶體顆粒的電路板,叫做SIMM(Single-Inline Memory Module)。由陣腳形態變化成電路板帶來了很多好處:模組化,安裝便利等等,由此DIY市場才有可能產生。當時SIMM的位寬是32bit,即一個週期讀取4個位元組,到了奔騰時,位寬變為64bit,即8個位元組,於是SIMM就順勢變為DIMM(Double-Inline Memory Module)。這種形態一直延續至今,也是記憶體條的基本形態。

說到這裡,小張著急了:”這和我的記憶體有啥關係?“。當然有關係,就是和10600S的S有關,現在DIMM分為很多種:

RDIMM: 全稱(Registered DIMM),寄存型模組,主要用在伺服器上,為了增加記憶體的容量和穩定性分有ECC和無ECC兩種,但市場上幾乎都是ECC的。

UDIMM:全稱(Unbuffered DIMM),無緩衝型模組,這是我們平時所用到的標準臺式電腦DIMM,分有ECC和無ECC兩種,一般是無ECC的。

SO-DIMM:全稱(Small Outline DIMM),小外型DIMM,膝上型電腦中所使用的DIMM,分ECC和無ECC兩種。

Mini-DIMM:DDR2時代新出現的模組型別,它是Registered DIMM的縮小版本,用於刀片式伺服器等對體積要求苛刻的高階領域。

一般記憶體長度 133.35mm,SO-DIMM為了適應筆記本內狹小的空間,縮短為67.6mm而且一般為側式插入。高度也有些變種,一般的記憶體條高度為30mm,VLP(Very Low Profile)降低為18.3mm,而ULP(Ultra Low Profile)更是矮化到17.8mm,主要是為了放入1U的刀鋒伺服器中。

大小關係如下圖:

 

 

小張這下知道10600S中S代表了SO-DIMM,看來大小沒錯。不過速度呢?

DDR到DDR4

為了照顧小張的急性子,我就跳過了SDRAM(Synchronous Dynamic random access memory)後DDR和Rambus/RDRAM爭天下的故事。DDR SDRAM全稱為Double Data Rate SDRAM,中文名為“雙倍資料流SDRAM”。DDR SDRAM在原有的SDRAM的基礎上改進而來。也正因為如此,DDR能夠憑藉著轉產成本優勢來打敗昔日的對手RDRAM,成為當今的主流。顧名思義,和原本的SDRAM相比,DDR SDRAM一個時鐘週期要傳輸兩次資料:

 

 

從DDR到DDR4主要的區別是在於傳輸速率的不同,隨著時鐘週期的不斷降低,傳輸率也不斷提高。還有電壓也越來越低。有趣的是命名規則,大部分桌上型電腦DIMM廠商都會標註DDRx-yyy,x代表第幾代,yyy代表資料傳輸率。而大部分的SO-DIMM和RDIMM等則標註PCx-zzzz,x還代表第幾代,zzzz則代表最大頻寬。因為DDR位寬為64位,8個位元組,所以zzzz=yyy * 8,而yyy又是時鐘的兩倍。下面這張表是主要的各代DDR記憶體的速度:

 

所以小張的記憶體條上的PC3-10600S代表DDR3,1333MHz的SO-DIMM。小張又問,那2R*8啥意思呢?

RANK和BANK

其實從外觀上就可以看出來小張的記憶體條由很多海力士的記憶體顆粒組成。從記憶體控制器到記憶體顆粒內部邏輯,籠統上講從大到小為:channel>DIMM>rank>chip>bank>row/column,如下圖:

 

 

一個現實的例子是:

 

Channel-->通道(現在臺式機也非常多雙通道的了,伺服器基本都是雙通道)

DIMM-->插槽

rank-->排或面(現在的記憶體條大多是雙面的,或者說是兩排,rank1,rank2)

chip-->晶片或者叫IC(一般一rank(面)上8個晶片,顯示卡上可能有16個晶片)

bank-->層,這些bank共享一個memory I/O controller, 但是在每個bank內部的讀寫可以並行進行。

row-->行,column-->(列)一層bank上就像excel的一張sheet表,例如16384rows*1024column

在這個例子中,一個i7 CPU支援兩個Channel(雙通道),每個Channel上可以插倆個DIMM,而每個DIMM由兩個rank構成,8個chip組成一個rank。由於現在多數記憶體顆粒的位寬是8bit,而CPU頻寬是64bit,所以經常是8個顆粒可以組成一個rank。所以小張的記憶體條2R * 8的意思是由2個rank組成,每個rank八個記憶體顆粒。由於整個記憶體是4GB,我們可以算出單個記憶體顆粒是256MB。

後記

小張這下放心了,不過他提起看到過不少記憶體條上都有很多數字標記,如:

 

 

這些是什麼呢?其實,這是記憶體顆粒的時延(Latency)資料,如4-4-4-8, 5-5-5-15, 7-7-7-21, 或9-9-9-24,分別代表 CL-tRCD-tRP-tRAS的資料,越小越好。具體這些都是什麼,就需要更深入的知識了,我們將會在下一篇硬體原理中講到,而且我們還會在UEFI的memory reference code(MRC)部分再詳細深入說明這些引數的具體使用。

如果你和小張一樣意猶未盡,在下一篇文章之前大家可以思考下面幾個問題:

  1. 每一代記憶體條寬度都一樣,會不會插錯呢?[因為防呆口不同,所以不會插錯]
  2. 從前面各代記憶體速度表可以看出,每一代和前一代頻寬都有部分重複,這是為什麼?[]
  3. 前一代和下一代如果頻寬一樣,那個performance更好呢?[單從頻寬來講是一樣的]