欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

深入分析各種raid模式

系統 1964 0

深入分析各種raid模式

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

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



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

  對外來說,參與形成raid0的各個物理盤,會組成一個邏輯上連續,物理上也連續的虛擬磁盤。磁盤控制器對這個虛擬磁盤發出的指令,都被raid控制器截獲,分析,根據block映射關系公式,轉換成對組成raid0的各個物理盤的真實物理IO請求指令,收集或寫入數據之后,再提交給主機磁盤控制器。

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

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

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

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

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

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

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

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

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

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

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

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

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



RAID0


IOPS




并發IO


順序IO


并發IO


順序IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


Io size/strip size較大


不支持


不支持


提升極小


提升了N乘系數倍


不支持


不支持


提升極小


提升了N乘系數倍


Io size/strip size較小


提升了(1+并發系數)倍


提升了(1+并發系數+系數)系數倍


提升極小


提升了系數倍


提升了(1+并發系數)倍


提升了(1+并發系數+系數)倍


提升極小


提升了系數倍


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


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



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

RAID1


IOPS




并發IO


順序IO


并發IO


順序IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO



提升N或者并發系數倍


提升N倍或者并發系數


提升極小


提升了N 倍


不支持


事物性IO可并發,提升并發系數倍


沒有提升


沒有提升


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


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

Raid2

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

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

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

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

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



RAID2


IOPS




順序IO


順序IO


非事務性隨機IO


事務性隨機IO


連續IO


非事務性隨機IO


事務性隨機IO


連續IO


IO滿足公式條件


提升極小


提升極小


提升N倍


性能降低


提升極小


提升N倍


注:N=數據盤數量。Raid2不能并發IO




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



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

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

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



RAID3


IOPS




并發IO


順序IO


并發IO


順序IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


Io size大于strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


Io size小于strip size


不支持


事物性IO可并發,提升并發系數倍


提升極小


提升了N乘IO size/strip size倍


不支持


事物性IO可并發,提升并發系數倍


提升極小


提升了N乘IO size/strip size倍


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



Raid4




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



整條寫、重構寫與讀改寫

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

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

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

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

?

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

?



RAID4


IOPS




特別優化的并發IO


順序IO


特別優化的并發IO


順序IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


Io size/strip size較大


沖突


沖突


提升極小


提升了N倍


沖突


沖突


沒有提升


提升了N倍


Io size/strip size較小


提升極小


提升并發系數倍


幾乎沒有提升


幾乎沒有提升


提升并發系數倍


提升并發系數乘N倍


性能降底


性能降底


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



Raid5


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

RAID5


IOPS




并發IO


順序IO


并發IO


順序IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


Io size近似strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


IO size大于segment size重構寫


提升并發系數倍


提升并發系數倍


幾乎沒有提升


提升了IO size/segment size倍


提升并發系數倍


提升并發系數倍


性能下降


提升極小


Io size小于segment size讀改寫


提升并發系數倍


提升并發系數倍


提升極小


沒有提升


提升并發系數倍


提升并發系數倍


性能下降


性能下降


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


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

RAID6


IOPS




并發IO


順序IO


并發IO


順序IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


隨機IO


連續IO


Io size近似strip size


不支持


不支持


提升極小


提升了N倍


不支持


不支持


提升極小


提升了N倍


IO size大于segment size重構寫


提升并發系數倍


提升并發系數倍


幾乎沒有提升


幾乎沒有提升


提升并發系數倍


提升并發系數倍


性能下降


提升極小


Io size小于segment size讀改寫


提升并發系數倍


提升并發系數倍


提升極小


沒有提升


提升并發系數倍


提升并發系數倍


性能下降


性能下降



深入分析各種raid模式


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品毛片久久久久久 | 天天干天天摸 | 在线一区观看 | 99热这里都是国产精品 | 玖玖国产 | 6080yy精品一区二区三区 | 在线国产一区 | 成人在线视频网站 | 亚洲一区国产视频 | 欧美精品成人免费视频 | 一级黄色毛片视频 | 国产嘿咻| 国产亚洲第一伦理第一区 | av激情影院| 久久久9999久久精品小说 | 久久久久久久久女黄 | 黄网站涩免费蜜桃网站 | 免费国产成人午夜在线观看 | 久久性| 久久国产精品视频 | 超碰av在线 | 免费色网址 | 色中色综合网 | 激情网站| 日本一级高清不卡视频在线 | 亚洲欧美激情精品一区二区 | 在线观看国产免费高清不卡 | 97天堂| 九九久久精品 | 亚洲97 | 久久88 | 精品日本三级在线观看视频 | 欧美日韩成人一区二区 | 国产精品国产三级国产aⅴ无密码 | 欧美xxxx狂喷水喷水 | 成人二区 | 久久瑟 | 国产精品久久久久无码av | 国产精品久久久久久亚洲色 | 狠狠狠色丁香婷婷综合激情 | 天天影视插插 |