我們今天來(lái)簡(jiǎn)單討論一下企業(yè)級(jí)內(nèi)存條的Memory ECC。
圖 (1)
圖(1)是一個(gè)帶有ECC的RDIMM,圖中我們已經(jīng)將各個(gè)組件和關(guān)鍵的金手指信號(hào)區(qū)域標(biāo)示出來(lái)。首先,我們來(lái)認(rèn)識(shí)一下這幾個(gè)關(guān)鍵詞: Device:內(nèi)存顆粒,根據(jù)其存放內(nèi)容不同,又分為數(shù)據(jù)顆粒和ECC顆粒。通常有X4,X8和X16,代表每個(gè)顆粒對(duì)外的數(shù)據(jù)線路是4 lane,8 lane和16 lane。
Channel:一個(gè)Channel由一個(gè)或者多個(gè)Rank組成,其寬度由控制器決定。當(dāng)前主流的個(gè)人電腦和服務(wù)器中,一個(gè)Channel的寬度為64bit,可根據(jù)內(nèi)存控制器是否支持ECC而擴(kuò)展額外的8bit。也就是說如果不支持ECC的Channel,其寬度為64bit,而支持ECC的Channel,其寬度為72bit。市面上兩種內(nèi)存條都有銷售。
Rank:一個(gè)Channel里面,同一個(gè)CS(Chip Select)信號(hào)選中的所有Device就是一個(gè)Rank。同一個(gè)Rank中所有的Device共用命令,地址和控制信號(hào)。拿讀操作舉例,內(nèi)存控制器發(fā)起的一個(gè)讀操作,其實(shí)將作用于該Channel的某個(gè)Rank中所有的Device。所有Device的數(shù)據(jù)線共同輸出達(dá)到內(nèi)存控制器所需的寬度。例如,采用X4的顆粒,組成不帶ECC功能的一個(gè)Rank則需要64/4 = 16個(gè)X4的Device。大家可以計(jì)算一下如果采用X8或者X16寬度的顆粒,需要多少個(gè)呢?
注:本文我們將主要以X4的Device來(lái)討論
注:X16的顆粒一般不被用來(lái)組成帶ECC的Rank
Cacheline:Cacheline通常是指是處理器中Cache Unit(緩存模塊)緩存一筆數(shù)據(jù)的標(biāo)準(zhǔn)大小。根據(jù)處理器的不同,Cacheline的大小是不一樣的。當(dāng)前主流的個(gè)人電腦和服務(wù)器中,Cacheline的大小為64 Byte。為了設(shè)計(jì)方便,處理器內(nèi)部搬運(yùn)可被緩存的數(shù)據(jù)也采用同樣的大小64B。為了滿足該需求,一個(gè)Rank被設(shè)計(jì)成了64bit的數(shù)據(jù)位寬,而JEDEC(DDR標(biāo)準(zhǔn)組織)設(shè)計(jì)了burst傳輸。一個(gè)Burst的長(zhǎng)度可以是8,從而一次讀操作,可以讓顆粒一次吐出8筆數(shù)據(jù)。從而達(dá)到64bit X 8 = 64B的大小。具體參考圖(2)。
圖(2)
CE(CorrectableError):可糾正錯(cuò)誤是指硬件(芯片)可以直接糾正的錯(cuò)誤。由于內(nèi)存控制器設(shè)計(jì)不一樣,對(duì)于可糾正錯(cuò)誤的能力可能存在不同。例如,主流x86服務(wù)器的內(nèi)存控制器(支持帶ECC的內(nèi)存條),在一次讀操作中,一個(gè)X4寬度的Device內(nèi)的任意錯(cuò)誤都是可糾正的,包括ECC的Device。如果Rank是X8寬度的Device組成,其糾正能力還是與X4的Device寬度及位置保持一致。在X8的一個(gè)Device中,只有DQ0-3,或者DQ4-7可以被糾正。如果是DQ2-5,雖然是X4寬度但位置與X4時(shí)不對(duì)應(yīng),也無(wú)法糾正。
注:DQ0即D0,或者D0_0,DQ63則是D63,或者D15_3
UCE(Uncorrectable Error):不可糾正錯(cuò)誤是指硬件(芯片)無(wú)法直接糾正的錯(cuò)誤。例如,在一次讀操作中,錯(cuò)誤數(shù)據(jù)位分布在不同X4的Device范圍,以現(xiàn)有內(nèi)存控制設(shè)計(jì)來(lái)看,屬于不可糾正錯(cuò)誤。
下面我們簡(jiǎn)單介紹一下內(nèi)存控制器是如何偵錯(cuò)和糾錯(cuò)的。由于ECC具體算法屬于各家的IP,這里介紹的方法只是幫助大家理解該功能。首先,內(nèi)存控制器能夠糾錯(cuò),就必須先能發(fā)現(xiàn)錯(cuò)誤。如果每次消費(fèi)的數(shù)據(jù)大小是64B,在不增加額外信息的情況下,我們是無(wú)法知道該數(shù)據(jù)是否有改變的,因?yàn)?4B的數(shù)據(jù)可以是任何01的組合,即任意數(shù)據(jù)都是合法的。另一方面,額外的信息需要額外的存儲(chǔ),從成本考慮,這額外信息應(yīng)該越小越好。JEDEC組織提出增加額外8 x 8 = 64bit的數(shù)據(jù)來(lái)幫助一個(gè)64B的數(shù)據(jù)完成ECC。 從物理角度看,一個(gè)X4 Device組成的Rank將會(huì)增加兩個(gè)Device用于ECC。一種可行的做法是,其中一個(gè)Device負(fù)責(zé)存放CRC(Cyclic Redundancy Check)校驗(yàn)信息用于偵錯(cuò),另一個(gè)Device負(fù)責(zé)存放奇偶校驗(yàn)信息(Parity),配合糾正錯(cuò)誤。
Parity:Parity基本功能是發(fā)現(xiàn)保護(hù)數(shù)據(jù)中是否有bit翻轉(zhuǎn)。保護(hù)方法是統(tǒng)計(jì)保護(hù)數(shù)據(jù)中1的個(gè)數(shù),如果是偶校驗(yàn),當(dāng)保護(hù)數(shù)據(jù)中1的個(gè)數(shù)是偶數(shù)時(shí),Parity為0,否則為1,所以Parity只需要一個(gè)bit就能發(fā)現(xiàn)保護(hù)數(shù)據(jù)中是否有一個(gè)bit的數(shù)據(jù)翻轉(zhuǎn)(0到1或者1到0)。當(dāng)然對(duì)于奇數(shù)個(gè)bit都有一樣的檢測(cè)效果。但當(dāng)偶數(shù)bit翻轉(zhuǎn)的時(shí)候,Parity將無(wú)法知道。在了解了Parity基本功能后,我們來(lái)看看內(nèi)存控制器是如何計(jì)算Parity并存放的。如圖(3)所示。
圖(3)
Burst傳輸中每一筆64bit數(shù)據(jù),4bit Parity和4bit CRC的具體對(duì)應(yīng)關(guān)系如下: P0=D0_0+D1_0+D2_0+…D15_0+C0 P1=D0_1+D1_1+D2_1+…D15_1+C1 P2=D0_2+D1_2+D2_2+…D15_2+C2 P3=D0_3+D1_3+D2_3+…D15_3 +C3
注:D15_3為Device15的DQ3信號(hào),從Rank角度看,為圖中的D63
假設(shè)Device 2 在Burst的第三筆數(shù)據(jù)中有bit翻轉(zhuǎn),則無(wú)論是D2_0, D2_1, D2_2, D2_3 或者都錯(cuò)了,請(qǐng)參考圖(4),我們都可以通過Parity bits反算回來(lái),前提是burst的第三筆數(shù)據(jù)中其他Device沒有出現(xiàn)錯(cuò)誤。具體計(jì)算如下:
D2_0=P0(-)(D0_0+D1_0+D3_0…D15_0+C0)
D2_1=P1(-)(D0_1+D1_1+D3_1…D15_1+C1)
D2_2=P2(-)(D0_2+D1_2+D3_2…D15_2+C2)
D2_3=P3(-)(D0_3+D1_3+D3_3…D15_3+C3)
圖(4)
CRC:我們?cè)鯓又雷x取的Cacheline數(shù)據(jù)是正確的還是錯(cuò)誤的?這里將會(huì)用到CRC來(lái)進(jìn)行校驗(yàn)。一種比較簡(jiǎn)單的校驗(yàn)方式就是除法。我們?cè)O(shè)計(jì)一個(gè)除數(shù),讓被保護(hù)數(shù)據(jù)(被除數(shù))去除以這個(gè)除數(shù),然后會(huì)得到商和余數(shù)。通常余數(shù)比設(shè)計(jì)的除數(shù)要小。在存儲(chǔ)一個(gè)Cacheline大小數(shù)據(jù)到內(nèi)存條上的時(shí)候,內(nèi)存控制器會(huì)計(jì)算CRC的值,并存放到CRC的Device中去。讀取的時(shí)候再計(jì)算一遍,然后和內(nèi)存條讀回來(lái)的CRC的值進(jìn)行比較。如果一致,則認(rèn)為數(shù)據(jù)沒有發(fā)生變化。否則,認(rèn)為數(shù)據(jù)出錯(cuò)。 從上述理論可以推出,CRC校驗(yàn)位越多,則偵錯(cuò)能力越強(qiáng)。CRC設(shè)計(jì)不一樣,偵錯(cuò)不同數(shù)據(jù)翻轉(zhuǎn)的能力不同。可能存在數(shù)據(jù)錯(cuò)了,但偵錯(cuò)不了的情況。 既然有漏測(cè)的情況,為什么我們還會(huì)繼續(xù)使用?這就和錯(cuò)誤類型的概率有關(guān)了。通常情況下,一個(gè)bit翻轉(zhuǎn)的可能性比較高,多bit同時(shí)翻轉(zhuǎn)的可能性比較低。多bit翻轉(zhuǎn)在同一個(gè)device里的幾率比較高,多device同時(shí)翻轉(zhuǎn)的概率比較低。 舉個(gè)例子,當(dāng)一個(gè)Cacheline的數(shù)據(jù)從內(nèi)存條里讀出來(lái)后,通過CRC校驗(yàn),我們會(huì)發(fā)現(xiàn)數(shù)據(jù)有可能已經(jīng)發(fā)生改變。這個(gè)時(shí)候,我們先假設(shè)出現(xiàn)了CE(Correctable Error)問題。則通過Parity信息反算Device數(shù)據(jù),需要一個(gè)Device一個(gè)Device的假設(shè),然后重新計(jì)算CRC和之前存儲(chǔ)的CRC進(jìn)行比較。所以最多的情況可能要假設(shè)18次。 如果全部弄完仍然CRC對(duì)不上,則屬于UCE(Uncorrectable Error)問題啦。當(dāng)然,大家會(huì)發(fā)現(xiàn),ECC校驗(yàn)過程會(huì)影響內(nèi)存讀寫延時(shí)。
到這里,大家應(yīng)該了解了Memory ECC的基本算法了,Parity針對(duì)的是每個(gè)Burst,CRC是以半個(gè)CacheLine或者其他大小為單位處理的。如果是跨Device的Error,真的無(wú)法糾錯(cuò)嗎?如果有,請(qǐng)將你的實(shí)現(xiàn)方案發(fā)給我們吧,我們將在下期公布讀者的“可行”方案哦。
-
處理器
+關(guān)注
關(guān)注
68文章
19893瀏覽量
235181 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
87979 -
內(nèi)存條
+關(guān)注
關(guān)注
0文章
153瀏覽量
20049
原文標(biāo)題:真相!企業(yè)級(jí)內(nèi)存條到底牛在哪兒?
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
企業(yè)級(jí)SSD的核心技術(shù)與市場(chǎng)趨勢(shì)

存儲(chǔ)上行,又一家廠商進(jìn)軍企業(yè)級(jí)/汽車級(jí)賽道
如何選擇DDR內(nèi)存條 DDR3與DDR4內(nèi)存區(qū)別
佰維特存推出工業(yè)級(jí)ECC DDR4 SODIMM內(nèi)存條,守護(hù)極端環(huán)境下的工業(yè)存儲(chǔ)需求

十銓科技推出首款工業(yè)級(jí)DDR5 6400MT/s內(nèi)存條
金士頓發(fā)布FURY Renegade DDR5 CUDIMM內(nèi)存條
金百達(dá)、精億、光威這三個(gè)品牌的內(nèi)存條哪個(gè)好?
英睿達(dá)推出首批CUDIMM、CSODIMM內(nèi)存條
電腦內(nèi)存條的作用和功能
內(nèi)存時(shí)鐘和內(nèi)存條有什么不同
主板內(nèi)存故障燈亮?xí)莄pu的問題嗎
內(nèi)存條接觸不良會(huì)導(dǎo)致哪些情況
卓越性能精億內(nèi)存條赤龍銀甲系列DDR4 16G(8GX2) 3200 內(nèi)存條測(cè)評(píng) 值得推薦價(jià)格親民質(zhì)量過硬的國(guó)貨老牌

評(píng)論