既然是講原理,那些“為什么需要RAID6”、“RAID6的優(yōu)勢(shì)”等內(nèi)容就都省去了。直接進(jìn)入枯燥無趣的理論。
  
    一、RAID5和XOR運(yùn)算
  
    為了照顧初學(xué)者,還是先把相關(guān)基本概念介紹一下,老手可以跳過這部分直接看下面。(別低頭!是看本帖下面,想些什么吶~)


    XOR運(yùn)算是數(shù)理邏輯的基本運(yùn)算之一,在課本上的符號(hào)是一個(gè)圓圈里面一個(gè)加號(hào)。實(shí)在懶得用插入符號(hào)功能,大家就湊合著看吧。


    兩個(gè)數(shù)字之間的XOR運(yùn)算定義是:



    (忽然想起試行新車牌的時(shí)候,有些深圳人用三位二進(jìn)制數(shù)標(biāo)記性別。010是男的,101是女的。Sorry,扯遠(yuǎn)了。)


    多個(gè)數(shù)字XOR的時(shí)候,有兩個(gè)特點(diǎn):



    磁盤陣列中的RAID5之所以能夠容錯(cuò),就是利用了XOR運(yùn)算的這些特點(diǎn)。上面例子中的a、b、c、d就可以看作是四顆磁盤上的數(shù)據(jù),其中三個(gè)是應(yīng)用數(shù)據(jù),剩下一個(gè)是校驗(yàn)。碰到故障的時(shí)候,甭管哪個(gè)找不到了,都可以用剩下的三個(gè)數(shù)字XOR一下算出來。


    在實(shí)際應(yīng)用中,陣列控制器一般要先把磁盤分成很多條帶(英文叫Stripe,注意不是Stripper),然后再對(duì)每組條帶做XOR。
  
    見下面第一個(gè)圖:




    掃盲部分就講這么多,再不懂就google吧,滿山遍野都是RAID5算法的介紹。
  
    二、RAID6和Reed-Solomon編碼


    本來想寫成“李德-所羅門編碼”,但那樣就不方便大家一邊看帖子一邊google了。Reed-Solomon編碼是通訊領(lǐng)域中經(jīng)常碰到的一個(gè)算法,已經(jīng)有15年以上的歷史了。(靠!講存儲(chǔ)嘛,跟通訊有個(gè)鳥關(guān)系?)


    其實(shí)很多校驗(yàn)算法都是通訊領(lǐng)域最先研究出來,然后才應(yīng)用到其他領(lǐng)域的。前面說到的XOR算法對(duì)一組數(shù)據(jù)只能產(chǎn)生一個(gè)校驗(yàn),搞通訊的工程師們覺得不夠可靠,于是就研究出很多能對(duì)一組數(shù)據(jù)產(chǎn)生多個(gè)校驗(yàn)的算法。Reed-Solomon編碼是其中應(yīng)用最廣泛的一個(gè),咱們以前經(jīng)常用的ADSL、xDSL、高速M(fèi)odem都有采用。后來手機(jī)、衛(wèi)星電視、數(shù)字電視、CD唱片、DVD、條碼系統(tǒng)、還有……(有完沒完!說存儲(chǔ)呢!)連高級(jí)點(diǎn)兒的服務(wù)器內(nèi)存也用這個(gè)算法做校驗(yàn)和糾錯(cuò)。(總算跟存儲(chǔ)沾上點(diǎn)兒邊~)


    現(xiàn)在存儲(chǔ)的工程師也覺得RAID5中只能容忍一顆磁盤離線不夠理想,需要一種容忍多顆磁盤離線的技術(shù),自然就會(huì)想到Reed-Solomon編碼啦。把這種算法應(yīng)用到存儲(chǔ)中,就可以讓N顆磁盤的空間裝應(yīng)用數(shù)據(jù),M顆磁盤的空間裝校驗(yàn)碼(對(duì)一組N個(gè)數(shù)據(jù)生成M個(gè)校驗(yàn),但實(shí)際上校驗(yàn)碼是分散在所有磁盤上的),這樣只要離線的磁盤不大于M顆,數(shù)據(jù)就不會(huì)丟失。


    Reed-Solomon編碼理論中有一個(gè)公式:


    N + M + 1 = 2的b次方(在電腦里寫公式真是麻煩?。?/P>

    其中b是校驗(yàn)字的位數(shù)。(校驗(yàn)字是生成校驗(yàn)過程需要用的一個(gè)東東,不是最后的校驗(yàn)碼。)舉例來說,如果用8位的字節(jié)做校驗(yàn)字,那么M + N = 255,而RAID6是特指M = 2,這樣N = 253。


    就是說,用8位字節(jié)做校驗(yàn)字的話,理論上一個(gè)RAID6的磁盤組可以容下253顆磁盤。


    當(dāng)然啦,實(shí)際應(yīng)用中,太多的磁盤一起做運(yùn)算會(huì)嚴(yán)重影響性能,所以陣列控制器和芯片的設(shè)計(jì)者都會(huì)把磁盤組的容量限制在16顆左右。(做了這么多無聊算術(shù)題,還是沒提RAID6到底是啥?。┪?!喂!別走啊,很快就講到RAID6的實(shí)現(xiàn)啦。


    賣了這么多關(guān)子,實(shí)在是因?yàn)镽AID6這個(gè)概念所指的意義太混亂。從功能上講,能實(shí)現(xiàn)兩顆磁盤掉線容錯(cuò)的,都叫RAID6。(至少我認(rèn)識(shí)的銷售們都這么認(rèn)為。)但是實(shí)行這一功能的方式卻有很多很多。(沉默3分鐘)


    真的很多!哎喲!別打啊~


    Intel的P+Q RAID6,NetApp的RAID-DP,HP的RAID5-DP,還要很多實(shí)驗(yàn)室中的原型機(jī)都能實(shí)行這個(gè)功能。但是由于機(jī)制不同,各種所謂的RAID6,其性能表現(xiàn)、磁盤負(fù)載分布、錯(cuò)誤恢復(fù)方式都完全不同。


    你讓我從哪說起好哩?
  
    三、基于P+Q的RAID6
  
    在Intel的80333IOP芯片中,有一個(gè)新的引擎叫P+Q單元,是專門用來處理RAID6加速的。詳情請(qǐng)查閱Intel官方網(wǎng)站……(雞蛋、西紅柿、拖鞋。咦!這是誰的臭襪子?)


    對(duì)比RAID5的機(jī)制,Intel的P+Q RAID6是這樣寫磁盤的:
  
    見下面第二個(gè)圖:



    這里每個(gè)條帶中的P,跟RAID5里面的P意義完全一樣,就是同一條帶中除Q以外其它數(shù)據(jù)的XOR運(yùn)算結(jié)果。而Q呢,就是理解這個(gè)技術(shù)的關(guān)鍵所在了。


    咳~咳~聽好了。


    Q是同一條帶中各數(shù)據(jù)的女朋友們進(jìn)行XOR運(yùn)算的結(jié)果。別翻白眼啊,書上就是這么寫的?。∨?,還是英文的,我翻譯給你聽。


    “把條帶中每個(gè)數(shù)據(jù)分別GF一下,然后這些結(jié)果再XOR,就得到Q。”(大哥,你到底懂不懂啊!GF是Galois Field的縮寫,是法國(guó)著名數(shù)學(xué)奇才伽羅瓦發(fā)明的一種數(shù)學(xué)變換。)


    哦,想起來了。伽羅瓦嘛,發(fā)明群論的那個(gè)。生于法國(guó)大革命前,二十出頭就英年早逝,還是為了個(gè)姑娘跟人決斗被打死的。最著名的成果就是給3次以上方程判了死刑。是我人生第二偶像啊……(唐僧!)


    這個(gè)GF變換呢,就是這個(gè)淘氣的伽同學(xué)當(dāng)年為了逃避老師點(diǎn)名,而發(fā)明的一種教室換座位方法。按照這種方法,每個(gè)人都不會(huì)坐在自己的座位上,而且每個(gè)人都肯定會(huì)有座位。而且任意個(gè)同學(xué)的座位號(hào)進(jìn)行XOR運(yùn)算之后,仍然跑不出這個(gè)教室里的座位號(hào)。(這個(gè)伽同學(xué)好像很無聊噢!沒辦法,人家聰明嘛?。?/P>

    扯太遠(yuǎn)啦!回到正題。


    在Intel 80333IOP中存著兩個(gè)表格,分別對(duì)應(yīng)GF正向變換和反向變換。任何一個(gè)8位二進(jìn)制數(shù),都可以直接在表格中查到對(duì)應(yīng)的GF變換結(jié)果。(我還是想把這個(gè)結(jié)果說成是源數(shù)據(jù)的女朋友~)


    這兩個(gè)表格分別在Intel 80333IOP研發(fā)手冊(cè)的第445頁和446頁,不過我估計(jì)大部分人會(huì)懶得去看。也是,看了又能怎么樣呢?反正Intel已經(jīng)把那玩意固化到芯片里了。(哇!都半夜2點(diǎn)了,說完P(guān)+Q RAID6的恢復(fù),我要先zZZ……了。)


    如果一顆磁盤掉線,根本不需要Q用P直接就搞定了,跟RAID5一樣。


    如果兩顆磁盤掉線,又分做兩種情況:



    結(jié)合上面表格的例子,如果磁盤5和磁盤6掉線。那條帶1和條帶2就屬于情況A;而條帶3、4、5和6屬于情況B。


待續(xù)


    本文版權(quán)歸作者及DoSTOR所有,如需轉(zhuǎn)載請(qǐng)與本站聯(lián)系!

分享到

多易

相關(guān)推薦