亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

深入分析各種raid模式

系統(tǒng) 1891 0

深入分析各種raid模式

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

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



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

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

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

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

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

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

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

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

說完了4種IO模式,我們再來說2個概念:

  IO并發(fā)幾率。單盤,IO并發(fā)幾率為0,因為一塊磁盤同時只可以進行一次IO。對于raid0,2塊盤情況下,條帶深度比較大的時候(條帶太小不能并發(fā)IO,下面會講到),并發(fā)2個IO的幾率為1/2。其他情況請自行運算。

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

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

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

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

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



RAID0


IOPS




并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機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是一對矛盾,兩者總是對立。N=組成raid0的磁盤數(shù)目。系數(shù)=io size/strip size和初始LBA地址所處的strip偏移綜合系數(shù),大于等于1。并發(fā)系數(shù)=并發(fā)IO的數(shù)量


Raid1
Raid1是這樣一種模式,我們拿2塊盤的例子來說明:



Raid1和raid0不同,raid0對數(shù)據(jù)沒有任何保護措施,每個block都沒有備份或者校驗保護措施。Raid對虛擬邏輯盤上的每個物理block,都在物理盤上有一份鏡像備份。也就是說數(shù)據(jù)有兩份。對于raid1的寫IO,速度不但沒有提升,而且有所下降,因為數(shù)據(jù)要同時向多塊物理盤寫,時間以最慢的你個為準,因為是同步的。而對于raid1的讀IO請求,不但可以并發(fā),而且就算順序IO的時候,控制器也可以象raid0一樣,從兩塊物理盤上同時讀數(shù)據(jù),提升速度。Raid1沒有srip的概念。同樣我們總結(jié)出一個表格:

RAID1


IOPS




并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO



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


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


提升極小


提升了N 倍


不支持


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


沒有提升


沒有提升


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


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

Raid2

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

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

Raid2因為每次讀寫都需要全組磁盤聯(lián)動,所以為了最大化其性能,最好保證每塊磁盤主軸同步,使得同一時刻每塊磁盤磁頭所處的扇區(qū)邏輯編號都一致,并存并取,達到最佳性能,如果不能同步,則會產(chǎn)生等待,影響速度。

基于raid2的并存并取的特點,raid2不能實現(xiàn)并發(fā)IO,因為每次IO都占用了每塊物理磁盤。

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



RAID2


IOPS




順序IO


順序IO


非事務(wù)性隨機IO


事務(wù)性隨機IO


連續(xù)IO


非事務(wù)性隨機IO


事務(wù)性隨機IO


連續(xù)IO


IO滿足公式條件


提升極小


提升極小


提升N倍


性能降低


提升極小


提升N倍


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




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



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

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

通過比較,我們發(fā)現(xiàn),與其使得IO size小于一個條帶的大小,空閑一些磁盤,不如使得Io size大于或者等于條帶大小,使得沒有磁盤空余。因為上層IO size是不受控的,控制器說了不算,但是條帶大小是控制器說了算的,所以如果將條帶大小減少到很小,比如2個扇區(qū),一個扇區(qū),則每次上層IO,一般情況下都會占用所有磁盤,進行并發(fā)傳輸。可以提供和raid2一樣的傳輸速度,并避免raid2的諸多缺點。Raid3和raid2一樣,不能并發(fā)IO, 因為一個IO要占用全部盤,就算IO size小于strip size,因為校驗盤的獨享,也不能并發(fā)IO。



RAID3


IOPS




并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機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ù)磁盤數(shù)量。和raid2相同,事物性連續(xù)IO可能并發(fā)。
和raid2一樣,raid3同樣也是最適合連續(xù)大塊IO的環(huán)境,但是它比raid2成本更低,更容易部署。
具體分析:
不管任何形式的raid,只要是面對隨機IO,其性能比單盤沒有大的優(yōu)勢,因為raid作所的只是提高傳輸速率,并發(fā)IO,容錯。隨機IO只能靠降低單個物理磁盤的尋道時間來解決。而raid不能優(yōu)化尋道時間。所以隨機IO,raid3也同樣沒有優(yōu)勢。
連續(xù)IO,因為尋道時間的影響因素可以忽略,raid3最拿手,因為象raid2一樣,raid3可以大大加快數(shù)據(jù)傳輸速率,因為他是多盤并發(fā)讀寫。所以理論上可以相對單盤提高N倍的速率。



Raid4




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



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

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

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

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

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

?

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

?



RAID4


IOPS




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


順序IO


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


順序IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


Io size/strip size較大


沖突


沖突


提升極小


提升了N倍


沖突


沖突


沒有提升


提升了N倍


Io size/strip size較小


提升極小


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


幾乎沒有提升


幾乎沒有提升


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


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


性能降底


性能降底


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



Raid5


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

RAID5


IOPS




并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


Io size近似strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


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


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


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


幾乎沒有提升


提升了IO size/segment size倍


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


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


性能下降


提升極小


Io size小于segment size讀改寫


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


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


提升極小


沒有提升


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


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


性能下降


性能下降


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


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

RAID6


IOPS




并發(fā)IO


順序IO


并發(fā)IO


順序IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


隨機IO


連續(xù)IO


Io size近似strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


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


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


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


幾乎沒有提升


幾乎沒有提升


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


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


性能下降


提升極小


Io size小于segment size讀改寫


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


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


提升極小


沒有提升


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


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


性能下降


性能下降



深入分析各種raid模式


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国内久久精品视频 | 五月天色婷婷在线 | 九九精品视频在线观看九九 | 香港aa三级久久三级不卡 | 久久影院精品 | 国产精品久久久精品视频 | 中文字幕亚洲一区二区三区 | 视频一区在线 | 爱爱99 | 天天天天天天操 | 免费人成在线观看网站品爱网 | 免费国产不卡午夜福在线观看 | 欧美精品 日韩 | 奇米四色狠狠 | 国内精品视频免费观看 | 99视频在线观看免费视频 | 久久久成人啪啪免费网站 | 69色视频日韩在线视频 | 久久精品影院永久网址 | 亚洲国产欧美91 | 国产精品国产亚洲精品看不卡 | 国产精品久久久久久久毛片 | 97在线视| 久久久精品波多野结衣 | 国产精品免费久久 | 亚洲精品一二三四区 | 夜夜骑日日操 | 国产精品久久亚洲不卡4k岛国 | 欧美日韩视频在线成人 | 日韩亚射吧 | 热综合一本伊人久久精品 | 亚洲精品久久久久久久网站 | 中文字幕亚洲一区婷婷 | 成人欧美一区二区三区黑人妖 | 国产亚洲福利精品一区 | 成人国产一区 | 国产成+人+综合+亚洲不卡 | 欧美日韩在线成人免费视频大全 | 99国产成人精品2021 | 日本一级特黄毛片免费视频9 | 四虎影视com88|