【轉】Memory中的Channel/Rank/Bank解析

Memory中的Channel/Rank/Bank解析

最近在看網卡底層驅動的一些資料,被內存bankrankchannel這些關於memory的名詞搞得繞來繞去,網上查了一些資料,說得也不全面。在這裏讓我們一步一步來拆解memory的神祕面紗,從架構到讀寫逐步解開這塊祕密。

發揮性memory分兩種,SRAMDRAM

RAM(Random Access Memory)隨機存取內存,之所以叫做“隨機存取”,是因爲相對於早期現行存儲媒介(磁帶?很久以前的)而言,因爲磁帶的存取是線性的(還記得快進/倒帶 那個滋溜爽),存取時間由目前磁帶位置和目的位置的距離而定(類似數據結構中的線性表)。需要轉動刺頭到應有的位置,因此距離越長,轉的就越久了,讀寫時間也越久。而偉大的RAM沒有這種限制,存取時間爲固定值(類似數組這種下表式訪問,下標就是地址),不會因爲存儲資料在memory中的位置而影響讀取時間。

RAM大致可以分爲兩種:SRAMDRAM,這兩者基本原理上有相同的地方,都是將電荷存儲到記憶體內部,由此針對不同的電荷存儲0 or 1. SRAM(Static Random Access Memory)靜態隨機存儲memory和DRAM(Dynamic Random Access Memory)有幾點不同:SRAM的結構比較複雜,單位面積的容量少,存取速度很快;DRAM則結構簡單,單位面積存儲的容量比較多,存取時間相對SRAM慢,同時DRAM因爲構造比較簡單,存儲的電荷惠隨着時間逐漸消失,因此需要定時再充電(Refresh),以保持電容存儲的資料。

 

由圖中的SRAMDRAM構造可以知道,SRAM採用正反三極管+電容(flip-flop)構造存儲器,DRAM則是採用電容式存儲(md,這兩圖看着好熟悉,就是看不懂早忘了,欲哭無淚)。因爲SRAMDRAM的種種特性上的不同,SRAM比較適合作爲暫存器,配合CPU快速存取使用。DRAM則適合作爲主要的memory記憶體而使用。

易失性存儲器與非易失性存儲器
易失性存儲器/記憶體(Volatile Memory)和非易失性存儲器/記憶體(Non-Volatile Memory)之間的差異在於,斷電之後是否還可以保存內部存儲的資料。揮發性記憶體的資料將會隨着失去電力的供應而消失,而非揮發性記憶體依然可以保存有內部的資料。

內存子系統

DRAM由於構造簡單,高密度,作爲電腦內部的主要記憶體非常適合。但由於主存通常放在CPU之外,從工廠出來的顆粒需要封裝和組合之後纔可以和CPU相連,因此從CPUDRAM顆粒之間依次按層級由大到小分爲channel > DIMM > rank > chip > bank > row/column。(和lz之前想的差不多,就跟先到哪條街道,哪個小區單元,哪個棟樓,幾層幾單元的地址格局一樣)。下面,讓我們來一一說明這些部分:

內存的結構(從上往下,由大到小)

內存從channel到chip的對應關係。這裏特別要注意,rank和內存條的面沒有必然關係,雖然圖中這麼畫了,但是不要誤導大家,就是示意一下,下面會有詳細介紹。

chip 再往下拆分爲 bank

bank 再往下拆分就是一個個的存儲單位,橫排爲row,縱列爲column,每排column的下方都有一個row buffer,用來暫存剛剛讀取出來的某個row排的資料。(是不是很簡單,是不是很像你家小區的格局?Yeah!so easy ~)

Bank 再往下拆分

單個DRAM顆粒內部的功能區塊圖(圖片來自Micron)

 

channelDIMM

從內存控制器出來之後,最先到達的是channel,每個channel都需要配有一組內存控制器,2個channel兩個……以此類推。而每個channel中能夠有很多組DIMM(Dual In-line Memory Module)DIMM就是目前能夠在消費市場上買到的大家平時能看到的內存模組。因爲n多年前的主板必須購買內存顆粒(chip)自己插在主板上(想想知道爲啥那時候大師都厲害了吧,這組成原理在實踐中就得到了鍛鍊),然後發展出SIMM (Single In-line Memory Module),將多組內存顆粒(chip)焊在一塊電路板上,成爲內存模組,再將次電路板插在主板上。接着爲了增加吞吐量,將一條內存模組的位寬從SIMM的32bit升級到DIMM的64bit,這個設計沿用至今。

從內存顆粒過度到SIMM的時代,坊間曾出現替使用者將內存顆粒焊接到SIMM電路板上的私活,因爲當時的內存條非常貴,所以稍微花點小錢就可以把內存顆粒換到新的電腦上。

rankchip

rank指的是連接到同一個cs(Chip Select,片選)的所有內存顆粒chips,內存控制器能夠對同一個rank的所有chips同時進行讀寫操作,而在同一個rankchip也分享同樣的控制信號。以目前的電腦來說,因爲一組channel的位寬是64bit,所以能夠同時讀寫8byte的資料,如果是具有ECC功能的內存控制器和ECC內存模組,那麼一組channel的位寬就是72bit。

rank

rank1和rank2共享同一組addr/command信號線,利用cs片選線選擇欲讀取或是寫入的那一組,之後將存儲內容經由MUX多路器送出。

很多人有錯誤的理解,常以chip的數量或是以內存模組的單/雙面對rank進行判斷,但實際上應該以內存控制器和內存顆粒的規格進行判斷。目前家用PC的內存控制器通道絕大部分是64bit寬,內存顆粒的位寬是8bit。因此8顆顆粒就可以滿足內存控制器的需求,也就是一組rank。但偶爾也有以16bit位寬的內存顆粒製成的內存模組,此時4個顆粒chip就是一組rank

這在採用Intel H61/H81 芯片組 和 傳統單channel的主板時需要特別注意,因爲Intel限制H64/H81每個channel僅能支持2組rank,而不是4組rank,部分主板每個channel又做了2組內存模組插槽,造成部分使用者同組channel放入2條內存模組(內存條)時能夠識別全部的內存容量(對於雙面單rank的內存模組是這樣),然而部分使用者則僅能識別一半的容量(雙面雙rank的內存模組)。

bankrowcolumn

bank再往下分就是實際存儲單位元的電路,一般來說橫向選擇排數的線路稱爲row(row enable, row select, word line),縱向負責傳送信號的線路稱爲column(bitline),每組bank的下方還會有個row buffer(sense amplifer),負責將讀出的row內容暫存,等待column位址送到後輸出正確的位元,以及判斷存儲的內容是0還是1.

一個bank的讀取操作。

 

一個bank的寫入操作。

 

內存的讀寫方式

上圖標明瞭內存的讀寫方式,讀取時首先內存控制器將1組位址現傳到內存上,控制器跟着傳送控制信號;如果是多rank的情況,CS也會送到對應信號選擇的目標rank上。接着由於每個rank是由多個chip組成,每個chip僅負責部分的資料讀取,chip接收到位址信號後,將位址放入內部的row/column解碼器找出對應的bank位址(每家廠商每款產品內部的bank組合可能不同,因此相應地也會略有不同),接着開啓row線,同一排row的內部內容就會流到row buffer內部,row buffer判斷信號爲0或是1之後就輸出存儲內容。

寫入時除了位址資料以外,還會傳送欲寫入的內容至芯片內部的input buffer,同樣的也是按照row/column解碼器找出對應位址之後寫入。

內存控制器和DIMM之間的線路關係

記憶控制器和DIMM之間的線路關係

越多越好,加速讀寫能力

家用電腦的內存控制器已經進入雙通道內存控制器多年,加速原理爲增加位寬,達到同時讀寫更多資料的能力。

另一種增加頻寬的方法就是減少延遲,利用多個chip或是bank達成。一般的內存讀取延遲爲 命令下達 + 內存讀取延遲 + 輸出內容,如果命令下達延遲爲2ns,內存讀取延遲爲10ns,輸出內容延遲爲2ns,那麼讀取兩筆資料的延遲就是 (2+10+2) × 2 = 28ns。

如果能夠將資料拆分到2顆內存顆粒上,那麼這兩筆讀取延遲將降低至2+2+10+2=16ns,因爲不需要等到前面一筆資料的讀取完成才發出下一筆的讀取命令,在第一筆資料進入內存讀取時就可發出。這種概念也可應用到目前的SSD上,較多的ce分裝的快速記憶芯片,通常都比較少ce封裝的芯片來得快。

由時序圖可以知道,下凡此種儘量拆分內存空間的作法,可以大幅減少延遲。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章