7種raid模式的組成原理_第1頁
7種raid模式的組成原理_第2頁
7種raid模式的組成原理_第3頁
7種raid模式的組成原理_第4頁
7種raid模式的組成原理_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、以下轉(zhuǎn)載于計(jì)算機(jī)世界3 月26日之網(wǎng)絡(luò)存儲(chǔ)贈(zèng)刊。本文從低層原理上,深入透析了目前存在的7種raid模式的組成原理,結(jié)構(gòu),并深刻分析了各 Raid0RaidO是這樣一種模式:我們拿5塊盤的raidO為例子。上圖中5個(gè)豎條,分別代表5個(gè)磁盤上的一個(gè)extent,也就是豎條的意思,每個(gè)磁盤被邏輯的 的ext ent上,橫向邏輯分割,形成st rip, 個(gè)st rip橫跨過的ext ent個(gè)數(shù),稱為st rip le 個(gè) segmen t, 一 個(gè) segment 中所包含的 data block 個(gè)數(shù),稱為 st rip dep th。Data block,可 不可調(diào),隨控制器而定。Raid0便是將

2、一系列連續(xù)編號(hào)的data block,分布到多個(gè)物理磁盤上,擴(kuò)散10,提高性能。其 4,則0、1、2、3號(hào)data block,被放置到第一個(gè)條帶的第一個(gè)segment中,然后4、5、6、 中,依此類推,條帶 1 放滿后,繼續(xù)放條帶 2。這種特性,稱為“局部連續(xù)”,因?yàn)?block 只 需要跨物理磁盤了。對外來說,參與形成 raid0 的各個(gè)物理盤,會(huì)組成一個(gè)邏輯上連續(xù),物理上也連續(xù)的虛擬磁盤。 控制器截獲,分析,根據(jù)block映射關(guān)系公式,轉(zhuǎn)換成對組成raid0的各個(gè)物理盤的真實(shí)物理 機(jī)磁盤控制器。Rai0 還有另一種非條帶化模式,即寫滿其中一塊物理磁盤之后,再接著寫另一塊,直到所有組 化,

3、但是對IO讀,能提高一定的并發(fā)IO讀幾率。在進(jìn)一步講述raid0和其他raid級別之前,我們先來看一下IO的種類。IO按照可以分為:讀 下面我們來分別介紹每一種 I0。讀/寫IO,這個(gè)就不用多說了,讀IO,就是發(fā)指令,從磁盤讀取某段扇區(qū)的內(nèi)容。指令一般是 扇區(qū)往后讀取的連續(xù)扇區(qū)個(gè)數(shù),同時(shí)給出動(dòng)作是讀,還是寫。磁盤收到這條指令,就會(huì)按照指 +數(shù)據(jù),就是一次IO,讀或者寫。大/小塊IO,指控制器的指令中給出的連續(xù)讀取扇區(qū)數(shù)目的多少,如果數(shù)目很大,比如128, 648等等,就應(yīng)該算是小塊IO,大塊和小塊之間,沒有明確的界限。連續(xù)/隨機(jī)IO,連續(xù)和隨機(jī),是指本次IO給出的初始扇區(qū)地址,和上一次IO的結(jié)

4、束扇區(qū)地址 則本次IO應(yīng)該算是一個(gè)連續(xù)IO,如果相差太大,則算一次隨機(jī)IO。連續(xù)IO,因?yàn)楸敬纬跏忌?或換道時(shí)間極短;如果相差太大,則磁頭需要很長的換道時(shí)間,如果隨機(jī)IO很多,導(dǎo)致磁頭不 順序/并發(fā)IO,這個(gè)的意思是,磁盤控制器每一次對磁盤組發(fā)出的指令套(指完成一個(gè)事物所 一條,則控制器緩存中的IO隊(duì)列,只能一個(gè)一個(gè)的來,此時(shí)是順序IO;如果控制器可以同時(shí) 就可以執(zhí)行多個(gè)IO,此時(shí)就是并發(fā)IO模式。并發(fā)IO模式提高了效率和速度。說完了 4 種 I0 模式,我們再來說 2 個(gè)概念:IO并發(fā)幾率。單盤,IO并發(fā)幾率為0,因?yàn)橐粔K磁盤同時(shí)只可以進(jìn)行一次IO。對于raid0, 2 能并發(fā)IO,下面會(huì)講

5、到),并發(fā)2個(gè)IO的幾率為1/2。其他情況請自行運(yùn)算。IOPS。一個(gè)IO所用的時(shí)間=尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間。IOPS = IO并發(fā)系數(shù)/(尋道時(shí)間+數(shù)據(jù) 數(shù)量級,所以影響IOPS的關(guān)鍵因素,就是降底尋道時(shí)間,而在連續(xù)10的情況下,尋道時(shí)間很 輸時(shí)間越少,IOPS就越高。每秒I0吞吐量。顯然,每秒I0吞吐量= IOPS乘以平均IO SIZE。Io size越大,IOPS越高, 為V, V為定值。則IOPS = IO并發(fā)系數(shù)/(尋道時(shí)間+ I0 SIZE/V)代入,得每秒I0吞吐量=I0并 我們可以看出影響每秒IO吞吐量的最大因素,就是IO SIZE和尋道時(shí)間,IO SIZE越大,尋道 因素,只有

6、一個(gè),就是尋道時(shí)間。下面我們來具體分析一個(gè)從上到下訪問raidO磁盤的過程。假如某一時(shí)刻,主機(jī)控制器發(fā)出指 長度128。Raid控制器接受到這個(gè)指令之后,立即進(jìn)行計(jì)算,根據(jù)對應(yīng)公式(這個(gè)公式是raid 號(hào)扇區(qū)所對應(yīng)的物理磁盤的扇區(qū)號(hào),然后依次計(jì)算出邏輯上連續(xù)的下128個(gè)扇區(qū)所在物理磁盤 次發(fā)出指令,這次是真實(shí)的讀取數(shù)據(jù)了,磁盤接受到指令,各自將數(shù)據(jù)提交給raid控制器, 器。分析以上過程,我們發(fā)現(xiàn),如果這128個(gè)扇區(qū),都落在同一個(gè)segment中的話,也就是說條帶 IO就只能真實(shí)的從這一塊物理盤上讀取,性能和單盤相比會(huì)減慢,因?yàn)闆]有任何優(yōu)化,反而還 性能,讓一個(gè)IO盡量擴(kuò)散到多塊物理盤上,就要

7、減小條帶深度,磁盤數(shù)量不變的條件下,也就 控制器分割,同時(shí)放滿第一個(gè)segment、第二塊物理磁盤上的第二個(gè)segment。 里大家可能存在一個(gè)誤區(qū),就是總是以為控制器是先放滿第一個(gè)segment,再放滿第二個(gè)seg 寫入或者讀取的數(shù)據(jù)都計(jì)算好了,是同時(shí)進(jìn)行的。所以,raid0要提升性能,條帶做的越小越 導(dǎo)致并發(fā)IO幾率降底,因?yàn)槿绻麠l帶太小,則每次IO 一定會(huì)占用大部分物理盤,而隊(duì)列中的 條帶太大,又不能充分提高傳輸速度,這兩個(gè)是一對矛盾,按照需求來采用不同的方式。我們接著分析raid0相對于單盤的性能變化。根據(jù)以上總結(jié)出來的公式,可以推得以下表格:RAID0讀寫并發(fā)IO順序IO并發(fā)IO順序

8、IOIOPS隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IOIosize/stripsize較大不支持不支持提升極小提升了 N 乘系數(shù) 倍不支持不支持提升極小提升了 N 乘系數(shù) 倍Iosize/stripsize較小提升了(1+并發(fā)系數(shù))倍提升了(1+并發(fā)系數(shù)+系數(shù))提升極小提升了系數(shù)倍提升了(1+并發(fā)系 數(shù))倍提升了(1+并發(fā)系數(shù)+ 系數(shù))提升極小提升了系數(shù)倍注:并發(fā)10和10 size/strip size是一對矛盾,兩者總是對立。N =組成raidO的磁盤數(shù)目。系數(shù)=io size/strip size和初始LBA地址所處的strip偏移綜合系數(shù),大于等于1。并發(fā)系數(shù)=并

9、發(fā)I0的數(shù)量Raid1Raid1 是這樣一種模式,我們拿2 塊盤的例子來說明Raidl和raidO不同,raidO對數(shù)據(jù)沒有任何保護(hù)措施,每個(gè)block都沒有備份或者校驗(yàn)保 護(hù)措施。Raid對虛擬邏輯盤上的每個(gè)物理block,都在物理盤上有一份鏡像備份。也就是說 數(shù)據(jù)有兩份。對于raidl的寫10,速度不但沒有提升,而且有所下降,因?yàn)閿?shù)據(jù)要同時(shí)向 多塊物理盤寫,時(shí)間以最慢的你個(gè)為準(zhǔn),因?yàn)槭峭降?。而對于raidl的讀I0請求,不但 可以并發(fā),而且就算順序IO的時(shí)候,控制器也可以象raid0 一樣,從兩塊物理盤上同時(shí)讀 數(shù)據(jù),提升速度。Raid1沒有srip的概念。同樣我們總結(jié)出一個(gè)表格:RAI

10、D1讀寫并發(fā)IO順序IO并發(fā)IO順序IOIOPS隨機(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ù)倍沒有提升沒有提升注:raid1沒有strip的概念。N=組成raid1鏡像物理盤的數(shù)目。在讀、并發(fā)IO的模式下,由于可以并發(fā)N個(gè)IO,每個(gè)IO占用一個(gè)物理盤,這就相當(dāng)于提 升了 N倍的IOPS。由于每個(gè)IO只獨(dú)占了一個(gè)物理盤,所以速度相對于單盤并沒有改變,所 以不管是隨機(jī)還是順序IO,相對單盤都不變。在讀、順序10、隨機(jī)10模式下,由于10不能并發(fā),所以此時(shí)一個(gè)10可以同時(shí)讀取N個(gè)

11、盤 上的內(nèi)容,但是是在隨機(jī)I0模式下,那么尋道時(shí)間影響很大,縱使同時(shí)分塊讀取多個(gè)磁盤 的內(nèi)容,也架不住尋道時(shí)間的抵消,所以性能提升極小在讀、順序10、連續(xù)I0模式下,尋道時(shí)間影響到了最低,此時(shí)傳輸速率為主要矛盾,同時(shí) 讀取多塊磁盤的數(shù)據(jù),時(shí)間減少為1/N,所以性能提升了 N倍。寫I0的時(shí)候和讀I0情況相同,就不做分析了。寫I0因?yàn)橐瑫r(shí)向每塊磁盤寫入備份數(shù)據(jù), 所以不能并發(fā)10,也不能分塊并行。但是如果控制器把優(yōu)化算法做到極至的話,還是可以 并發(fā)I0的,比如控制器從I0隊(duì)列中提取連續(xù)的多個(gè)10,可以將這些I0合并,并發(fā)寫入磁 盤。前提這幾個(gè)I0必須是事物性的,也就是說LBA必須連續(xù),不然不能作

12、為一個(gè)大的合并 10,而且和文件系統(tǒng)也有關(guān)系,文件系統(tǒng)碎片越少,并發(fā)幾率越高。Raid2raid2是一種比較特殊的raid模式,他是一種專用raid,現(xiàn)在早已被淘汰。他的基本思想 是,I0到來之后,控制器將數(shù)據(jù)分割開,在每塊物理磁盤讀或者寫1bit。這里有個(gè)疑問, 磁盤的最小I0單位是扇區(qū),512字節(jié),如何寫入1bit呢?其實(shí)這個(gè)寫入1bit,并非只寫入 1bi t。我們知道上層10,可以先經(jīng)過文件系統(tǒng),然后才通過磁盤控制器驅(qū)動(dòng)來向磁盤發(fā)出 10,最終的I0大小,都是N倍的扇區(qū),也就是Nx512字節(jié),N大于等于1,不可能發(fā)生N 小于 1 的情況,即使你需要的數(shù)據(jù)只有幾個(gè)字節(jié),那么也同樣要讀出或

13、者寫入整個(gè)扇區(qū),也 就是512字節(jié)。明白這個(gè)原則之后,我們再來看一下raid2中所謂的“每個(gè)磁盤寫lbit” 是個(gè)什么概念。0最小單位為扇區(qū),512字節(jié),我們就拿一個(gè)4塊數(shù)據(jù)盤+ 3塊校驗(yàn)盤的raid2 系統(tǒng)給大家來說明一下。這個(gè)環(huán)境中,raid2的一個(gè)條帶大小是4bit (1bit乘4塊數(shù)據(jù)盤), 而I0最小單位是一個(gè)扇區(qū),那么如果分別向每塊盤寫1bit,就需要分別向每塊盤寫一個(gè)扇 區(qū),每個(gè)扇區(qū)只包含1bit有效數(shù)據(jù),這顯然是不好的,因?yàn)樘速M(fèi)空間,沒有意義。因?yàn)镮0數(shù)據(jù)到來時(shí),我們拿以下I0請求為例:寫入 初始扇區(qū)10000長度1,這個(gè)I0目的是要向LBA10000寫入一個(gè)扇區(qū)的數(shù)據(jù),也就

14、是512字節(jié)。Raid2控制 器接受到這512字節(jié)的數(shù)據(jù)之后,先將其放入cache,然后計(jì)算需要寫入的物理磁盤的信息, 比如定位到物理扇區(qū),分割數(shù)據(jù)成bit,然后一次性寫入物理磁盤扇區(qū)。也就是說第一塊物 理盤,控制器會(huì)寫入本次I0數(shù)據(jù)的第1、5、9、13、17、21。等等 位,第二塊物理盤會(huì)寫入2、 6、 10、 14、 18、 22。等等位,其他兩塊 物理盤同樣方式寫入。直到這樣將數(shù)據(jù)寫完。我們可以計(jì)算出來,這512字節(jié)的數(shù)據(jù)寫完之 后,此時(shí)每塊物理盤只包含128字節(jié)的數(shù)據(jù),也就是一個(gè)扇區(qū)的四分之一,那么這個(gè)扇區(qū)剩 余的部分,就是空的。如果要利用起這部分空間,那么等下次I0到來之后,控制器對

15、數(shù)據(jù) 進(jìn)行bit分割,將要填入這些空白區(qū)域的數(shù)據(jù),控制器將首先讀出原來的數(shù)據(jù),然后和新數(shù) 據(jù)合并之后,一并再寫回這個(gè)扇區(qū),這樣做效率和速度都大打折扣。我們可以發(fā)現(xiàn),其實(shí) raid2 就是將原本連續(xù)的一個(gè)扇區(qū)的數(shù)據(jù),以位為單位,分割存放到不連續(xù)的多塊物理盤上, 因?yàn)檫@樣可以全組并行讀寫,提高性能。每個(gè)物理磁盤扇區(qū)其實(shí)是包含了N個(gè)扇區(qū)的“殘 體”。那么如果出現(xiàn)需要更新這個(gè)10的4個(gè)扇區(qū)中某一個(gè)扇區(qū)的情況,怎么辦?這種情況 下,必須先讀出原來的數(shù)據(jù),和新數(shù)據(jù)合并,然后在一并寫入。其實(shí)這種情況出現(xiàn)的非常少。 我們知道上層I0的產(chǎn)生,一般是需要先經(jīng)過os的文件系統(tǒng),然后才到磁盤控制器這一層的。 所以磁盤

16、控制器產(chǎn)生的10, 一般都是事務(wù)性的,也就是這個(gè)I0中的所有扇區(qū),很大幾率上 對于上層文件系統(tǒng)來說,是一個(gè)完整的事務(wù),所以很少會(huì)發(fā)生只針對這個(gè)事務(wù)中某一個(gè)原子 進(jìn)行讀寫的情況。這樣的話,每次I0很大幾率都會(huì)包含入這些邏輯上連續(xù)的扇區(qū)的,所以 不必?fù)?dān)心經(jīng)常會(huì)發(fā)生那種情況,即便發(fā)生了,控制器也只能按照那種低效率的做法來做,不 過總體影響較小。但是如果隨機(jī)I0比較多,那么這些I0初始LBA,很有可能就會(huì)命中在一 個(gè)兩個(gè)事務(wù)交接的扇區(qū)處,這種情況,就導(dǎo)致速度和效率大大降低了。連續(xù)I0出現(xiàn)這種情 況的幾率非常小了。Raid2因?yàn)槊看巫x寫都需要全組磁盤聯(lián)動(dòng),所以為了最大化其性能,最好保證每塊磁盤主軸 同步

17、,使得同一時(shí)刻每塊磁盤磁頭所處的扇區(qū)邏輯編號(hào)都一致,并存并取,達(dá)到最佳性能, 如果不能同步,則會(huì)產(chǎn)生等待,影響速度?;趓aid2的并存并取的特點(diǎn),raid2不能實(shí)現(xiàn)并發(fā)10,因?yàn)槊看蜪0都占用了每塊物理磁 盤。Raid2的校驗(yàn)盤對系統(tǒng)不產(chǎn)生瓶頸,但是產(chǎn)生延遲,因?yàn)槎嗔擞?jì)算校驗(yàn)的動(dòng)作。校驗(yàn)位和數(shù) 據(jù)位是一同并行寫入或者讀取的。Raid2采用海明碼來校驗(yàn)數(shù)據(jù),這種碼可以判斷修復(fù)一位 錯(cuò)誤的數(shù)據(jù),并且使用校驗(yàn)盤的數(shù)量太多, 4塊數(shù)據(jù)盤需要3塊校驗(yàn)盤,但是隨著數(shù)據(jù)盤數(shù) 量的增多,校驗(yàn)盤所占的比例會(huì)顯著減小。Raid2和raidO有些不同,raidO不能保證每次I0都是多磁盤并行,因?yàn)閞aidO的分塊

18、相對 raid2以位為單位來說是太大了,而raid2由于她每次I0都保證是多磁盤并行,所以其數(shù) 據(jù)傳輸率是單盤的N倍,為了最好的利用這個(gè)特性,就需要將這個(gè)特性的主導(dǎo)地位體現(xiàn)出來, 而根據(jù)IOPS = IO并發(fā)系數(shù)/ (尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間),尋道時(shí)間比數(shù)據(jù)傳輸時(shí)間大幾個(gè) 數(shù)量級,所以為了體現(xiàn)數(shù)據(jù)傳輸時(shí)間減少這個(gè)優(yōu)點(diǎn),就必須避免尋道時(shí)間的影響,而避免其 影響的最佳做法就是:盡量產(chǎn)生連續(xù)I0而不是隨機(jī)10,所以,raid2最適合連續(xù)I0的情況。 另外,根據(jù)每秒I0吞吐量=10并發(fā)系數(shù)乘IO SIZE乘V/ (V乘尋道時(shí)間+ 10 SIZE),如 果將I0 size也增大,則每秒I0吞吐量也將顯著

19、提咼。所以,raid2最適合的應(yīng)用,就是: 產(chǎn)生連續(xù)I0,大塊I0的情況,不言而喻,文件服務(wù),視頻流服務(wù)等等這些應(yīng)用,適合raid2, 不過,raid2的缺點(diǎn)太多,比如校驗(yàn)盤數(shù)量多,算法復(fù)雜等等,它逐漸的被raid3替代了。RAID2讀寫順序I0順序I0IOPS非事務(wù)性隨機(jī)I0 事務(wù)性隨連續(xù)I0非事務(wù)性隨機(jī)I0 事務(wù)性隨連續(xù)I0機(jī)IO機(jī)IOIO滿足公式條件提升極小提升極小提升N倍性能降低提升極小提升N倍注:N=數(shù)據(jù)盤數(shù)量。Raid2不能并發(fā)10Raid3由于raid2缺點(diǎn)比較多,比如非事務(wù)性I0對他的影響,校驗(yàn)盤數(shù)量太多等等。Raid2的劣 勢,就在于它的將數(shù)據(jù)以bit為單位,分割,將原本物理

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

21、盤就足夠了。Raid3 的每一個(gè)條帶,其長度很小,深度為 1。這樣的話,每個(gè) segment 的大小一般就是 1 個(gè)扇區(qū)或者幾個(gè)扇區(qū)的容量。以上圖的例子來看, 4塊數(shù)據(jù)盤,一塊校驗(yàn)盤,每個(gè) segment, 也就是圖中的一個(gè)block portion,假如為2個(gè)扇區(qū)大小,也就是lk,則整個(gè)條帶大小為 4k,如果一個(gè)segment大小為8個(gè)扇區(qū),即4k,則整個(gè)條帶大小為16K。我們還是用一個(gè)例子來說明raid3的作用機(jī)制。比如,一個(gè)4數(shù)據(jù)盤,1校驗(yàn)盤的raid3系統(tǒng),segment size為2個(gè)扇區(qū)大小即1k。raid3控制器接受到了這么一個(gè)IO:寫入初始扇區(qū) 10000長度8,即總數(shù)據(jù)量為8

22、乘512字節(jié)=4k。則控制器先定位LBA10000所對應(yīng)的真實(shí)物理LBA, 假如LBA10000恰好在第一個(gè)條帶的第一個(gè)segment的第一個(gè)扇區(qū)上,那么控制器將這個(gè)IO 數(shù)據(jù)里的第 1、2 個(gè) 512 字節(jié)寫入這個(gè)扇區(qū),同一時(shí)刻,第3、4 個(gè) 512 字節(jié)會(huì)被同時(shí)寫入這 個(gè)條帶的第二個(gè) segment 中的兩個(gè)扇區(qū),其后的數(shù)據(jù)同樣被寫入第3、4 個(gè) segment 中,此 時(shí)恰好是4k的數(shù)據(jù)量。也就是說這4k的IO數(shù)據(jù),同時(shí)被寫入了 4塊磁盤,每塊磁盤寫入 了兩個(gè)扇區(qū),也就是一個(gè)segmen t,他們是并行寫入的,包括校驗(yàn)盤,也是并行寫入的,所 以 raid3 的校驗(yàn)盤沒有瓶頸,但是有延遲,

23、因?yàn)樵黾恿擞?jì)算校驗(yàn)的開銷。但現(xiàn)代控制器一般 都使用專用的XOR硬件電路而不是cpu來計(jì)算xor,這樣就使得延遲降到最低。上面那個(gè)情 況是IO size剛好等于一個(gè)條帶大小的時(shí)候,如果10 size小于一個(gè)條帶大小呢?我們接著 分析,還是剛才那個(gè)環(huán)境,此時(shí)控制器接收到10大小為2K的寫入請求,也就是4個(gè)連續(xù)扇 區(qū),那么控制器就只能同時(shí)寫入兩個(gè)磁盤了,因?yàn)槊總€(gè)盤上的segment是2個(gè)扇區(qū),其他兩 個(gè)磁盤此時(shí)就是空閑的,也只能得到兩倍的單盤傳輸速率。我們再來看看IOsize大于一個(gè) 條帶大小的情況,會(huì)發(fā)生什么。還是那個(gè)環(huán)境,控制器收到的IO size=16k。則控制器一 次所能并行寫入的,是4k,

24、這16k就需要分4批來寫入4個(gè)條帶。其實(shí)這里的分4批寫入, 不是先后,而還是同時(shí),也就是這16k中的第1、5、9、13k將由控制器連續(xù)寫入磁盤1, 第2、6、10、14k,連續(xù)寫入磁盤2,依此類推,直到16k數(shù)據(jù)全部寫完,是并行一次寫完, 這樣校驗(yàn)盤也可以一次性計(jì)算校驗(yàn)值并且和數(shù)據(jù)一同并行寫入。而不是“分批”。通過比較,我們發(fā)現(xiàn),與其使得IO size小于一個(gè)條帶的大小,空閑一些磁盤,不如使得 Io size大于或者等于條帶大小,使得沒有磁盤空余。因?yàn)樯蠈覫O size是不受控的,控制 器說了不算,但是條帶大小是控制器說了算的,所以如果將條帶大小減少到很小,比如2 個(gè)扇區(qū),一個(gè)扇區(qū),則每次上層

25、IO, 一般情況下都會(huì)占用所有磁盤,進(jìn)行并發(fā)傳輸??梢?提供和raid2 一樣的傳輸速度,并避免raid2的諸多缺點(diǎn)。Raid3和raid2 一樣,不能并發(fā) IO,因?yàn)橐粋€(gè)IO要占用全部盤,就算IO size小于st rip size,因?yàn)樾r?yàn)盤的獨(dú)享,也 不能并發(fā)IO。RAID3讀寫并發(fā)IO順序IO并發(fā)IO順序IOIOPS隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IOIo size 大 于 strip size不支持不支持提升極小提升了 N倍不支持不支持提升極小提升了 N倍Io size 小 于 strip size不支持事物性IO可并 發(fā),提升 并發(fā)系 數(shù)倍提升極小提升了

26、 N乘IOsize/stripsize 倍不支持事物性IO可并 發(fā),提升 并發(fā)系 數(shù)倍提升極小提升了 N乘IOsize/stripsize 倍注:N=組成raid3的數(shù)據(jù)磁盤數(shù)量。和raid2相同,事物性連續(xù)IO可能并發(fā)。和raid2 樣,raid3同樣也是最適合連續(xù)大塊IO的環(huán)境,但是它比raid2成本更低,更容易部署。具體分析:不管任何形式的raid,只要是面對隨機(jī)IO,其性能比單盤沒有大的優(yōu)勢,因?yàn)閞aid作所的 只是提高傳輸速率,并發(fā)IO,容錯(cuò)。隨機(jī)IO只能靠降低單個(gè)物理磁盤的尋道時(shí)間來解決。而raid不能優(yōu)化尋道時(shí)間。所以隨機(jī)IO, raid3也同樣沒有優(yōu)勢。連續(xù)10,因?yàn)閷さ罆r(shí)間的

27、影響因素可以忽略,raid3最拿手,因?yàn)橄髍aid2 樣,raid3可 以大大加快數(shù)據(jù)傳輸速率,因?yàn)樗嵌啾P并發(fā)讀寫。所以理論上可以相對單盤提高N倍的速 率。Raid4不管是Raid2還是raid3,他們都是為了大大提高數(shù)據(jù)傳輸率而設(shè)計(jì),而不能并發(fā)10。諸如 數(shù)據(jù)庫等等應(yīng)用,他們的特點(diǎn)就是隨機(jī)I0和小塊10。想提高這種環(huán)境的IOPS,根據(jù)公式: IOPS = IO并發(fā)系數(shù)/(尋道時(shí)間+數(shù)據(jù)傳輸時(shí)間),隨機(jī)讀導(dǎo)致尋道時(shí)間很大,靠提高傳輸 許率已經(jīng)不是辦法。所以觀察這個(gè)公式,想在隨機(jī)10頻發(fā)的環(huán)境中提高IOPS,唯一能夠做 的,只有提高I0并發(fā)系數(shù),不能并發(fā)I0的,想辦法讓他并發(fā)10,并發(fā)系數(shù)小的

28、,想辦法 提高系數(shù)。在raid3的基礎(chǔ)上,raid4被發(fā)展起來。我們分析raid3的性能的時(shí)候,曾經(jīng)提到過一種情 況,就是io size小于st rip size的時(shí)候,此時(shí)有磁盤處于空閑狀態(tài),而如果抓住這個(gè)現(xiàn) 象,同時(shí)讓隊(duì)列中的下一個(gè)I0來利用這些空閑的磁盤,豈不是正好達(dá)到并發(fā)I0的效果了么? 所以raid4將一個(gè)segment的大小做的比較大,以至于平均I0 size總是小于st rip size, 這樣就能保證每個(gè)I0少占用磁盤,甚至一個(gè)I0只占用一個(gè)磁盤。是的,這個(gè)思想對于讀I0是對路子的,但是對于寫I0的話,有一個(gè)很難克服的問題,那就 是校驗(yàn)盤的爭用??紤]這樣一種情況:4塊數(shù)據(jù)盤+

29、1塊校驗(yàn)盤組成的raid4系統(tǒng),某時(shí)刻 一個(gè)I0占用了前兩塊盤+校驗(yàn)盤,此時(shí)雖然后兩塊是空閑的,可以同時(shí)接受新的I0請求, 但是如果接受了新的I0請求,則新I0請求同樣也要使用校驗(yàn)盤,由于一塊物理磁盤不能同 時(shí)處理多個(gè)10,所以新I0雖然占有了數(shù)據(jù)盤的寫權(quán)限,但是寫校驗(yàn)盤的時(shí)候,仍然要等舊 I0寫完后,才能寫入校驗(yàn),新I0才能完成,這樣的話,就和順序I0無異了,數(shù)據(jù)盤可并 發(fā)而校驗(yàn)盤不可并發(fā),這樣不能實(shí)現(xiàn)并發(fā)10。下面我們來說幾個(gè)概念。整條寫、重構(gòu)寫與讀改寫整條寫(Full-Stripe Write):整條寫需要修改奇偶校驗(yàn)群組中所有的條帶單元,因此新 的奇偶校驗(yàn)值可以根據(jù)所有新的條帶數(shù)據(jù)計(jì)算

30、得到。不需要額外的讀、寫操作。因此,整條 寫是最有效的寫類型。整條寫的例子,比如raid2, raid3。他們每次I0總是幾乎能保證占 用所有盤,因此每個(gè)條帶上的每個(gè)segment都被寫更新,所以控制器可以直接利用這些更新 的數(shù)據(jù)計(jì)算出校驗(yàn)數(shù)據(jù)之后,在數(shù)據(jù)被寫入數(shù)據(jù)盤的同時(shí),將計(jì)算好的校驗(yàn)信息寫入校驗(yàn)盤。重構(gòu)寫(Reconstruct Write):如果要寫入的磁盤數(shù)目超過陣列磁盤數(shù)目的一半,采取重 構(gòu)寫方式。在重構(gòu)寫中,從這個(gè)條帶中不需要修改的 segment 中讀取原來的數(shù)據(jù),再和本條 帶中所有需要修改的 segment 上的新數(shù)據(jù)計(jì)算奇偶校驗(yàn)值,并將新的 segment 數(shù)據(jù)和沒有更 改

31、過的segment數(shù)據(jù)以及新的奇偶校驗(yàn)值一并寫入。顯然,重構(gòu)寫要牽涉更多的I/O操作, 因此效率比整條寫低。重構(gòu)寫的例子,比如raid4中,如果數(shù)據(jù)盤為8塊,某時(shí)刻一個(gè)IO 只更新了一個(gè)條帶的6個(gè)segment,剩余兩個(gè)沒有更新,則重構(gòu)寫模式下,會(huì)將沒有被更新 的兩個(gè) segment 的數(shù)據(jù)讀出,和需要更新的前6 個(gè) segment 的數(shù)據(jù)計(jì)算出校驗(yàn)數(shù)據(jù),然后將 這8個(gè)segment連同校驗(yàn)數(shù)據(jù)一并寫入磁盤??梢钥闯觯@個(gè)操作只是多出了讀兩個(gè)segment 中數(shù)據(jù)的操作。讀改寫(Read-Modify Write):如果要寫入的磁盤數(shù)目不足陣列磁盤數(shù)目的一半,采取讀 改寫方式。讀改寫過程如下:

32、(1)從需要修改的 segment 上讀取舊的數(shù)據(jù);(2)從條帶上 讀取舊的奇偶校驗(yàn)值;(3)根據(jù)舊數(shù)據(jù)、舊校驗(yàn)值和需要修改的 segment 上的新數(shù)據(jù)計(jì)算 這個(gè)條帶上的新的校驗(yàn)值;(4)寫入新的數(shù)據(jù)和新的奇偶校驗(yàn)值。這個(gè)過程中包含讀取、 修改、寫入的一個(gè)循環(huán)周期,因此稱為讀改寫。讀改寫計(jì)算新校驗(yàn)值的公式為 新數(shù)據(jù)的校 驗(yàn)數(shù)據(jù)=(老數(shù)據(jù)EOR新數(shù)據(jù))EOR老校驗(yàn)數(shù)據(jù)。如果待更新的segment已經(jīng)超過了條帶 中總segment數(shù)量的一半,則此時(shí)不適合使用讀改寫,因?yàn)樽x改寫需要讀出這些segment 中的數(shù)據(jù)和校驗(yàn)數(shù)據(jù),而如果采用重構(gòu)寫,只需要讀取剩余不準(zhǔn)備更新數(shù)據(jù)的segment中的 數(shù)據(jù)即

33、可,而后者數(shù)量比前者要少,所以超過一半,用重構(gòu)寫,不到一半,用讀改寫。整條 更新,就用整條寫。寫效率:整條寫重構(gòu)寫讀改寫。明白了這些概念之后,我們就可以繼續(xù)深入理解raid4 了。如果僅僅根據(jù)爭用校驗(yàn)盤來下結(jié) 論說raid4不支持并發(fā)IO,在經(jīng)過了以上三個(gè)概念的描述之后,看來顯然是片面的。我們 設(shè)想這樣一種情形,某時(shí)刻一個(gè)IO只占用了全部磁盤的幾塊盤,另一些磁盤空閑,如果此 時(shí)讓隊(duì)列中下一個(gè)IO等待的話,那么當(dāng)然不可實(shí)現(xiàn)并發(fā)IO。此時(shí)我們考慮:如果隊(duì)列中有 這樣一個(gè)IO,它需要更新的LBA目標(biāo)和正在進(jìn)行的IO恰好在同一條帶上,并且處于空閑磁 盤,而又不沖突,那么此時(shí)我們恰好就可以讓這個(gè)10也搭

34、一下正在進(jìn)行的10的順風(fēng)車,反 正都是要更新這個(gè)條帶的校驗(yàn)segment,與其兩個(gè)I0先后更新,不如讓他們同時(shí)更新各自 的數(shù)據(jù)segment,而控制器負(fù)責(zé)計(jì)算本條帶的校驗(yàn)塊。這樣就完美的達(dá)到了 10并發(fā)。但是, 有個(gè)問題,這種情況遇到的幾率真是小之又小。即便如此,控制器如果可以對隊(duì)列中的I0 目標(biāo)LBA進(jìn)行掃描,將目標(biāo)處于同一條帶的10,讓其并發(fā)寫入,這就多少類似NCQ技術(shù)了, 不過這種技術(shù)需要上層軟件的配合,因?yàn)閬y序10,會(huì)失去事務(wù)的順序性,所以還需要上層 軟件作一些處理。除了在控制器內(nèi)部實(shí)現(xiàn)這種算法之外,我們還可以直接在上層來實(shí)現(xiàn)這種模式。上層就是指 操作系統(tǒng)的文件系統(tǒng)。因?yàn)槲募倒芾碇?/p>

35、層磁盤。文件系統(tǒng)決定數(shù)據(jù)寫往磁盤上的哪些扇 區(qū)。所以完全可以在文件系統(tǒng)這個(gè)層次上,將兩個(gè)不同事物的I0寫操作,盡量放到相同的 條帶上,也就是說,比如一個(gè)條帶大小為16k,可以前8k放一個(gè)I0的數(shù)據(jù),后8k放也另 一個(gè) I0 的數(shù)據(jù),這兩個(gè) I0 在經(jīng)過文件系統(tǒng)的計(jì)算之后,經(jīng)由磁盤控制器驅(qū)動(dòng)程序,向磁盤 發(fā)出同時(shí)寫入整個(gè)條帶的操作,這樣就構(gòu)成了整條寫,如果實(shí)在不能占滿整條,那么也應(yīng)該 盡量達(dá)成重構(gòu)寫模式,這樣不但并發(fā)了 10,還使得寫效率增加。這種在文件系統(tǒng)專門為raid4 做出優(yōu)化的方案,最點(diǎn)型的就是net app公司的磁盤陣列操作系統(tǒng)dat a on tap,這個(gè)操作系 統(tǒng)中文件系統(tǒng)模塊稱為

36、 WAFL。 WAFL 文件系統(tǒng)的設(shè)計(jì)方式確保能夠最大限度地減少校驗(yàn)盤尋 址操作。上圖右半部對比顯示了 WAFL如何分配同樣的數(shù)據(jù)塊,從而使得RAID 4更加有效。 WAFL 總是把相關(guān)的數(shù)據(jù)塊寫到彼此鄰近的條帶中,消除校驗(yàn)盤上的長時(shí)間尋址操作。只要 可能,WAFL也把多重?cái)?shù)據(jù)塊寫到同樣的條帶中,從而進(jìn)一步減少校驗(yàn)盤上的阻塞。FFS在上 圖左半部中使用六道獨(dú)立的條帶,因此致使六個(gè)校驗(yàn)盤塊需要更新。 上圖右半部中, WAFL 使用僅僅3道條帶,即只有三個(gè)校驗(yàn)塊需要更新。從而大大提高了 RAID 性能,消除了校驗(yàn) 盤瓶頸。RAID4IOPS讀寫特別優(yōu)化的并發(fā)I0順序I0特別優(yōu)化的并發(fā)I0順序I0隨

37、機(jī)I0連續(xù)I0隨機(jī)I0連續(xù)I0隨機(jī)I0連續(xù)I0隨機(jī)I0連續(xù)I0Iosize/stripsize較大沖突沖突提升極小提升了 N倍沖突沖突沒有提升提升了 N倍Iosize/stripsize較小提升極小提升并發(fā)系數(shù)倍幾乎沒有提升幾乎沒有提升提升并發(fā)系數(shù)倍提升并發(fā)系數(shù)乘N倍性能降底性能降底注:N為raid4數(shù)據(jù)盤數(shù)量。Io size/strip size太大則并發(fā)IO幾率很小。值得注意的是,如果io size/strip size的值太小,則順序IO讀,不管是連續(xù)還是隨機(jī) I0,幾乎都沒有提升。順序IO寫,性能下降,因?yàn)閕o size很小,又是順序I0,則只能進(jìn) 行讀改寫,性能降底不少。所以,如果要

38、使用raid4,不進(jìn)行特別優(yōu)化,是不行的,至少要讓他可以進(jìn)行并發(fā)10。我們 觀察表格可知,并發(fā)I0模式下,性能都有所提升。然而如果要優(yōu)化到并發(fā)幾率很高,實(shí)則 不容易。目前只有netapp的WAFL文件系統(tǒng)還在使用raid4,其他產(chǎn)品均未見使用。面臨淘 汰,取而代之的是擁有高并發(fā)幾率的raid5系統(tǒng)。Raid5為了解決raid4系統(tǒng)不能并發(fā)I0困難的窘境,raid5相應(yīng)而出。Raid4并發(fā)困難,是因?yàn)樗?的校驗(yàn)盤爭用的問題,如果能找到一種機(jī)制,能有效解決這個(gè)問題,則實(shí)現(xiàn)并發(fā)就會(huì)非常容 易。Raid5恰恰解決了校驗(yàn)盤爭用這個(gè)問題。Raid5采用分布式校驗(yàn)盤的做法,將校驗(yàn)盤打 散在raid組中的每塊

39、磁盤上。如圖所示。每個(gè)條帶都有一個(gè)校驗(yàn)segment,但是不同條帶 中其位置不同,在相鄰條帶之間循環(huán)分布。為了保證并發(fā)IO, raid5同樣將條帶大小做的較 大,以保證每次I0數(shù)據(jù)不會(huì)占滿整個(gè)條帶,造成隊(duì)列其他I0等待。所以,raid5如果要保 證高并發(fā)率,那么每個(gè)I0幾乎都是讀改寫模式,尤其是在隨機(jī)I0的情況下,所以raid5 擁有較高的寫懲罰,但是在隨機(jī)I0頻發(fā)的環(huán)境下,仍然能保持較高的I0PS。們來分析一下raid5具體的作用機(jī)制。以上圖為例的環(huán)境,條帶大小80k,每個(gè)segment大小16k。某一時(shí)刻,上層產(chǎn)生一個(gè)寫I0:寫入初始扇區(qū)10000長度8,即寫入4k的數(shù)據(jù)??刂破魇盏竭@個(gè)I

40、0之后,首先定位真實(shí)LBA地址,假設(shè)定位到 了第1個(gè)條帶的第2個(gè)segment (位于圖中的磁盤2)的第1個(gè)扇區(qū)(僅僅是假設(shè)),則控 制器首先對這個(gè)segment所在的磁盤發(fā)起10寫請求,讀出這8個(gè)扇區(qū)中原來的數(shù)據(jù)到cache, 與此同時(shí)控制器也向這個(gè)條帶的校驗(yàn)segment所在的磁盤(即圖中的磁盤1)發(fā)起I0讀請 求,讀出對應(yīng)的校驗(yàn)扇區(qū)數(shù)據(jù)并保存到cache,隨后利用X0R校驗(yàn)電路來計(jì)算新的校驗(yàn)數(shù)據(jù), 利用公式:新數(shù)據(jù)的校驗(yàn)數(shù)據(jù)二(老數(shù)據(jù)E0R新數(shù)據(jù))E0R老校驗(yàn)數(shù)據(jù)。現(xiàn)在cache中存 在:老數(shù)據(jù),新數(shù)據(jù),老校驗(yàn)數(shù)據(jù),新校驗(yàn)數(shù)據(jù)。然后控制器立即再次向相應(yīng)的磁盤同時(shí)發(fā) 起I0寫請求,將新數(shù)據(jù)

41、寫入數(shù)據(jù)segment,將新校驗(yàn)數(shù)據(jù)寫入校驗(yàn)segment,并刪除老數(shù)據(jù) 和老校驗(yàn)數(shù)據(jù)。在上述過程中,這個(gè)I0占用的,始終只有1、2兩塊盤,因?yàn)樗碌臄?shù)據(jù)segment我們 假設(shè)位于2盤的1條帶的2號(hào)segment,而這個(gè)條帶對應(yīng)的校驗(yàn)segment位于1盤,自始至 終其他任何磁盤都沒有用到。那么如果此時(shí)隊(duì)列中有這么一個(gè)10,他的LBA初始目標(biāo)假如 位于圖中下方紅框所示的數(shù)據(jù)segment中(4盤),I0長度也不超過segment的大小,而這 個(gè)條帶對應(yīng)的校驗(yàn)segment位于3盤上,這兩塊盤未被其他任何I0占用,所以,此時(shí)控制 器就可以并發(fā)的處理這個(gè)10,和上方紅框所示的10,達(dá)到并發(fā)。

42、Raid5相對于經(jīng)過特別優(yōu)化的raid4來說,在底層就實(shí)現(xiàn)了并發(fā),可以脫離文件系統(tǒng)的干預(yù), 任何文件系統(tǒng)的10,都可以實(shí)現(xiàn)高并發(fā)幾率,而不像基于wafl文件系統(tǒng)的raid4,需要在 文件系統(tǒng)上規(guī)劃計(jì)算出并發(fā)環(huán)境。Raid5磁盤數(shù)量越多,可并發(fā)的幾率就越大。RAID5I0PS讀寫并發(fā)IO順序I0并發(fā)I0順序I0隨機(jī)IO連續(xù)I0隨機(jī)I0連續(xù)I0隨機(jī)I0連續(xù)I0隨機(jī)I0連續(xù)I0Io size近似strip size不支持不支持提升極小提升了 N倍不支持不支持提升極小提升了N倍IO size大于 segment size重構(gòu)寫提升并發(fā)系數(shù)倍提升并發(fā)系數(shù)倍幾乎沒有提升提升了 I0 size/segmen

43、t size 倍提升并發(fā)系數(shù)倍提升并發(fā)系數(shù)倍性能下降提升極小Io size 小于 segment size讀改寫提升并發(fā)系數(shù)倍提升并發(fā)系數(shù)倍提升極小沒有提升提升并發(fā)系數(shù)倍提升并發(fā)系數(shù)倍性能下降性能下降raid5最適合小塊10,并發(fā)I0的情況下,性能都較單盤有所提升。Raid6 raid6 之前的任何 raid 級別,最多能保障在壞掉一塊盤的時(shí)候,數(shù)據(jù)仍然可以訪問,但是 如果同時(shí)壞掉兩塊盤,則數(shù)據(jù)將會(huì)丟失。為了增加raid5的保險(xiǎn)系數(shù),raid6被創(chuàng)立。Raid6 比raid5多增加了一塊校驗(yàn)盤,同時(shí)也是分布打散在每塊盤上,用另一個(gè)方程式來計(jì)算新的 校驗(yàn)數(shù)據(jù),這樣,raid6同時(shí)在一個(gè)條帶上保存

44、了兩份數(shù)學(xué)上不相關(guān)的校驗(yàn)數(shù)據(jù),這樣能夠 保證同時(shí)壞兩塊盤的情況下,數(shù)據(jù)依然可以通過聯(lián)立這兩個(gè)數(shù)學(xué)關(guān)系等式來求解丟失的數(shù) 據(jù)。Raid6較raid5在寫的時(shí)候,會(huì)同時(shí)讀取或者寫入額外的一份校驗(yàn)數(shù)據(jù),不過由于是并行同時(shí)操作,所以比raid5慢不了多少。其他特性和raid5類似。RAID6IOPS讀寫并發(fā)IO順序IO并發(fā)IO順序IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IO隨機(jī)IO連續(xù)IOIo 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ù)倍性能下降性能下降2# 大 中 小 發(fā)表于 2007-7

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論