




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、以下轉載于計算機世界3 月26日之網絡存儲贈刊。本文從低層原理上,深入透析了目前存在的7種raid模式的組成原理,結構,并深刻分析了各 Raid0RaidO是這樣一種模式:我們拿5塊盤的raidO為例子。上圖中5個豎條,分別代表5個磁盤上的一個extent,也就是豎條的意思,每個磁盤被邏輯的 的ext ent上,橫向邏輯分割,形成st rip, 個st rip橫跨過的ext ent個數,稱為st rip le 個 segmen t, 一 個 segment 中所包含的 data block 個數,稱為 st rip dep th。Data block,可 不可調,隨控制器而定。Raid0便是將
2、一系列連續編號的data block,分布到多個物理磁盤上,擴散10,提高性能。其 4,則0、1、2、3號data block,被放置到第一個條帶的第一個segment中,然后4、5、6、 中,依此類推,條帶 1 放滿后,繼續放條帶 2。這種特性,稱為“局部連續”,因為 block 只 需要跨物理磁盤了。對外來說,參與形成 raid0 的各個物理盤,會組成一個邏輯上連續,物理上也連續的虛擬磁盤。 控制器截獲,分析,根據block映射關系公式,轉換成對組成raid0的各個物理盤的真實物理 機磁盤控制器。Rai0 還有另一種非條帶化模式,即寫滿其中一塊物理磁盤之后,再接著寫另一塊,直到所有組 化,
3、但是對IO讀,能提高一定的并發IO讀幾率。在進一步講述raid0和其他raid級別之前,我們先來看一下IO的種類。IO按照可以分為:讀 下面我們來分別介紹每一種 I0。讀/寫IO,這個就不用多說了,讀IO,就是發指令,從磁盤讀取某段扇區的內容。指令一般是 扇區往后讀取的連續扇區個數,同時給出動作是讀,還是寫。磁盤收到這條指令,就會按照指 +數據,就是一次IO,讀或者寫。大/小塊IO,指控制器的指令中給出的連續讀取扇區數目的多少,如果數目很大,比如128, 648等等,就應該算是小塊IO,大塊和小塊之間,沒有明確的界限。連續/隨機IO,連續和隨機,是指本次IO給出的初始扇區地址,和上一次IO的結
4、束扇區地址 則本次IO應該算是一個連續IO,如果相差太大,則算一次隨機IO。連續IO,因為本次初始扇 或換道時間極短;如果相差太大,則磁頭需要很長的換道時間,如果隨機IO很多,導致磁頭不 順序/并發IO,這個的意思是,磁盤控制器每一次對磁盤組發出的指令套(指完成一個事物所 一條,則控制器緩存中的IO隊列,只能一個一個的來,此時是順序IO;如果控制器可以同時 就可以執行多個IO,此時就是并發IO模式。并發IO模式提高了效率和速度。說完了 4 種 I0 模式,我們再來說 2 個概念:IO并發幾率。單盤,IO并發幾率為0,因為一塊磁盤同時只可以進行一次IO。對于raid0, 2 能并發IO,下面會講
5、到),并發2個IO的幾率為1/2。其他情況請自行運算。IOPS。一個IO所用的時間=尋道時間+數據傳輸時間。IOPS = IO并發系數/(尋道時間+數據 數量級,所以影響IOPS的關鍵因素,就是降底尋道時間,而在連續10的情況下,尋道時間很 輸時間越少,IOPS就越高。每秒I0吞吐量。顯然,每秒I0吞吐量= IOPS乘以平均IO SIZE。Io size越大,IOPS越高, 為V, V為定值。則IOPS = IO并發系數/(尋道時間+ I0 SIZE/V)代入,得每秒I0吞吐量=I0并 我們可以看出影響每秒IO吞吐量的最大因素,就是IO SIZE和尋道時間,IO SIZE越大,尋道 因素,只有
6、一個,就是尋道時間。下面我們來具體分析一個從上到下訪問raidO磁盤的過程。假如某一時刻,主機控制器發出指 長度128。Raid控制器接受到這個指令之后,立即進行計算,根據對應公式(這個公式是raid 號扇區所對應的物理磁盤的扇區號,然后依次計算出邏輯上連續的下128個扇區所在物理磁盤 次發出指令,這次是真實的讀取數據了,磁盤接受到指令,各自將數據提交給raid控制器, 器。分析以上過程,我們發現,如果這128個扇區,都落在同一個segment中的話,也就是說條帶 IO就只能真實的從這一塊物理盤上讀取,性能和單盤相比會減慢,因為沒有任何優化,反而還 性能,讓一個IO盡量擴散到多塊物理盤上,就要
7、減小條帶深度,磁盤數量不變的條件下,也就 控制器分割,同時放滿第一個segment、第二塊物理磁盤上的第二個segment。 里大家可能存在一個誤區,就是總是以為控制器是先放滿第一個segment,再放滿第二個seg 寫入或者讀取的數據都計算好了,是同時進行的。所以,raid0要提升性能,條帶做的越小越 導致并發IO幾率降底,因為如果條帶太小,則每次IO 一定會占用大部分物理盤,而隊列中的 條帶太大,又不能充分提高傳輸速度,這兩個是一對矛盾,按照需求來采用不同的方式。我們接著分析raid0相對于單盤的性能變化。根據以上總結出來的公式,可以推得以下表格:RAID0讀寫并發IO順序IO并發IO順序
8、IOIOPS隨機IO連續IO隨機IO連續IO隨機IO連續IO隨機IO連續IOIosize/stripsize較大不支持不支持提升極小提升了 N 乘系數 倍不支持不支持提升極小提升了 N 乘系數 倍Iosize/stripsize較小提升了(1+并發系數)倍提升了(1+并發系數+系數)提升極小提升了系數倍提升了(1+并發系 數)倍提升了(1+并發系數+ 系數)提升極小提升了系數倍注:并發10和10 size/strip size是一對矛盾,兩者總是對立。N =組成raidO的磁盤數目。系數=io size/strip size和初始LBA地址所處的strip偏移綜合系數,大于等于1。并發系數=并
9、發I0的數量Raid1Raid1 是這樣一種模式,我們拿2 塊盤的例子來說明Raidl和raidO不同,raidO對數據沒有任何保護措施,每個block都沒有備份或者校驗保 護措施。Raid對虛擬邏輯盤上的每個物理block,都在物理盤上有一份鏡像備份。也就是說 數據有兩份。對于raidl的寫10,速度不但沒有提升,而且有所下降,因為數據要同時向 多塊物理盤寫,時間以最慢的你個為準,因為是同步的。而對于raidl的讀I0請求,不但 可以并發,而且就算順序IO的時候,控制器也可以象raid0 一樣,從兩塊物理盤上同時讀 數據,提升速度。Raid1沒有srip的概念。同樣我們總結出一個表格:RAI
10、D1讀寫并發IO順序IO并發IO順序IOIOPS隨機IO連續IO隨機IO連續IO隨機IO連續IO隨機IO連續IO提升N或者并發系數倍提升N倍 或者并發系數提升極小提升了 N倍不支持事物性IO可并 發,提升并發系 數倍沒有提升沒有提升注:raid1沒有strip的概念。N=組成raid1鏡像物理盤的數目。在讀、并發IO的模式下,由于可以并發N個IO,每個IO占用一個物理盤,這就相當于提 升了 N倍的IOPS。由于每個IO只獨占了一個物理盤,所以速度相對于單盤并沒有改變,所 以不管是隨機還是順序IO,相對單盤都不變。在讀、順序10、隨機10模式下,由于10不能并發,所以此時一個10可以同時讀取N個
11、盤 上的內容,但是是在隨機I0模式下,那么尋道時間影響很大,縱使同時分塊讀取多個磁盤 的內容,也架不住尋道時間的抵消,所以性能提升極小在讀、順序10、連續I0模式下,尋道時間影響到了最低,此時傳輸速率為主要矛盾,同時 讀取多塊磁盤的數據,時間減少為1/N,所以性能提升了 N倍。寫I0的時候和讀I0情況相同,就不做分析了。寫I0因為要同時向每塊磁盤寫入備份數據, 所以不能并發10,也不能分塊并行。但是如果控制器把優化算法做到極至的話,還是可以 并發I0的,比如控制器從I0隊列中提取連續的多個10,可以將這些I0合并,并發寫入磁 盤。前提這幾個I0必須是事物性的,也就是說LBA必須連續,不然不能作
12、為一個大的合并 10,而且和文件系統也有關系,文件系統碎片越少,并發幾率越高。Raid2raid2是一種比較特殊的raid模式,他是一種專用raid,現在早已被淘汰。他的基本思想 是,I0到來之后,控制器將數據分割開,在每塊物理磁盤讀或者寫1bit。這里有個疑問, 磁盤的最小I0單位是扇區,512字節,如何寫入1bit呢?其實這個寫入1bit,并非只寫入 1bi t。我們知道上層10,可以先經過文件系統,然后才通過磁盤控制器驅動來向磁盤發出 10,最終的I0大小,都是N倍的扇區,也就是Nx512字節,N大于等于1,不可能發生N 小于 1 的情況,即使你需要的數據只有幾個字節,那么也同樣要讀出或
13、者寫入整個扇區,也 就是512字節。明白這個原則之后,我們再來看一下raid2中所謂的“每個磁盤寫lbit” 是個什么概念。0最小單位為扇區,512字節,我們就拿一個4塊數據盤+ 3塊校驗盤的raid2 系統給大家來說明一下。這個環境中,raid2的一個條帶大小是4bit (1bit乘4塊數據盤), 而I0最小單位是一個扇區,那么如果分別向每塊盤寫1bit,就需要分別向每塊盤寫一個扇 區,每個扇區只包含1bit有效數據,這顯然是不好的,因為太浪費空間,沒有意義。因為I0數據到來時,我們拿以下I0請求為例:寫入 初始扇區10000長度1,這個I0目的是要向LBA10000寫入一個扇區的數據,也就
14、是512字節。Raid2控制 器接受到這512字節的數據之后,先將其放入cache,然后計算需要寫入的物理磁盤的信息, 比如定位到物理扇區,分割數據成bit,然后一次性寫入物理磁盤扇區。也就是說第一塊物 理盤,控制器會寫入本次I0數據的第1、5、9、13、17、21。等等 位,第二塊物理盤會寫入2、 6、 10、 14、 18、 22。等等位,其他兩塊 物理盤同樣方式寫入。直到這樣將數據寫完。我們可以計算出來,這512字節的數據寫完之 后,此時每塊物理盤只包含128字節的數據,也就是一個扇區的四分之一,那么這個扇區剩 余的部分,就是空的。如果要利用起這部分空間,那么等下次I0到來之后,控制器對
15、數據 進行bit分割,將要填入這些空白區域的數據,控制器將首先讀出原來的數據,然后和新數 據合并之后,一并再寫回這個扇區,這樣做效率和速度都大打折扣。我們可以發現,其實 raid2 就是將原本連續的一個扇區的數據,以位為單位,分割存放到不連續的多塊物理盤上, 因為這樣可以全組并行讀寫,提高性能。每個物理磁盤扇區其實是包含了N個扇區的“殘 體”。那么如果出現需要更新這個10的4個扇區中某一個扇區的情況,怎么辦?這種情況 下,必須先讀出原來的數據,和新數據合并,然后在一并寫入。其實這種情況出現的非常少。 我們知道上層I0的產生,一般是需要先經過os的文件系統,然后才到磁盤控制器這一層的。 所以磁盤
16、控制器產生的10, 一般都是事務性的,也就是這個I0中的所有扇區,很大幾率上 對于上層文件系統來說,是一個完整的事務,所以很少會發生只針對這個事務中某一個原子 進行讀寫的情況。這樣的話,每次I0很大幾率都會包含入這些邏輯上連續的扇區的,所以 不必擔心經常會發生那種情況,即便發生了,控制器也只能按照那種低效率的做法來做,不 過總體影響較小。但是如果隨機I0比較多,那么這些I0初始LBA,很有可能就會命中在一 個兩個事務交接的扇區處,這種情況,就導致速度和效率大大降低了。連續I0出現這種情 況的幾率非常小了。Raid2因為每次讀寫都需要全組磁盤聯動,所以為了最大化其性能,最好保證每塊磁盤主軸 同步
17、,使得同一時刻每塊磁盤磁頭所處的扇區邏輯編號都一致,并存并取,達到最佳性能, 如果不能同步,則會產生等待,影響速度。基于raid2的并存并取的特點,raid2不能實現并發10,因為每次I0都占用了每塊物理磁 盤。Raid2的校驗盤對系統不產生瓶頸,但是產生延遲,因為多了計算校驗的動作。校驗位和數 據位是一同并行寫入或者讀取的。Raid2采用海明碼來校驗數據,這種碼可以判斷修復一位 錯誤的數據,并且使用校驗盤的數量太多, 4塊數據盤需要3塊校驗盤,但是隨著數據盤數 量的增多,校驗盤所占的比例會顯著減小。Raid2和raidO有些不同,raidO不能保證每次I0都是多磁盤并行,因為raidO的分塊
18、相對 raid2以位為單位來說是太大了,而raid2由于她每次I0都保證是多磁盤并行,所以其數 據傳輸率是單盤的N倍,為了最好的利用這個特性,就需要將這個特性的主導地位體現出來, 而根據IOPS = IO并發系數/ (尋道時間+數據傳輸時間),尋道時間比數據傳輸時間大幾個 數量級,所以為了體現數據傳輸時間減少這個優點,就必須避免尋道時間的影響,而避免其 影響的最佳做法就是:盡量產生連續I0而不是隨機10,所以,raid2最適合連續I0的情況。 另外,根據每秒I0吞吐量=10并發系數乘IO SIZE乘V/ (V乘尋道時間+ 10 SIZE),如 果將I0 size也增大,則每秒I0吞吐量也將顯著
19、提咼。所以,raid2最適合的應用,就是: 產生連續I0,大塊I0的情況,不言而喻,文件服務,視頻流服務等等這些應用,適合raid2, 不過,raid2的缺點太多,比如校驗盤數量多,算法復雜等等,它逐漸的被raid3替代了。RAID2讀寫順序I0順序I0IOPS非事務性隨機I0 事務性隨連續I0非事務性隨機I0 事務性隨連續I0機IO機IOIO滿足公式條件提升極小提升極小提升N倍性能降低提升極小提升N倍注:N=數據盤數量。Raid2不能并發10Raid3由于raid2缺點比較多,比如非事務性I0對他的影響,校驗盤數量太多等等。Raid2的劣 勢,就在于它的將數據以bit為單位,分割,將原本物理
20、連續的扇區,轉變成物理不連續, 邏輯連續的,這樣就導致了它對非事務性I0的效率低下。為了從根本上解決這個問題,raid3 出現了。既然要從根本上解決這個問題,首先就是需要拋棄raid2對扇區進行分散的做法。 Raid3保留了扇區的物理連續。Raid2將數據以bit為單位分割,這樣為了保證每次I0占用 全部磁盤的并行性。而raid3同樣也保留了這個特點,但是沒有以bit為單位來分散數據, 而就是以扇區或者幾個扇區為單位來分散數據。Raid3還采用了高效的X0R校驗算法,但是 這種算法只能判斷數據是否有誤,不能判斷出哪一位有誤,更不能修正。X0R校驗使得raid3 不管多少塊數據盤,只需要一塊校驗
21、盤就足夠了。Raid3 的每一個條帶,其長度很小,深度為 1。這樣的話,每個 segment 的大小一般就是 1 個扇區或者幾個扇區的容量。以上圖的例子來看, 4塊數據盤,一塊校驗盤,每個 segment, 也就是圖中的一個block portion,假如為2個扇區大小,也就是lk,則整個條帶大小為 4k,如果一個segment大小為8個扇區,即4k,則整個條帶大小為16K。我們還是用一個例子來說明raid3的作用機制。比如,一個4數據盤,1校驗盤的raid3系統,segment size為2個扇區大小即1k。raid3控制器接受到了這么一個IO:寫入初始扇區 10000長度8,即總數據量為8
22、乘512字節=4k。則控制器先定位LBA10000所對應的真實物理LBA, 假如LBA10000恰好在第一個條帶的第一個segment的第一個扇區上,那么控制器將這個IO 數據里的第 1、2 個 512 字節寫入這個扇區,同一時刻,第3、4 個 512 字節會被同時寫入這 個條帶的第二個 segment 中的兩個扇區,其后的數據同樣被寫入第3、4 個 segment 中,此 時恰好是4k的數據量。也就是說這4k的IO數據,同時被寫入了 4塊磁盤,每塊磁盤寫入 了兩個扇區,也就是一個segmen t,他們是并行寫入的,包括校驗盤,也是并行寫入的,所 以 raid3 的校驗盤沒有瓶頸,但是有延遲,
23、因為增加了計算校驗的開銷。但現代控制器一般 都使用專用的XOR硬件電路而不是cpu來計算xor,這樣就使得延遲降到最低。上面那個情 況是IO size剛好等于一個條帶大小的時候,如果10 size小于一個條帶大小呢?我們接著 分析,還是剛才那個環境,此時控制器接收到10大小為2K的寫入請求,也就是4個連續扇 區,那么控制器就只能同時寫入兩個磁盤了,因為每個盤上的segment是2個扇區,其他兩 個磁盤此時就是空閑的,也只能得到兩倍的單盤傳輸速率。我們再來看看IOsize大于一個 條帶大小的情況,會發生什么。還是那個環境,控制器收到的IO size=16k。則控制器一 次所能并行寫入的,是4k,
24、這16k就需要分4批來寫入4個條帶。其實這里的分4批寫入, 不是先后,而還是同時,也就是這16k中的第1、5、9、13k將由控制器連續寫入磁盤1, 第2、6、10、14k,連續寫入磁盤2,依此類推,直到16k數據全部寫完,是并行一次寫完, 這樣校驗盤也可以一次性計算校驗值并且和數據一同并行寫入。而不是“分批”。通過比較,我們發現,與其使得IO size小于一個條帶的大小,空閑一些磁盤,不如使得 Io size大于或者等于條帶大小,使得沒有磁盤空余。因為上層IO size是不受控的,控制 器說了不算,但是條帶大小是控制器說了算的,所以如果將條帶大小減少到很小,比如2 個扇區,一個扇區,則每次上層
25、IO, 一般情況下都會占用所有磁盤,進行并發傳輸。可以 提供和raid2 一樣的傳輸速度,并避免raid2的諸多缺點。Raid3和raid2 一樣,不能并發 IO,因為一個IO要占用全部盤,就算IO size小于st rip size,因為校驗盤的獨享,也 不能并發IO。RAID3讀寫并發IO順序IO并發IO順序IOIOPS隨機IO連續IO隨機IO連續IO隨機IO連續IO隨機IO連續IOIo size 大 于 strip size不支持不支持提升極小提升了 N倍不支持不支持提升極小提升了 N倍Io size 小 于 strip size不支持事物性IO可并 發,提升 并發系 數倍提升極小提升了
26、 N乘IOsize/stripsize 倍不支持事物性IO可并 發,提升 并發系 數倍提升極小提升了 N乘IOsize/stripsize 倍注:N=組成raid3的數據磁盤數量。和raid2相同,事物性連續IO可能并發。和raid2 樣,raid3同樣也是最適合連續大塊IO的環境,但是它比raid2成本更低,更容易部署。具體分析:不管任何形式的raid,只要是面對隨機IO,其性能比單盤沒有大的優勢,因為raid作所的 只是提高傳輸速率,并發IO,容錯。隨機IO只能靠降低單個物理磁盤的尋道時間來解決。而raid不能優化尋道時間。所以隨機IO, raid3也同樣沒有優勢。連續10,因為尋道時間的
27、影響因素可以忽略,raid3最拿手,因為象raid2 樣,raid3可 以大大加快數據傳輸速率,因為他是多盤并發讀寫。所以理論上可以相對單盤提高N倍的速 率。Raid4不管是Raid2還是raid3,他們都是為了大大提高數據傳輸率而設計,而不能并發10。諸如 數據庫等等應用,他們的特點就是隨機I0和小塊10。想提高這種環境的IOPS,根據公式: IOPS = IO并發系數/(尋道時間+數據傳輸時間),隨機讀導致尋道時間很大,靠提高傳輸 許率已經不是辦法。所以觀察這個公式,想在隨機10頻發的環境中提高IOPS,唯一能夠做 的,只有提高I0并發系數,不能并發I0的,想辦法讓他并發10,并發系數小的
28、,想辦法 提高系數。在raid3的基礎上,raid4被發展起來。我們分析raid3的性能的時候,曾經提到過一種情 況,就是io size小于st rip size的時候,此時有磁盤處于空閑狀態,而如果抓住這個現 象,同時讓隊列中的下一個I0來利用這些空閑的磁盤,豈不是正好達到并發I0的效果了么? 所以raid4將一個segment的大小做的比較大,以至于平均I0 size總是小于st rip size, 這樣就能保證每個I0少占用磁盤,甚至一個I0只占用一個磁盤。是的,這個思想對于讀I0是對路子的,但是對于寫I0的話,有一個很難克服的問題,那就 是校驗盤的爭用。考慮這樣一種情況:4塊數據盤+
29、1塊校驗盤組成的raid4系統,某時刻 一個I0占用了前兩塊盤+校驗盤,此時雖然后兩塊是空閑的,可以同時接受新的I0請求, 但是如果接受了新的I0請求,則新I0請求同樣也要使用校驗盤,由于一塊物理磁盤不能同 時處理多個10,所以新I0雖然占有了數據盤的寫權限,但是寫校驗盤的時候,仍然要等舊 I0寫完后,才能寫入校驗,新I0才能完成,這樣的話,就和順序I0無異了,數據盤可并 發而校驗盤不可并發,這樣不能實現并發10。下面我們來說幾個概念。整條寫、重構寫與讀改寫整條寫(Full-Stripe Write):整條寫需要修改奇偶校驗群組中所有的條帶單元,因此新 的奇偶校驗值可以根據所有新的條帶數據計算
30、得到。不需要額外的讀、寫操作。因此,整條 寫是最有效的寫類型。整條寫的例子,比如raid2, raid3。他們每次I0總是幾乎能保證占 用所有盤,因此每個條帶上的每個segment都被寫更新,所以控制器可以直接利用這些更新 的數據計算出校驗數據之后,在數據被寫入數據盤的同時,將計算好的校驗信息寫入校驗盤。重構寫(Reconstruct Write):如果要寫入的磁盤數目超過陣列磁盤數目的一半,采取重 構寫方式。在重構寫中,從這個條帶中不需要修改的 segment 中讀取原來的數據,再和本條 帶中所有需要修改的 segment 上的新數據計算奇偶校驗值,并將新的 segment 數據和沒有更 改
31、過的segment數據以及新的奇偶校驗值一并寫入。顯然,重構寫要牽涉更多的I/O操作, 因此效率比整條寫低。重構寫的例子,比如raid4中,如果數據盤為8塊,某時刻一個IO 只更新了一個條帶的6個segment,剩余兩個沒有更新,則重構寫模式下,會將沒有被更新 的兩個 segment 的數據讀出,和需要更新的前6 個 segment 的數據計算出校驗數據,然后將 這8個segment連同校驗數據一并寫入磁盤。可以看出,這個操作只是多出了讀兩個segment 中數據的操作。讀改寫(Read-Modify Write):如果要寫入的磁盤數目不足陣列磁盤數目的一半,采取讀 改寫方式。讀改寫過程如下:
32、(1)從需要修改的 segment 上讀取舊的數據;(2)從條帶上 讀取舊的奇偶校驗值;(3)根據舊數據、舊校驗值和需要修改的 segment 上的新數據計算 這個條帶上的新的校驗值;(4)寫入新的數據和新的奇偶校驗值。這個過程中包含讀取、 修改、寫入的一個循環周期,因此稱為讀改寫。讀改寫計算新校驗值的公式為 新數據的校 驗數據=(老數據EOR新數據)EOR老校驗數據。如果待更新的segment已經超過了條帶 中總segment數量的一半,則此時不適合使用讀改寫,因為讀改寫需要讀出這些segment 中的數據和校驗數據,而如果采用重構寫,只需要讀取剩余不準備更新數據的segment中的 數據即
33、可,而后者數量比前者要少,所以超過一半,用重構寫,不到一半,用讀改寫。整條 更新,就用整條寫。寫效率:整條寫重構寫讀改寫。明白了這些概念之后,我們就可以繼續深入理解raid4 了。如果僅僅根據爭用校驗盤來下結 論說raid4不支持并發IO,在經過了以上三個概念的描述之后,看來顯然是片面的。我們 設想這樣一種情形,某時刻一個IO只占用了全部磁盤的幾塊盤,另一些磁盤空閑,如果此 時讓隊列中下一個IO等待的話,那么當然不可實現并發IO。此時我們考慮:如果隊列中有 這樣一個IO,它需要更新的LBA目標和正在進行的IO恰好在同一條帶上,并且處于空閑磁 盤,而又不沖突,那么此時我們恰好就可以讓這個10也搭
34、一下正在進行的10的順風車,反 正都是要更新這個條帶的校驗segment,與其兩個I0先后更新,不如讓他們同時更新各自 的數據segment,而控制器負責計算本條帶的校驗塊。這樣就完美的達到了 10并發。但是, 有個問題,這種情況遇到的幾率真是小之又小。即便如此,控制器如果可以對隊列中的I0 目標LBA進行掃描,將目標處于同一條帶的10,讓其并發寫入,這就多少類似NCQ技術了, 不過這種技術需要上層軟件的配合,因為亂序10,會失去事務的順序性,所以還需要上層 軟件作一些處理。除了在控制器內部實現這種算法之外,我們還可以直接在上層來實現這種模式。上層就是指 操作系統的文件系統。因為文件系管理著底
35、層磁盤。文件系統決定數據寫往磁盤上的哪些扇 區。所以完全可以在文件系統這個層次上,將兩個不同事物的I0寫操作,盡量放到相同的 條帶上,也就是說,比如一個條帶大小為16k,可以前8k放一個I0的數據,后8k放也另 一個 I0 的數據,這兩個 I0 在經過文件系統的計算之后,經由磁盤控制器驅動程序,向磁盤 發出同時寫入整個條帶的操作,這樣就構成了整條寫,如果實在不能占滿整條,那么也應該 盡量達成重構寫模式,這樣不但并發了 10,還使得寫效率增加。這種在文件系統專門為raid4 做出優化的方案,最點型的就是net app公司的磁盤陣列操作系統dat a on tap,這個操作系 統中文件系統模塊稱為
36、 WAFL。 WAFL 文件系統的設計方式確保能夠最大限度地減少校驗盤尋 址操作。上圖右半部對比顯示了 WAFL如何分配同樣的數據塊,從而使得RAID 4更加有效。 WAFL 總是把相關的數據塊寫到彼此鄰近的條帶中,消除校驗盤上的長時間尋址操作。只要 可能,WAFL也把多重數據塊寫到同樣的條帶中,從而進一步減少校驗盤上的阻塞。FFS在上 圖左半部中使用六道獨立的條帶,因此致使六個校驗盤塊需要更新。 上圖右半部中, WAFL 使用僅僅3道條帶,即只有三個校驗塊需要更新。從而大大提高了 RAID 性能,消除了校驗 盤瓶頸。RAID4IOPS讀寫特別優化的并發I0順序I0特別優化的并發I0順序I0隨
37、機I0連續I0隨機I0連續I0隨機I0連續I0隨機I0連續I0Iosize/stripsize較大沖突沖突提升極小提升了 N倍沖突沖突沒有提升提升了 N倍Iosize/stripsize較小提升極小提升并發系數倍幾乎沒有提升幾乎沒有提升提升并發系數倍提升并發系數乘N倍性能降底性能降底注:N為raid4數據盤數量。Io size/strip size太大則并發IO幾率很小。值得注意的是,如果io size/strip size的值太小,則順序IO讀,不管是連續還是隨機 I0,幾乎都沒有提升。順序IO寫,性能下降,因為io size很小,又是順序I0,則只能進 行讀改寫,性能降底不少。所以,如果要
38、使用raid4,不進行特別優化,是不行的,至少要讓他可以進行并發10。我們 觀察表格可知,并發I0模式下,性能都有所提升。然而如果要優化到并發幾率很高,實則 不容易。目前只有netapp的WAFL文件系統還在使用raid4,其他產品均未見使用。面臨淘 汰,取而代之的是擁有高并發幾率的raid5系統。Raid5為了解決raid4系統不能并發I0困難的窘境,raid5相應而出。Raid4并發困難,是因為他 的校驗盤爭用的問題,如果能找到一種機制,能有效解決這個問題,則實現并發就會非常容 易。Raid5恰恰解決了校驗盤爭用這個問題。Raid5采用分布式校驗盤的做法,將校驗盤打 散在raid組中的每塊
39、磁盤上。如圖所示。每個條帶都有一個校驗segment,但是不同條帶 中其位置不同,在相鄰條帶之間循環分布。為了保證并發IO, raid5同樣將條帶大小做的較 大,以保證每次I0數據不會占滿整個條帶,造成隊列其他I0等待。所以,raid5如果要保 證高并發率,那么每個I0幾乎都是讀改寫模式,尤其是在隨機I0的情況下,所以raid5 擁有較高的寫懲罰,但是在隨機I0頻發的環境下,仍然能保持較高的I0PS。們來分析一下raid5具體的作用機制。以上圖為例的環境,條帶大小80k,每個segment大小16k。某一時刻,上層產生一個寫I0:寫入初始扇區10000長度8,即寫入4k的數據。控制器收到這個I
40、0之后,首先定位真實LBA地址,假設定位到 了第1個條帶的第2個segment (位于圖中的磁盤2)的第1個扇區(僅僅是假設),則控 制器首先對這個segment所在的磁盤發起10寫請求,讀出這8個扇區中原來的數據到cache, 與此同時控制器也向這個條帶的校驗segment所在的磁盤(即圖中的磁盤1)發起I0讀請 求,讀出對應的校驗扇區數據并保存到cache,隨后利用X0R校驗電路來計算新的校驗數據, 利用公式:新數據的校驗數據二(老數據E0R新數據)E0R老校驗數據。現在cache中存 在:老數據,新數據,老校驗數據,新校驗數據。然后控制器立即再次向相應的磁盤同時發 起I0寫請求,將新數據
41、寫入數據segment,將新校驗數據寫入校驗segment,并刪除老數據 和老校驗數據。在上述過程中,這個I0占用的,始終只有1、2兩塊盤,因為所要更新的數據segment我們 假設位于2盤的1條帶的2號segment,而這個條帶對應的校驗segment位于1盤,自始至 終其他任何磁盤都沒有用到。那么如果此時隊列中有這么一個10,他的LBA初始目標假如 位于圖中下方紅框所示的數據segment中(4盤),I0長度也不超過segment的大小,而這 個條帶對應的校驗segment位于3盤上,這兩塊盤未被其他任何I0占用,所以,此時控制 器就可以并發的處理這個10,和上方紅框所示的10,達到并發。
42、Raid5相對于經過特別優化的raid4來說,在底層就實現了并發,可以脫離文件系統的干預, 任何文件系統的10,都可以實現高并發幾率,而不像基于wafl文件系統的raid4,需要在 文件系統上規劃計算出并發環境。Raid5磁盤數量越多,可并發的幾率就越大。RAID5I0PS讀寫并發IO順序I0并發I0順序I0隨機IO連續I0隨機I0連續I0隨機I0連續I0隨機I0連續I0Io size近似strip size不支持不支持提升極小提升了 N倍不支持不支持提升極小提升了N倍IO size大于 segment size重構寫提升并發系數倍提升并發系數倍幾乎沒有提升提升了 I0 size/segmen
43、t size 倍提升并發系數倍提升并發系數倍性能下降提升極小Io size 小于 segment size讀改寫提升并發系數倍提升并發系數倍提升極小沒有提升提升并發系數倍提升并發系數倍性能下降性能下降raid5最適合小塊10,并發I0的情況下,性能都較單盤有所提升。Raid6 raid6 之前的任何 raid 級別,最多能保障在壞掉一塊盤的時候,數據仍然可以訪問,但是 如果同時壞掉兩塊盤,則數據將會丟失。為了增加raid5的保險系數,raid6被創立。Raid6 比raid5多增加了一塊校驗盤,同時也是分布打散在每塊盤上,用另一個方程式來計算新的 校驗數據,這樣,raid6同時在一個條帶上保存
44、了兩份數學上不相關的校驗數據,這樣能夠 保證同時壞兩塊盤的情況下,數據依然可以通過聯立這兩個數學關系等式來求解丟失的數 據。Raid6較raid5在寫的時候,會同時讀取或者寫入額外的一份校驗數據,不過由于是并行同時操作,所以比raid5慢不了多少。其他特性和raid5類似。RAID6IOPS讀寫并發IO順序IO并發IO順序IO隨機IO連續IO隨機IO連續IO隨機IO連續IO隨機IO連續IOIo size近似strip size不支持不支持提升極小提升了 N倍不支持不支持提升極小提升了 N倍IO size大于 segment size重構寫提升并發系數倍提升并發系數倍幾乎沒有提升幾乎沒有提升提升并發系數倍提升并發系數倍性能下降提升極小Io size小于 segment size讀改寫提升并發系數倍提升并發系數倍提升極小沒有提升提升并發系數倍提升并發系數倍性能下降性能下降2# 大 中 小 發表于 2007-7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論