摘錄:ddr3內存條時序概念


本文摘自:內存系列二:深入理解硬件原理 - 知乎 (zhihu.com),感謝作者!

 

上次雖然解決了小張的問題,卻引發了他對內存原理的興趣。這不他又來找我了,說我還欠他一個解釋。這次我們約在一個咖啡館見面,這次內容有點深入,我帶了些圖片,小張也點了一大杯美式,計划大干一場。看着他認真的樣子,我也決定毀人不倦,把他也帶入IT工程師的不歸路。。。

尋址(addressing)

為了了解前幾天說的幾個延遲參數,不得不介紹下DIMM的尋址方式。也許你發現了上次介紹Rank和chip的關系時,有個Bank/Column/row我們沒有講到,它們和如何尋址密切相關。還記得上次的圖片嗎?

 

這次我們來看看rank和Chip里面有什么,如下圖:

 

這是個DDR3一個Rank的示意圖。我們把左邊128MB Chip拆開來看,它是由8個Bank組成,每個Bank核心是個一個存儲矩陣,就像一個大方格子陣。這個格子陣有很多列(Column)和很多行(Row),這樣我們想存取某個格子,只需要告知是哪一行哪一列就行了,這也是為什么內存可以隨機存取而硬盤等則是按塊存取的原因。

說到這里,小張來了興致:“我知道,我知道,大學學過,計算機組成原理里面講過,這是存儲單元的行地址線和列地址線,中間那個格子里面是一個Bit!”。小張掌握的知識還不少呢! 但是這里只是有些類似,可以這么想象,但不盡然,CAS#和RAS#只有一根信號線。實際上每個格子的存儲寬度是內存顆粒(Chip)的位寬,在這里由8個Chip組成一個Rank,而CPU尋址寬度是64bit,所以64/8=8bit,即每個格子是1個字節。選擇每個格子也不是簡單的兩組信號,是由一系列信號組成,以這個2GB DDR3為例:

1. 片選(Chip Select)信號,S0#和S1#,每個用於選擇是哪個Rank。

2. Bank地址線,BA0-BA2, 2^3=8,可以選擇8個Bank

3. 列選 (Column Address Select), CAS#,用於指示現在要選通列地址。

4. 行選(Row Address Select),RAS#用於指示現在要選通行地址。

5. 地址線,A0-A13,用於行和列的地址選擇(可並不都用於地址,本處忽略)。

6. 數據線,DQ0-DQ63,用於提供全64bit的數據。

7. 命令,COMMAND,用於傳輸命令,如讀或者寫等等。

注意這里沒有內存顆粒的選擇信號線,只有Rank的選擇信號。在Rank選擇好后,8個內存顆粒一起被選中,共提供64bit的數據。

讀取和寫入數據也稍微復雜點,簡單來說分為以下三步:

1. 行有效。RAS#低電平,CAS#高電平。意味着現在行地址有效,同時在A0-A13傳送地址信號,即2^13個Row可以選擇。

2. 列有效。RAS#高電平,CAS#低電平。意味着列地址有效,這時在A0-A13上傳送的是列地址。沒錯,A0-A13是行列共用的,所以每個格子選擇需要有1和2兩步才能唯一確定。

3. 數據讀出或寫入。根據COMMAND進行讀取或者寫入。在選定好小方格后,就已經確定了具體的存儲單元,剩下的事情就是數據通過數據I/O通道(DQ)輸出到內存總線上了。

這里只介紹隨機訪問, Burst模式這里略過。下圖是個簡單的圖示:

 

時序(Timing)

一氣說了這么多,我不禁口干舌燥,停下來喝了一大口咖啡。小張以為我說完了,着急的問我:“我好像聽懂了,不過那好幾個數字還沒講呢。”。別着急啊,且聽我慢慢道來。正因為訪問一個數據需要大致三步,為了保證信號的完整性,步驟直接要有區隔,一起發出來會造成錯亂,間隔太近也會為采樣帶來難度,容易引入噪音。所以時序非常重要,

下面是個背對背(back-to-back)讀寫的時序圖:

 

時延(Latency)

小張一看到這個圖,不禁大叫:”太復雜了,看得我都犯密集恐懼症了,看不懂!“。沒關系,我們拆開了一個個看。

1. CL: CAS Latency。CL是指CAS發出之后,仍要經過一定的時間才能有數據輸出,從CAS與讀取命令發出到第一筆數據輸出的這段時間,被定義為CL(CAS Latency,CAS時延)。由於CL只在讀取時出現,所以CL又被稱為讀取時延(RL,Read Latency)。也就是我們上面第3步讀取時需要的時間。CL是延遲里面最重要的參數,有時會單獨在內存標簽上標出如CLx。它告訴我們多少個時鍾周期后我們才能拿到數據,CL7的內存會延遲7個周期才能給我們數據,CL9的則要等9個。所以越小我們越能更快的拿到數據。注意這里的周期是真正的周期而不是標注的DDR3 1333MHz的周期,因為一個周期傳輸兩次,真正的周期只是1/2,這里是666MHz。如下圖,是CL7和CL9的例子:

 

如果相同頻率的內存,CL7可以比CL9有22%的效能提高。

2. tRCD:RAS到CAS時延。在發送列讀寫命令時必須要與行有效命令有一個間隔,這是根據芯片存儲陣列電子元件響應時間所制定的延遲。即步驟1和2要間隔的時間。這個間隔當然也是越快越好了,下面是個tRCD=3的例子:

 

你也可以看出這個時間也是激活命令和讀命令的間隔。

3. tRP: 預充電有效周期(Precharge command Period)。在上一次傳輸完成后到下一次行激活前有個預充電過程,要經過一段充電時間才能允許發送RAS。也就是步驟1的准備工作要做多久。下面是個例子:

 

還有兩個類似的時延tRAS和CMD,我看到小張都快睡着了就不講了。總之,所有這些時延共同構成了整體時延,而時延是越小越好。

SPD

說了這么多,小張總算搞懂內存標簽條上的4-4-4-8, 5-5-5-15, 所代表的 CL-tRCD-tRP-tRAS-CMD都是啥意思了。不過小張有點搞不懂,這些數據印在紙上消費者是看懂了(實際上似乎沒多少人了解),可電腦又沒長眼睛,它是怎么知道的呢?其實,每個DIMM在板子上都有塊小的存儲芯片(EEPROM),上面詳細記錄了包括這些的很多參數,還有生產廠家的代碼等等,這也是BIOS為什么能知道我們插了哪種內存的原因。在小張的內存條上,我指給了他看:

 

實際上隨着DDR的一步步進化,這些延遲的時鍾周期個數也在步步提高,但由於頻率的加快,實際上是在時間是在慢慢的減少的。

效能提高的其他手段

看時間還早,我和小張聊起了除了提高頻率,還有什么辦法能夠提高內存存取速度。

1。多通道(Channel)

現代內存控制器都從北橋移入CPU內部,而且內存控制器都可以同時操作多個通道。典型的台式機和筆記本CPU很早就支持雙通道,現在還加入了三通道。如果數據分布在插在不同的通道上的內存條上,內存控制器可以不管上面這些延遲啊時序啊,同時可以讀取他們,速度可以翻倍甚至三倍!小張聽了跳了起來:”我也要翻倍!”。別急,要啟用多通道,首先要插對插槽。現在主板制造商為了讓小白用戶插對內存條,通常用顏色標識內存通道。注意同一個通道顏色不同!所以要把內存插在顏色相同的內存插槽里,才能讓內存占據不同的通道。最好有主板手冊檢查一下,插好后進入BIOS里面看看現在內存狀態是不是多通道模式。

2。Interleave

看着小張躍躍欲試的樣子,我不禁給他潑了盆冷水。幻想美妙,現實殘酷。多通道在很多時候用處並不明顯!因為程序的局部性,一個程序並不會把數據放到各個地方,從而落入另一個DIMM里,往往程序和數據都在一個DIMM里,加上CPU的Cache本身就會把數據幫你預取出來,這個提高就個不明顯了。除非你運行很多巨型任務才行。

“啊,我都是開一個游戲打,對我來說沒啥用處啊,簡直是雞肋!”,小張說。也不盡然,還有種辦法,就是讓同一塊內存分布到不同的通道中去,這種技術叫做Interleaving。這樣無論Cache命中與否都可以同時存取,多通道的技術才能發揮更大的用處。“太好了,要怎么才能開啟這個interleave呢?”,我不禁呵呵了,這個功能一般只有服務器CPU才有,你的i5要是有了,誰去買幾千上萬的服務器CPU呢?

3。Overclock

“你這不是廢話嗎,我要怎么樣才能搭建個發燒機才配有的高速內存呢?”。其實小張可以購買發燒級的內存條。這些內存條DDR3標注達到2133以上!但是要注意,如果我們把這些內存插入一般主板,很有可能會運行在1333或者1600上面,因為這是DDR3規定的最高頻率。好馬配好鞍,要有個能支持超頻內存的主板,在主板BIOS里面升壓升頻才能真正用好這些發燒內存條。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM