黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

深入分析各種raid模式

系統(tǒng) 2364 0

深入分析各種raid模式

  本文從低層原理上,深入透析了目前存在的7種模式的組成原理,結(jié)構(gòu),并深刻分析了各種級(jí)別相對(duì)于單盤(pán)IO速率的變化。

Raid0
?
Raid0是這樣一種模式:我們拿5塊盤(pán)的raid0為例子。



  上圖中5個(gè)豎條,分別代表5個(gè)磁盤(pán)上的一個(gè)extent,也就是豎條的意思,每個(gè)磁盤(pán)被邏輯的劃分為N個(gè)這種extent。然后再在磁盤(pán)相同偏移的extent上,橫向邏輯分割,形成strip,一個(gè)strip橫跨過(guò)的extent個(gè)數(shù),稱為strip lenth,而一個(gè)strip和一個(gè)extent交叉帶,稱為一個(gè)segment,一個(gè)segment中所包含的data block個(gè)數(shù),稱為strip depth。Data block,可以是N倍個(gè)扇區(qū)大小的容量,應(yīng)該可以調(diào)節(jié),或者不可調(diào),隨控制器而定。
  Raid0便是將一系列連續(xù)編號(hào)的data block,分布到多個(gè)物理磁盤(pán)上,擴(kuò)散IO,提高性能。其分布的方式,如圖所示:這個(gè)例子中,條帶深度為4,則0、1、2、3號(hào)data block,被放置到第一個(gè)條帶的第一個(gè)segment中,然后4、5、6、7號(hào)block,放置到第一個(gè)條帶的第二個(gè)segment中,依此類推,條帶1放滿后,繼續(xù)放條帶2。這種特性,稱為“局部連續(xù)”,因?yàn)閎lock只有在一個(gè)segment中是物理連續(xù)的,邏輯連續(xù),就需要跨物理磁盤(pán)了。

  對(duì)外來(lái)說(shuō),參與形成raid0的各個(gè)物理盤(pán),會(huì)組成一個(gè)邏輯上連續(xù),物理上也連續(xù)的虛擬磁盤(pán)。磁盤(pán)控制器對(duì)這個(gè)虛擬磁盤(pán)發(fā)出的指令,都被raid控制器截獲,分析,根據(jù)block映射關(guān)系公式,轉(zhuǎn)換成對(duì)組成raid0的各個(gè)物理盤(pán)的真實(shí)物理IO請(qǐng)求指令,收集或?qū)懭霐?shù)據(jù)之后,再提交給主機(jī)磁盤(pán)控制器。

  Raid0還有另一種非條帶化模式,即寫(xiě)滿其中一塊物理磁盤(pán)之后,再接著寫(xiě)另一塊,直到所有組成磁盤(pán)全部寫(xiě)滿。這種模式,對(duì)IO寫(xiě)沒(méi)有任何優(yōu)化,但是對(duì)IO讀,能提高一定的并發(fā)IO讀幾率。

在進(jìn)一步講述raid0和其他raid級(jí)別之前,我們先來(lái)看一下IO的種類。IO按照可以分為:讀/寫(xiě)IO,大/小塊IO,連續(xù)/隨機(jī)IO,順序/并發(fā)IO。下面我們來(lái)分別介紹每一種IO。

  讀/寫(xiě)IO,這個(gè)就不用多說(shuō)了,讀IO,就是發(fā)指令,從磁盤(pán)讀取某段扇區(qū)的內(nèi)容。指令一般是通知磁盤(pán)開(kāi)始扇區(qū)位置,然后給出需要從這個(gè)初始扇區(qū)往后讀取的連續(xù)扇區(qū)個(gè)數(shù),同時(shí)給出動(dòng)作是讀,還是寫(xiě)。磁盤(pán)收到這條指令,就會(huì)按照指令的要求,讀或者寫(xiě)數(shù)據(jù)。控制器發(fā)出的這種指令+數(shù)據(jù),就是一次IO,讀或者寫(xiě)。

  大/小塊IO,指控制器的指令中給出的連續(xù)讀取扇區(qū)數(shù)目的多少,如果數(shù)目很大,比如128,64等等,就應(yīng)該算是大塊IO,如果很小,比如1,4,8等等,就應(yīng)該算是小塊IO,大塊和小塊之間,沒(méi)有明確的界限。

  連續(xù)/隨機(jī)IO,連續(xù)和隨機(jī),是指本次IO給出的初始扇區(qū)地址,和上一次IO的結(jié)束扇區(qū)地址,是不是完全連續(xù)的,或者相隔不多的,如果是,則本次IO應(yīng)該算是一個(gè)連續(xù)IO,如果相差太大,則算一次隨機(jī)IO。連續(xù)IO,因?yàn)楸敬纬跏忌葏^(qū)和上次結(jié)束扇區(qū)相隔很近,則磁頭幾乎不用換道或換道時(shí)間極短;如果相差太大,則磁頭需要很長(zhǎng)的換道時(shí)間,如果隨機(jī)IO很多,導(dǎo)致磁頭不停換道,效率大大降底。

  順序/并發(fā)IO,這個(gè)的意思是,磁盤(pán)控制器每一次對(duì)磁盤(pán)組發(fā)出的指令套(指完成一個(gè)事物所需要的指令或者數(shù)據(jù)),是一條還是多條。如果是一條,則控制器緩存中的IO隊(duì)列,只能一個(gè)一個(gè)的來(lái),此時(shí)是順序IO;如果控制器可以同時(shí)對(duì)磁盤(pán)組中的多塊磁盤(pán),同時(shí)發(fā)出指令套,則每次就可以執(zhí)行多個(gè)IO,此時(shí)就是并發(fā)IO模式。并發(fā)IO模式提高了效率和速度。

說(shuō)完了4種IO模式,我們?cè)賮?lái)說(shuō)2個(gè)概念:

  IO并發(fā)幾率。單盤(pán),IO并發(fā)幾率為0,因?yàn)橐粔K磁盤(pán)同時(shí)只可以進(jìn)行一次IO。對(duì)于raid0,2塊盤(pán)情況下,條帶深度比較大的時(shí)候(條帶太小不能并發(fā)IO,下面會(huì)講到),并發(fā)2個(gè)IO的幾率為1/2。其他情況請(qǐng)自行運(yùn)算。

  IOPS。一個(gè)IO所用的時(shí)間=尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間。IOPS=IO并發(fā)系數(shù)/(尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間),由于尋道時(shí)間相對(duì)傳輸時(shí)間,大幾個(gè)數(shù)量級(jí),所以影響IOPS的關(guān)鍵因素,就是降底尋道時(shí)間,而在連續(xù)IO的情況下,尋道時(shí)間很短,僅在換磁道時(shí)候需要尋道。在這個(gè)前提下,傳輸時(shí)間越少,IOPS就越高。

  每秒IO吞吐量。顯然,每秒IO吞吐量=IOPS乘以平均IO SIZE。Io size越大,IOPS越高,每秒IO吞吐量就越高。設(shè)磁頭每秒讀寫(xiě)數(shù)據(jù)速度為V,V為定值。則IOPS=IO并發(fā)系數(shù)/(尋道時(shí)間+I(xiàn)O SIZE/V),代入,得每秒IO吞吐量=IO并發(fā)系數(shù)乘IO SIZE乘V/(V乘尋道時(shí)間+I(xiàn)O SIZE)。我們可以看出影響每秒IO吞吐量的最大因素,就是IO SIZE和尋道時(shí)間,IO SIZE越大,尋道時(shí)間越小,吞吐量越高。相比能顯著影響IOPS的因素,只有一個(gè),就是尋道時(shí)間。

  下面我們來(lái)具體分析一個(gè)從上到下訪問(wèn)raid0磁盤(pán)的過(guò)程。假如某一時(shí)刻,主機(jī)控制器發(fā)出指令:讀取 初始扇區(qū)10000
長(zhǎng)度128。Raid控制器接受到這個(gè)指令之后,立即進(jìn)行計(jì)算,根據(jù)對(duì)應(yīng)公式(這個(gè)公式是raid控制器在做邏輯條帶化的時(shí)候制定的)算出10000號(hào)扇區(qū)所對(duì)應(yīng)的物理磁盤(pán)的扇區(qū)號(hào),然后依次計(jì)算出邏輯上連續(xù)的下128個(gè)扇區(qū)所在物理磁盤(pán)的扇區(qū)號(hào),之后,分別向?qū)?yīng)這些扇區(qū)的磁盤(pán),再次發(fā)出指令,這次是真實(shí)的讀取數(shù)據(jù)了,磁盤(pán)接受到指令,各自將數(shù)據(jù)提交給raid控制器,經(jīng)過(guò)控制器在cache種的組合,再提交給主機(jī)控制器。

分析以上過(guò)程,我們發(fā)現(xiàn),如果這128個(gè)扇區(qū),都落在同一個(gè)segment中的話,也就是說(shuō)條帶深度容量大于128個(gè)扇區(qū)的容量(64K),則這次IO就只能真實(shí)的從這一塊物理盤(pán)上讀取,性能和單盤(pán)相比會(huì)減慢,因?yàn)闆](méi)有任何優(yōu)化,反而還增加了raid控制器額外的計(jì)算開(kāi)銷。所以要提升性能,讓一個(gè)IO盡量擴(kuò)散到多塊物理盤(pán)上,就要減小條帶深度,磁盤(pán)數(shù)量不變的條件下,也就是減小條帶大小strip size。讓這個(gè)IO的數(shù)據(jù)被控制器分割,同時(shí)放滿第一個(gè)segment、第二塊物理磁盤(pán)上的第二個(gè)segment。。。。。。。依此類推,這樣就能極大的占用多塊物理盤(pán)。在這里大家可能存在一個(gè)誤區(qū),就是總是以為控制器是先放滿第一個(gè)segment,再放滿第二個(gè)segment,其實(shí)是同時(shí)進(jìn)行的,因?yàn)榭刂破靼衙繅K盤(pán)要寫(xiě)入或者讀取的數(shù)據(jù)都計(jì)算好了,是同時(shí)進(jìn)行的。所以,raid0要提升性能,條帶做的越小越好。但是這里又一個(gè)矛盾出現(xiàn)了,就是條帶太小,導(dǎo)致并發(fā)IO幾率降底,因?yàn)槿绻麠l帶太小,則每次IO一定會(huì)占用大部分物理盤(pán),而隊(duì)列中的IO就只能等待這次IO結(jié)束后才能使用物理盤(pán)。而條帶太大,又不能充分提高傳輸速度,這兩個(gè)是一對(duì)矛盾,按照需求來(lái)采用不同的方式。

我們接著分析raid0相對(duì)于單盤(pán)的性能變化。根據(jù)以上總結(jié)出來(lái)的公式,可以推得以下表格:



RAID0


IOPS



寫(xiě)


并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


Io size/strip size較大


不支持


不支持


提升極小


提升了N乘系數(shù)倍


不支持


不支持


提升極小


提升了N乘系數(shù)倍


Io size/strip size較小


提升了(1+并發(fā)系數(shù))倍


提升了(1+并發(fā)系數(shù)+系數(shù))系數(shù)倍


提升極小


提升了系數(shù)倍


提升了(1+并發(fā)系數(shù))倍


提升了(1+并發(fā)系數(shù)+系數(shù))倍


提升極小


提升了系數(shù)倍


注:并發(fā)IO和IO size/strip size是一對(duì)矛盾,兩者總是對(duì)立。N=組成raid0的磁盤(pán)數(shù)目。系數(shù)=io size/strip size和初始LBA地址所處的strip偏移綜合系數(shù),大于等于1。并發(fā)系數(shù)=并發(fā)IO的數(shù)量


Raid1
Raid1是這樣一種模式,我們拿2塊盤(pán)的例子來(lái)說(shuō)明:



Raid1和raid0不同,raid0對(duì)數(shù)據(jù)沒(méi)有任何保護(hù)措施,每個(gè)block都沒(méi)有備份或者校驗(yàn)保護(hù)措施。Raid對(duì)虛擬邏輯盤(pán)上的每個(gè)物理block,都在物理盤(pán)上有一份鏡像備份。也就是說(shuō)數(shù)據(jù)有兩份。對(duì)于raid1的寫(xiě)IO,速度不但沒(méi)有提升,而且有所下降,因?yàn)閿?shù)據(jù)要同時(shí)向多塊物理盤(pán)寫(xiě),時(shí)間以最慢的你個(gè)為準(zhǔn),因?yàn)槭峭降摹6鴮?duì)于raid1的讀IO請(qǐng)求,不但可以并發(fā),而且就算順序IO的時(shí)候,控制器也可以象raid0一樣,從兩塊物理盤(pán)上同時(shí)讀數(shù)據(jù),提升速度。Raid1沒(méi)有srip的概念。同樣我們總結(jié)出一個(gè)表格:

RAID1


IOPS



寫(xiě)


并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO



提升N或者并發(fā)系數(shù)倍


提升N倍或者并發(fā)系數(shù)


提升極小


提升了N 倍


不支持


事物性IO可并發(fā),提升并發(fā)系數(shù)倍


沒(méi)有提升


沒(méi)有提升


注:raid1沒(méi)有strip的概念。N=組成raid1鏡像物理盤(pán)的數(shù)目。?


在讀、并發(fā)IO的模式下,由于可以并發(fā)N個(gè)IO,每個(gè)IO占用一個(gè)物理盤(pán),這就相當(dāng)于提升了N倍的IOPS。由于每個(gè)IO只獨(dú)占了一個(gè)物理盤(pán),所以速度相對(duì)于單盤(pán)并沒(méi)有改變,所以不管是隨機(jī)還是順序IO,相對(duì)單盤(pán)都不變。
在讀、順序IO、隨機(jī)IO模式下,由于IO不能并發(fā),所以此時(shí)一個(gè)IO可以同時(shí)讀取N個(gè)盤(pán)上的內(nèi)容,但是是在隨機(jī)IO模式下,那么尋道時(shí)間影響很大,縱使同時(shí)分塊讀取多個(gè)磁盤(pán)的內(nèi)容,也架不住尋道時(shí)間的抵消,所以性能提升極小
在讀、順序IO、連續(xù)IO模式下,尋道時(shí)間影響到了最低,此時(shí)傳輸速率為主要矛盾,同時(shí)讀取多塊磁盤(pán)的數(shù)據(jù),時(shí)間減少為1/N,所以性能提升了N倍。
寫(xiě)IO的時(shí)候和讀IO情況相同,就不做分析了。寫(xiě)IO因?yàn)橐瑫r(shí)向每塊磁盤(pán)寫(xiě)入備份數(shù)據(jù),所以不能并發(fā)IO,也不能分塊并行。但是如果控制器把優(yōu)化算法做到極至的話,還是可以并發(fā)IO的,比如控制器從IO隊(duì)列中提取連續(xù)的多個(gè)IO,可以將這些IO合并,并發(fā)寫(xiě)入磁盤(pán)。前提這幾個(gè)IO必須是事物性的,也就是說(shuō)LBA必須連續(xù),不然不能作為一個(gè)大的合并IO,而且和文件系統(tǒng)也有關(guān)系,文件系統(tǒng)碎片越少,并發(fā)幾率越高。

Raid2

raid2是一種比較特殊的raid模式,他是一種專用raid,現(xiàn)在早已被淘汰。他的基本思想是,IO到來(lái)之后,控制器將數(shù)據(jù)分割開(kāi),在每塊物理磁盤(pán)讀或者寫(xiě)1bit。這里有個(gè)疑問(wèn),磁盤(pán)的最小IO單位是扇區(qū),512字節(jié),如何寫(xiě)入1bit呢?其實(shí)這個(gè)寫(xiě)入1bit,并非只寫(xiě)入1bit。我們知道上層IO,可以先經(jīng)過(guò)文件系統(tǒng),然后才通過(guò)磁盤(pán)控制器驅(qū)動(dòng)來(lái)向磁盤(pán)發(fā)出IO,最終的IO大小,都是N倍的扇區(qū),也就是Nx512字節(jié),N大于等于1,不可能發(fā)生N小于1的情況,即使你需要的數(shù)據(jù)只有幾個(gè)字節(jié),那么也同樣要讀出或者寫(xiě)入整個(gè)扇區(qū),也就是512字節(jié)。明白這個(gè)原則之后,我們?cè)賮?lái)看一下raid2中所謂的“每個(gè)磁盤(pán)寫(xiě)1bit”是個(gè)什么概念。IO最小單位為扇區(qū),512字節(jié),我們就拿一個(gè)4塊數(shù)據(jù)盤(pán)+3塊校驗(yàn)盤(pán)的raid2系統(tǒng)給大家來(lái)說(shuō)明一下。這個(gè)環(huán)境中,raid2的一個(gè)條帶大小是4bit(1bit乘4塊數(shù)據(jù)盤(pán)),而IO最小單位是一個(gè)扇區(qū),那么如果分別向每塊盤(pán)寫(xiě)1bit,就需要分別向每塊盤(pán)寫(xiě)一個(gè)扇區(qū),每個(gè)扇區(qū)只包含1bit有效數(shù)據(jù),這顯然是不好的,因?yàn)樘速M(fèi)空間,沒(méi)有意義。因?yàn)镮O數(shù)據(jù)到來(lái)時(shí),我們拿以下IO請(qǐng)求為例:寫(xiě)入 初始扇區(qū)10000長(zhǎng)度1,這個(gè)IO目的是要向LBA10000寫(xiě)入一個(gè)扇區(qū)的數(shù)據(jù),也就是512字節(jié)。Raid2控制器接受到這512字節(jié)的數(shù)據(jù)之后,先將其放入cache,然后計(jì)算需要寫(xiě)入的物理磁盤(pán)的信息,比如定位到物理扇區(qū),分割數(shù)據(jù)成bit,然后一次性寫(xiě)入物理磁盤(pán)扇區(qū)。

也就是說(shuō)第一塊物理盤(pán),控制器會(huì)寫(xiě)入本次IO數(shù)據(jù)的第1、5、9、13、17、21。。。。。。。。。。。等等位,第二塊物理盤(pán)會(huì)寫(xiě)入2、6、10、14、18、22。。。。。。。。。。等等位,其他兩塊物理盤(pán)同樣方式寫(xiě)入。直到這樣將數(shù)據(jù)寫(xiě)完。我們可以計(jì)算出來(lái),這512字節(jié)的數(shù)據(jù)寫(xiě)完之后,此時(shí)每塊物理盤(pán)只包含128字節(jié)的數(shù)據(jù),也就是一個(gè)扇區(qū)的四分之一,那么這個(gè)扇區(qū)剩余的部分,就是空的。如果要利用起這部分空間,那么等下次IO到來(lái)之后,控制器對(duì)數(shù)據(jù)進(jìn)行bit分割,將要填入這些空白區(qū)域的數(shù)據(jù),控制器將首先讀出原來(lái)的數(shù)據(jù),然后和新數(shù)據(jù)合并之后,一并再寫(xiě)回這個(gè)扇區(qū),這樣做效率和速度都大打折扣。我們可以發(fā)現(xiàn),其實(shí)raid2就是將原本連續(xù)的一個(gè)扇區(qū)的數(shù)據(jù),以位為單位,分割存放到不連續(xù)的多塊物理盤(pán)上,因?yàn)檫@樣可以全組并行讀寫(xiě),提高性能。每個(gè)物理磁盤(pán)扇區(qū)其實(shí)是包含了N個(gè)扇區(qū)的“殘?bào)w”。那么如果出現(xiàn)需要更新這個(gè)IO的4個(gè)扇區(qū)中某一個(gè)扇區(qū)的情況,怎么辦?這種情況下,必須先讀出原來(lái)的數(shù)據(jù),和新數(shù)據(jù)合并,然后在一并寫(xiě)入。其實(shí)這種情況出現(xiàn)的非常少。我們知道上層IO的產(chǎn)生,一般是需要先經(jīng)過(guò)os的文件系統(tǒng),然后才到磁盤(pán)控制器這一層的。所以磁盤(pán)控制器產(chǎn)生的IO,一般都是事務(wù)性的,也就是這個(gè)IO中的所有扇區(qū),很大幾率上對(duì)于上層文件系統(tǒng)來(lái)說(shuō),是一個(gè)完整的事務(wù),所以很少會(huì)發(fā)生只針對(duì)這個(gè)事務(wù)中某一個(gè)原子進(jìn)行讀寫(xiě)的情況。這樣的話,每次IO很大幾率都會(huì)包含入這些邏輯上連續(xù)的扇區(qū)的,所以不必?fù)?dān)心經(jīng)常會(huì)發(fā)生那種情況,即便發(fā)生了,控制器也只能按照那種低效率的做法來(lái)做,不過(guò)總體影響較小。但是如果隨機(jī)IO比較多,那么這些IO初始LBA,很有可能就會(huì)命中在一個(gè)兩個(gè)事務(wù)交接的扇區(qū)處,這種情況,就導(dǎo)致速度和效率大大降低了。連續(xù)IO出現(xiàn)這種情況的幾率非常小了。

Raid2因?yàn)槊看巫x寫(xiě)都需要全組磁盤(pán)聯(lián)動(dòng),所以為了最大化其性能,最好保證每塊磁盤(pán)主軸同步,使得同一時(shí)刻每塊磁盤(pán)磁頭所處的扇區(qū)邏輯編號(hào)都一致,并存并取,達(dá)到最佳性能,如果不能同步,則會(huì)產(chǎn)生等待,影響速度。

基于raid2的并存并取的特點(diǎn),raid2不能實(shí)現(xiàn)并發(fā)IO,因?yàn)槊看蜪O都占用了每塊物理磁盤(pán)。

Raid2的校驗(yàn)盤(pán)對(duì)系統(tǒng)不產(chǎn)生瓶頸,但是產(chǎn)生延遲,因?yàn)槎嗔擞?jì)算校驗(yàn)的動(dòng)作。校驗(yàn)位和數(shù)據(jù)位是一同并行寫(xiě)入或者讀取的。Raid2采用海明碼來(lái)校驗(yàn)數(shù)據(jù),這種碼可以判斷修復(fù)一位錯(cuò)誤的數(shù)據(jù),并且使用校驗(yàn)盤(pán)的數(shù)量太多,4塊數(shù)據(jù)盤(pán)需要3塊校驗(yàn)盤(pán),但是隨著數(shù)據(jù)盤(pán)數(shù)量的增多,校驗(yàn)盤(pán)所占的比例會(huì)顯著減小。
Raid2和raid0有些不同,raid0不能保證每次IO都是多磁盤(pán)并行,因?yàn)閞aid0的分塊相對(duì)raid2以位為單位來(lái)說(shuō)是太大了,而raid2由于她每次IO都保證是多磁盤(pán)并行,所以其數(shù)據(jù)傳輸率是單盤(pán)的N倍,為了最好的利用這個(gè)特性,就需要將這個(gè)特性的主導(dǎo)地位體現(xiàn)出來(lái),而根據(jù)IOPS=IO并發(fā)系數(shù)/(尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間),尋道時(shí)間比數(shù)據(jù)傳輸時(shí)間大幾個(gè)數(shù)量級(jí),所以為了體現(xiàn)數(shù)據(jù)傳輸時(shí)間減少這個(gè)優(yōu)點(diǎn),就必須避免尋道時(shí)間的影響,而避免其影響的最佳做法就是:盡量產(chǎn)生連續(xù)IO而不是隨機(jī)IO,所以,raid2最適合連續(xù)IO的情況。另外,根據(jù)每秒IO吞吐量=IO并發(fā)系數(shù)乘IO SIZE乘V/(V乘尋道時(shí)間+I(xiàn)O SIZE),如果將IO size也增大,則每秒IO吞吐量也將顯著提高。所以,raid2最適合的應(yīng)用,就是:產(chǎn)生連續(xù)IO,大塊IO的情況,不言而喻,文件服務(wù),視頻流服務(wù)等等這些應(yīng)用,適合raid2,不過(guò),raid2的缺點(diǎn)太多,比如校驗(yàn)盤(pán)數(shù)量多,算法復(fù)雜等等,它逐漸的被raid3替代了。



RAID2


IOPS



寫(xiě)


順序IO


順序IO


非事務(wù)性隨機(jī)IO


事務(wù)性隨機(jī)IO


連續(xù)IO


非事務(wù)性隨機(jī)IO


事務(wù)性隨機(jī)IO


連續(xù)IO


IO滿足公式條件


提升極小


提升極小


提升N倍


性能降低


提升極小


提升N倍


注:N=數(shù)據(jù)盤(pán)數(shù)量。Raid2不能并發(fā)IO




Raid3
?
由于raid2缺點(diǎn)比較多,比如非事務(wù)性IO對(duì)他的影響,校驗(yàn)盤(pán)數(shù)量太多等等。Raid2的劣勢(shì),就在于它的將數(shù)據(jù)以bit為單位,分割,將原本物理連續(xù)的扇區(qū),轉(zhuǎn)變成物理不連續(xù),邏輯連續(xù)的,這樣就導(dǎo)致了它對(duì)非事務(wù)性IO的效率低下。為了從根本上解決這個(gè)問(wèn)題,raid3出現(xiàn)了。既然要從根本上解決這個(gè)問(wèn)題,首先就是需要拋棄raid2對(duì)扇區(qū)進(jìn)行分散的做法。Raid3保留了扇區(qū)的物理連續(xù)。Raid2將數(shù)據(jù)以bit為單位分割,這樣為了保證每次IO占用全部磁盤(pán)的并行性。而raid3同樣也保留了這個(gè)特點(diǎn),但是沒(méi)有以bit為單位來(lái)分散數(shù)據(jù),而就是以扇區(qū)或者幾個(gè)扇區(qū)為單位來(lái)分散數(shù)據(jù)。Raid3還采用了高效的XOR校驗(yàn)算法,但是這種算法只能判斷數(shù)據(jù)是否有誤,不能判斷出哪一位有誤,更不能修正。XOR校驗(yàn)使得raid3不管多少塊數(shù)據(jù)盤(pán),只需要一塊校驗(yàn)盤(pán)就足夠了。



Raid3的每一個(gè)條帶,其長(zhǎng)度很小,深度為1。這樣的話,每個(gè)segment的大小一般就是1個(gè)扇區(qū)或者幾個(gè)扇區(qū)的容量。以上圖的例子來(lái)看,4塊數(shù)據(jù)盤(pán),一塊校驗(yàn)盤(pán),每個(gè)segment,也就是圖中的一個(gè)block portion,假如為2個(gè)扇區(qū)大小,也就是1k,則整個(gè)條帶大小為4k,如果一個(gè)segment大小為8個(gè)扇區(qū),即4k,則整個(gè)條帶大小為16K。

我們還是用一個(gè)例子來(lái)說(shuō)明raid3的作用機(jī)制。比如,一個(gè)4數(shù)據(jù)盤(pán),1校驗(yàn)盤(pán)的raid3系統(tǒng),segment size為2個(gè)扇區(qū)大小即1k。raid3控制器接受到了這么一個(gè)IO:寫(xiě)入 初始扇區(qū)10000長(zhǎng)度8,即總數(shù)據(jù)量為8乘512字節(jié)=4k。則控制器先定位LBA10000所對(duì)應(yīng)的真實(shí)物理LBA,假如LBA10000恰好在第一個(gè)條帶的第一個(gè)segment的第一個(gè)扇區(qū)上,那么控制器將這個(gè)IO數(shù)據(jù)里的第1、2個(gè)512字節(jié)寫(xiě)入這個(gè)扇區(qū),同一時(shí)刻,第3、4個(gè)512字節(jié)會(huì)被同時(shí)寫(xiě)入這個(gè)條帶的第二個(gè)segment中的兩個(gè)扇區(qū),其后的數(shù)據(jù)同樣被寫(xiě)入第3、4個(gè)segment中,此時(shí)恰好是4k的數(shù)據(jù)量。也就是說(shuō)這4k的IO數(shù)據(jù),同時(shí)被寫(xiě)入了4塊磁盤(pán),每塊磁盤(pán)寫(xiě)入了兩個(gè)扇區(qū),也就是一個(gè)segment,他們是并行寫(xiě)入的,包括校驗(yàn)盤(pán),也是并行寫(xiě)入的,所以raid3的校驗(yàn)盤(pán)沒(méi)有瓶頸,但是有延遲,因?yàn)樵黾恿擞?jì)算校驗(yàn)的開(kāi)銷。但現(xiàn)代控制器一般都使用專用的XOR硬件電路而不是cpu來(lái)計(jì)算xor,這樣就使得延遲降到最低。上面那個(gè)情況是IO size剛好等于一個(gè)條帶大小的時(shí)候,如果IO size小于一個(gè)條帶大小呢?我們接著分析,還是剛才那個(gè)環(huán)境,此時(shí)控制器接收到IO大小為2K的寫(xiě)入請(qǐng)求,也就是4個(gè)連續(xù)扇區(qū),那么控制器就只能同時(shí)寫(xiě)入兩個(gè)磁盤(pán)了,因?yàn)槊總€(gè)盤(pán)上的segment是2個(gè)扇區(qū),其他兩個(gè)磁盤(pán)此時(shí)就是空閑的,也只能得到兩倍的單盤(pán)傳輸速率。我們?cè)賮?lái)看看IO size大于一個(gè)條帶大小的情況,會(huì)發(fā)生什么。還是那個(gè)環(huán)境,控制器收到的IO size=16k。則控制器一次所能并行寫(xiě)入的,是4k,這16k就需要分4批來(lái)寫(xiě)入4個(gè)條帶。其實(shí)這里的分4批寫(xiě)入,不是先后,而還是同時(shí),也就是這16k中的第1、5、9、13k將由控制器連續(xù)寫(xiě)入磁盤(pán)1,第2、6、10、14k,連續(xù)寫(xiě)入磁盤(pán)2,依此類推,直到16k數(shù)據(jù)全部寫(xiě)完,是并行一次寫(xiě)完,這樣校驗(yàn)盤(pán)也可以一次性計(jì)算校驗(yàn)值并且和數(shù)據(jù)一同并行寫(xiě)入。而不是“分批”。

通過(guò)比較,我們發(fā)現(xiàn),與其使得IO size小于一個(gè)條帶的大小,空閑一些磁盤(pán),不如使得Io size大于或者等于條帶大小,使得沒(méi)有磁盤(pán)空余。因?yàn)樯蠈覫O size是不受控的,控制器說(shuō)了不算,但是條帶大小是控制器說(shuō)了算的,所以如果將條帶大小減少到很小,比如2個(gè)扇區(qū),一個(gè)扇區(qū),則每次上層IO,一般情況下都會(huì)占用所有磁盤(pán),進(jìn)行并發(fā)傳輸。可以提供和raid2一樣的傳輸速度,并避免raid2的諸多缺點(diǎn)。Raid3和raid2一樣,不能并發(fā)IO, 因?yàn)橐粋€(gè)IO要占用全部盤(pán),就算IO size小于strip size,因?yàn)樾r?yàn)盤(pán)的獨(dú)享,也不能并發(fā)IO。



RAID3


IOPS



寫(xiě)


并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


Io size大于strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


Io size小于strip size


不支持


事物性IO可并發(fā),提升并發(fā)系數(shù)倍


提升極小


提升了N乘IO size/strip size倍


不支持


事物性IO可并發(fā),提升并發(fā)系數(shù)倍


提升極小


提升了N乘IO size/strip size倍


注:N=組成raid3的數(shù)據(jù)磁盤(pán)數(shù)量。和raid2相同,事物性連續(xù)IO可能并發(fā)。
和raid2一樣,raid3同樣也是最適合連續(xù)大塊IO的環(huán)境,但是它比raid2成本更低,更容易部署。
具體分析:
不管任何形式的raid,只要是面對(duì)隨機(jī)IO,其性能比單盤(pán)沒(méi)有大的優(yōu)勢(shì),因?yàn)閞aid作所的只是提高傳輸速率,并發(fā)IO,容錯(cuò)。隨機(jī)IO只能靠降低單個(gè)物理磁盤(pán)的尋道時(shí)間來(lái)解決。而raid不能優(yōu)化尋道時(shí)間。所以隨機(jī)IO,raid3也同樣沒(méi)有優(yōu)勢(shì)。
連續(xù)IO,因?yàn)閷さ罆r(shí)間的影響因素可以忽略,raid3最拿手,因?yàn)橄髍aid2一樣,raid3可以大大加快數(shù)據(jù)傳輸速率,因?yàn)樗嵌啾P(pán)并發(fā)讀寫(xiě)。所以理論上可以相對(duì)單盤(pán)提高N倍的速率。



Raid4




不管是Raid2還是raid3,他們都是為了大大提高數(shù)據(jù)傳輸率而設(shè)計(jì),而不能并發(fā)IO。諸如數(shù)據(jù)庫(kù)等等應(yīng)用,他們的特點(diǎn)就是隨機(jī)IO和小塊IO。想提高這種環(huán)境的IOPS,根據(jù)公式:IOPS=IO并發(fā)系數(shù)/(尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間),隨機(jī)讀導(dǎo)致尋道時(shí)間很大,靠提高傳輸許率已經(jīng)不是辦法。所以觀察這個(gè)公式,想在隨機(jī)IO頻發(fā)的環(huán)境中提高IOPS,唯一能夠做的,只有提高IO并發(fā)系數(shù),不能并發(fā)IO的,想辦法讓他并發(fā)IO,并發(fā)系數(shù)小的,想辦法提高系數(shù)。
在raid3的基礎(chǔ)上,raid4被發(fā)展起來(lái)。我們分析raid3的性能的時(shí)候,曾經(jīng)提到過(guò)一種情況,就是io size小于strip size的時(shí)候,此時(shí)有磁盤(pán)處于空閑狀態(tài),而如果抓住這個(gè)現(xiàn)象,同時(shí)讓隊(duì)列中的下一個(gè)IO來(lái)利用這些空閑的磁盤(pán),豈不是正好達(dá)到并發(fā)IO的效果了么?所以raid4將一個(gè)segment的大小做的比較大,以至于平均IO size總是小于strip size,這樣就能保證每個(gè)IO少占用磁盤(pán),甚至一個(gè)IO只占用一個(gè)磁盤(pán)。
是的,這個(gè)思想對(duì)于讀IO是對(duì)路子的,但是對(duì)于寫(xiě)IO的話,有一個(gè)很難克服的問(wèn)題,那就是校驗(yàn)盤(pán)的爭(zhēng)用。考慮這樣一種情況:4塊數(shù)據(jù)盤(pán)+1塊校驗(yàn)盤(pán)組成的raid4系統(tǒng),某時(shí)刻一個(gè)IO占用了前兩塊盤(pán)+校驗(yàn)盤(pán),此時(shí)雖然后兩塊是空閑的,可以同時(shí)接受新的IO請(qǐng)求,但是如果接受了新的IO請(qǐng)求,則新IO請(qǐng)求同樣也要使用校驗(yàn)盤(pán),由于一塊物理磁盤(pán)不能同時(shí)處理多個(gè)IO,所以新IO雖然占有了數(shù)據(jù)盤(pán)的寫(xiě)權(quán)限,但是寫(xiě)校驗(yàn)盤(pán)的時(shí)候,仍然要等舊IO寫(xiě)完后,才能寫(xiě)入校驗(yàn),新IO才能完成,這樣的話,就和順序IO無(wú)異了,數(shù)據(jù)盤(pán)可并發(fā)而校驗(yàn)盤(pán)不可并發(fā),這樣不能實(shí)現(xiàn)并發(fā)IO。
下面我們來(lái)說(shuō)幾個(gè)概念。



整條寫(xiě)、重構(gòu)寫(xiě)與讀改寫(xiě)

整條寫(xiě)(Full-stripe Write):整條寫(xiě)需要修改奇偶校驗(yàn)群組中所有的條帶單元,因此新的奇偶校驗(yàn)值可以根據(jù)所有新的條帶數(shù)據(jù)計(jì)算得到。不需要額外的讀、寫(xiě)操作。因此,整條寫(xiě)是最有效的寫(xiě)類型。整條寫(xiě)的例子,比如raid2,raid3。他們每次IO總是幾乎能保證占用所有盤(pán),因此每個(gè)條帶上的每個(gè)segment都被寫(xiě)更新,所以控制器可以直接利用這些更新的數(shù)據(jù)計(jì)算出校驗(yàn)數(shù)據(jù)之后,在數(shù)據(jù)被寫(xiě)入數(shù)據(jù)盤(pán)的同時(shí),將計(jì)算好的校驗(yàn)信息寫(xiě)入校驗(yàn)盤(pán)。

重構(gòu)寫(xiě)(Reconstruct Write):如果要寫(xiě)入的磁盤(pán)數(shù)目超過(guò)陣列磁盤(pán)數(shù)目的一半,采取重構(gòu)寫(xiě)方式。在重構(gòu)寫(xiě)中,從這個(gè)條帶中不需要修改的segment中讀取原來(lái)的數(shù)據(jù),再和本條帶中所有需要修改的segment上的新數(shù)據(jù)計(jì)算奇偶校驗(yàn)值,并將新的segment數(shù)據(jù)和沒(méi)有更改過(guò)的segment數(shù)據(jù)以及新的奇偶校驗(yàn)值一并寫(xiě)入。顯然,重構(gòu)寫(xiě)要牽涉更多的I/O操作,因此效率比整條寫(xiě)低。重構(gòu)寫(xiě)的例子,比如raid4中,如果數(shù)據(jù)盤(pán)為8塊,某時(shí)刻一個(gè)IO只更新了一個(gè)條帶的6個(gè)segment,剩余兩個(gè)沒(méi)有更新,則重構(gòu)寫(xiě)模式下,會(huì)將沒(méi)有被更新的兩個(gè)segment的數(shù)據(jù)讀出,和需要更新的前6個(gè)segment的數(shù)據(jù)計(jì)算出校驗(yàn)數(shù)據(jù),然后將這8個(gè)segment連同校驗(yàn)數(shù)據(jù)一并寫(xiě)入磁盤(pán)。可以看出,這個(gè)操作只是多出了讀兩個(gè)segment中數(shù)據(jù)的操作。

讀改寫(xiě)(Read-Modify Write):如果要寫(xiě)入的磁盤(pán)數(shù)目不足陣列磁盤(pán)數(shù)目的一半,采取讀改寫(xiě)方式。讀改寫(xiě)過(guò)程如下:(1)從需要修改的segment上讀取舊的數(shù)據(jù);(2)從條帶上讀取舊的奇偶校驗(yàn)值;(3)根據(jù)舊數(shù)據(jù)、舊校驗(yàn)值和需要修改的segment上的新數(shù)據(jù)計(jì)算這個(gè)條帶上的新的校驗(yàn)值;(4)寫(xiě)入新的數(shù)據(jù)和新的奇偶校驗(yàn)值。這個(gè)過(guò)程中包含讀取、修改、寫(xiě)入的一個(gè)循環(huán)周期,因此稱為讀改寫(xiě)。讀改寫(xiě)計(jì)算新校驗(yàn)值的公式為: 新數(shù)據(jù)的校驗(yàn)數(shù)據(jù)=(老數(shù)據(jù) ?EOR? 新數(shù)據(jù)) ?EOR? 老校驗(yàn)數(shù)據(jù) 。如果待更新的segment已經(jīng)超過(guò)了條帶中總segment數(shù)量的一半,則此時(shí)不適合使用讀改寫(xiě),因?yàn)樽x改寫(xiě)需要讀出這些segment中的數(shù)據(jù)和校驗(yàn)數(shù)據(jù),而如果采用重構(gòu)寫(xiě),只需要讀取剩余不準(zhǔn)備更新數(shù)據(jù)的segment中的數(shù)據(jù)即可,而后者數(shù)量比前者要少,所以超過(guò)一半,用重構(gòu)寫(xiě),不到一半,用讀改寫(xiě)。整條更新,就用整條寫(xiě)。 寫(xiě)效率:整條寫(xiě) > 重構(gòu)寫(xiě) > 讀改寫(xiě)

明白了這些概念之后,我們就可以繼續(xù)深入理解raid4了。如果僅僅根據(jù)爭(zhēng)用校驗(yàn)盤(pán)來(lái)下結(jié)論說(shuō)raid4不支持并發(fā)IO,在經(jīng)過(guò)了以上三個(gè)概念的描述之后,看來(lái)顯然是片面的。我們?cè)O(shè)想這樣一種情形,某時(shí)刻一個(gè)IO只占用了全部磁盤(pán)的幾塊盤(pán),另一些磁盤(pán)空閑,如果此時(shí)讓隊(duì)列中下一個(gè)IO等待的話,那么當(dāng)然不可實(shí)現(xiàn)并發(fā)IO。此時(shí)我們考慮:如果隊(duì)列中有這樣一個(gè)IO,它需要更新的LBA目標(biāo)和正在進(jìn)行的IO恰好在同一條帶上,并且處于空閑磁盤(pán),而又不沖突,那么此時(shí)我們恰好就可以讓這個(gè)IO也搭一下正在進(jìn)行的IO的順風(fēng)車,反正都是要更新這個(gè)條帶的校驗(yàn)segment,與其兩個(gè)IO先后更新,不如讓他們同時(shí)更新各自的數(shù)據(jù)segment,而控制器負(fù)責(zé)計(jì)算本條帶的校驗(yàn)塊。這樣就完美的達(dá)到了IO并發(fā)。但是,有個(gè)問(wèn)題,這種情況遇到的幾率真是小之又小。即便如此,控制器如果可以對(duì)隊(duì)列中的IO目標(biāo)LBA進(jìn)行掃描,將目標(biāo)處于同一條帶的IO,讓其并發(fā)寫(xiě)入,這就多少類似NCQ技術(shù)了,不過(guò)這種技術(shù)需要上層軟件的配合,因?yàn)閬y序IO,會(huì)失去事務(wù)的順序性,所以還需要上層軟件作一些處理。

?

除了在控制器內(nèi)部實(shí)現(xiàn)這種算法之外,我們還可以直接在上層來(lái)實(shí)現(xiàn)這種模式。上層就是指操作系統(tǒng)的文件系統(tǒng)。因?yàn)槲募倒芾碇讓哟疟P(pán)。文件系統(tǒng)決定數(shù)據(jù)寫(xiě)往磁盤(pán)上的哪些扇區(qū)。所以完全可以在文件系統(tǒng)這個(gè)層次上,將兩個(gè)不同事物的IO寫(xiě)操作,盡量放到相同的條帶上,也就是說(shuō),比如一個(gè)條帶大小為16k,可以前8k放一個(gè)IO的數(shù)據(jù),后8k放也另一個(gè)IO的數(shù)據(jù),這兩個(gè)IO在經(jīng)過(guò)文件系統(tǒng)的計(jì)算之后,經(jīng)由磁盤(pán)控制器驅(qū)動(dòng)程序,向磁盤(pán)發(fā)出同時(shí)寫(xiě)入整個(gè)條帶的操作,這樣就構(gòu)成了整條寫(xiě),如果實(shí)在不能占滿整條,那么也應(yīng)該盡量達(dá)成重構(gòu)寫(xiě)模式,這樣不但并發(fā)了IO,還使得寫(xiě)效率增加。這種在文件系統(tǒng)專門為raid4做出優(yōu)化的方案,最點(diǎn)型的就是netapp公司的磁盤(pán)陣列操作系統(tǒng)data ontap,這個(gè)操作系統(tǒng)中文件系統(tǒng)模塊稱為WAFL。WAFL文件系統(tǒng)的設(shè)計(jì)方式確保能夠最大限度地減少校驗(yàn)盤(pán)尋址操作。 上圖右半部對(duì)比顯示了WAFL如何分配同樣的數(shù)據(jù)塊,從而使得RAID 4更加有效。 WAFL總是把相關(guān)的數(shù)據(jù)塊寫(xiě)到彼此鄰近的條帶中,消除校驗(yàn)盤(pán)上的長(zhǎng)時(shí)間尋址操作。只要可能,WAFL也把多重?cái)?shù)據(jù)塊寫(xiě)到同樣的條帶中,從而進(jìn)一步減少校驗(yàn)盤(pán)上的阻塞。FFS在上圖左半部中使用六道獨(dú)立的條帶,因此致使六個(gè)校驗(yàn)盤(pán)塊需要更新。 上圖右半部中,WAFL使用僅僅3道條帶,即只有三個(gè)校驗(yàn)塊需要更新。從而大大提高了RAID性能,消除了校驗(yàn)盤(pán)瓶頸。

?



RAID4


IOPS



寫(xiě)


特別優(yōu)化的并發(fā)IO


順序IO


特別優(yōu)化的并發(fā)IO


順序IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


Io size/strip size較大


沖突


沖突


提升極小


提升了N倍


沖突


沖突


沒(méi)有提升


提升了N倍


Io size/strip size較小


提升極小


提升并發(fā)系數(shù)倍


幾乎沒(méi)有提升


幾乎沒(méi)有提升


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)乘N倍


性能降底


性能降底


注:N為raid4數(shù)據(jù)盤(pán)數(shù)量。Io size/strip size太大則并發(fā)IO幾率很小。
值得注意的是,如果io size/strip size的值太小,則順序IO讀,不管是連續(xù)還是隨機(jī)IO,幾乎都沒(méi)有提升。順序IO寫(xiě),性能下降,因?yàn)閕o size很小,又是順序IO,則只能進(jìn)行讀改寫(xiě),性能降底不少。
所以,如果要使用raid4,不進(jìn)行特別優(yōu)化,是不行的,至少要讓他可以進(jìn)行并發(fā)IO。我們觀察表格可知,并發(fā)IO模式下,性能都有所提升。然而如果要優(yōu)化到并發(fā)幾率很高,實(shí)則不容易。目前只有netapp的WAFL文件系統(tǒng)還在使用raid4,其他產(chǎn)品均未見(jiàn)使用。面臨淘汰,取而代之的是擁有高并發(fā)幾率的raid5系統(tǒng)。



Raid5


為了解決raid4系統(tǒng)不能并發(fā)IO困難的窘境,raid5相應(yīng)而出。Raid4并發(fā)困難,是因?yàn)樗男r?yàn)盤(pán)爭(zhēng)用的問(wèn)題,如果能找到一種機(jī)制,能有效解決這個(gè)問(wèn)題,則實(shí)現(xiàn)并發(fā)就會(huì)非常容易。Raid5恰恰解決了校驗(yàn)盤(pán)爭(zhēng)用這個(gè)問(wèn)題。Raid5采用分布式校驗(yàn)盤(pán)的做法,將校驗(yàn)盤(pán)打散在raid組中的每塊磁盤(pán)上。如圖所示。每個(gè)條帶都有一個(gè)校驗(yàn)segment,但是不同條帶中其位置不同,在相鄰條帶之間循環(huán)分布。為了保證并發(fā)IO,raid5同樣將條帶大小做的較大,以保證每次IO數(shù)據(jù)不會(huì)占滿整個(gè)條帶,造成隊(duì)列其他IO等待。所以,raid5如果要保證高并發(fā)率,那么每個(gè)IO幾乎都是讀改寫(xiě)模式,尤其是在隨機(jī)IO的情況下,所以raid5擁有較高的寫(xiě)懲罰,但是在隨機(jī)IO頻發(fā)的環(huán)境下,仍然能保持較高的IOPS。
們來(lái)分析一下raid5具體的作用機(jī)制。以上圖為例的環(huán)境,條帶大小80k,每個(gè)segment大小16k。某一時(shí)刻,上層產(chǎn)生一個(gè)寫(xiě)IO:寫(xiě)入 初始扇區(qū)10000
長(zhǎng)度8,即寫(xiě)入4k的數(shù)據(jù)。控制器收到這個(gè)IO之后,首先定位真實(shí)LBA地址,假設(shè)定位到了第1個(gè)條帶的第2個(gè)segment(位于圖中的磁盤(pán)2)的第1個(gè)扇區(qū)(僅僅是假設(shè)),則控制器首先對(duì)這個(gè)segment所在的磁盤(pán)發(fā)起IO寫(xiě)請(qǐng)求,讀出這8個(gè)扇區(qū)中原來(lái)的數(shù)據(jù)到cache,與此同時(shí)控制器也向這個(gè)條帶的校驗(yàn)segment所在的磁盤(pán)(即圖中的磁盤(pán)1)發(fā)起IO讀請(qǐng)求,讀出對(duì)應(yīng)的校驗(yàn)扇區(qū)數(shù)據(jù)并保存到cache,隨后利用XOR校驗(yàn)電路來(lái)計(jì)算新的校驗(yàn)數(shù)據(jù),利用公式: 新數(shù)據(jù)的校驗(yàn)數(shù)據(jù)=(老數(shù)據(jù) ?EOR? 新數(shù)據(jù)) ?EOR? 老校驗(yàn)數(shù)據(jù) 。現(xiàn)在cache中存在:老數(shù)據(jù),新數(shù)據(jù),老校驗(yàn)數(shù)據(jù),新校驗(yàn)數(shù)據(jù)。然后控制器立即再次向相應(yīng)的磁盤(pán)同時(shí)發(fā)起IO寫(xiě)請(qǐng)求,將新數(shù)據(jù)寫(xiě)入數(shù)據(jù)segment,將新校驗(yàn)數(shù)據(jù)寫(xiě)入校驗(yàn)segment,并刪除老數(shù)據(jù)和老校驗(yàn)數(shù)據(jù)。
在上述過(guò)程中,這個(gè)IO占用的,始終只有1、2兩塊盤(pán),因?yàn)樗碌臄?shù)據(jù)segment我們假設(shè)位于2盤(pán)的1條帶的2號(hào)segment,而這個(gè)條帶對(duì)應(yīng)的校驗(yàn)segment位于1盤(pán),自始至終其他任何磁盤(pán)都沒(méi)有用到。那么如果此時(shí)隊(duì)列中有這么一個(gè)IO,他的LBA初始目標(biāo)假如位于圖中下方紅框所示的數(shù)據(jù)segment中(4盤(pán)),IO長(zhǎng)度也不超過(guò)segment的大小,而這個(gè)條帶對(duì)應(yīng)的校驗(yàn)segment位于3盤(pán)上,這兩塊盤(pán)未被其他任何IO占用,所以,此時(shí)控制器就可以并發(fā)的處理這個(gè)IO,和上方紅框所示的IO,達(dá)到并發(fā)。
Raid5相對(duì)于經(jīng)過(guò)特別優(yōu)化的raid4來(lái)說(shuō),在底層就實(shí)現(xiàn)了并發(fā),可以脫離文件系統(tǒng)的干預(yù),任何文件系統(tǒng)的IO,都可以實(shí)現(xiàn)高并發(fā)幾率,而不像基于wafl文件系統(tǒng)的raid4,需要在文件系統(tǒng)上規(guī)劃計(jì)算出并發(fā)環(huán)境。
Raid5磁盤(pán)數(shù)量越多,可并發(fā)的幾率就越大。

RAID5


IOPS



寫(xiě)


并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


Io size近似strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


IO size大于segment size重構(gòu)寫(xiě)


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


幾乎沒(méi)有提升


提升了IO size/segment size倍


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


性能下降


提升極小


Io size小于segment size讀改寫(xiě)


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


提升極小


沒(méi)有提升


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


性能下降


性能下降


raid5最適合小塊IO,并發(fā)IO的情況下,性能都較單盤(pán)有所提升。


Raid6
?
raid6之前的任何raid級(jí)別,最多能保障在壞掉一塊盤(pán)的時(shí)候,數(shù)據(jù)仍然可以訪問(wèn),但是如果同時(shí)壞掉兩塊盤(pán),則數(shù)據(jù)將會(huì)丟失。為了增加raid5的保險(xiǎn)系數(shù),raid6被創(chuàng)立。Raid6比raid5多增加了一塊校驗(yàn)盤(pán),同時(shí)也是分布打散在每塊盤(pán)上,用另一個(gè)方程式來(lái)計(jì)算新的校驗(yàn)數(shù)據(jù),這樣,raid6同時(shí)在一個(gè)條帶上保存了兩份數(shù)學(xué)上不相關(guān)的校驗(yàn)數(shù)據(jù),這樣能夠保證同時(shí)壞兩塊盤(pán)的情況下,數(shù)據(jù)依然可以通過(guò)聯(lián)立這兩個(gè)數(shù)學(xué)關(guān)系等式來(lái)求解丟失的數(shù)據(jù)。Raid6較raid5在寫(xiě)的時(shí)候,會(huì)同時(shí)讀取或者寫(xiě)入額外的一份校驗(yàn)數(shù)據(jù),不過(guò)由于是并行同時(shí)操作,所以比raid5慢不了多少。其他特性和raid5類似。

RAID6


IOPS



寫(xiě)


并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


隨機(jī)IO


連續(xù)IO


Io size近似strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


IO size大于segment size重構(gòu)寫(xiě)


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


幾乎沒(méi)有提升


幾乎沒(méi)有提升


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


性能下降


提升極小


Io size小于segment size讀改寫(xiě)


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


提升極小


沒(méi)有提升


提升并發(fā)系數(shù)倍


提升并發(fā)系數(shù)倍


性能下降


性能下降



深入分析各種raid模式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論