【存储知识学习】第四章-七种RAID-《大话存储》阅读笔记
目錄
一、重要概念
1.漢明碼
2.布爾邏輯運算
3.扇區、塊、段、條帶、條帶長度和深度
4.讀/寫IO
5.大/小塊IO
6.連續/隨機IO
7.順序/并發IO
8.持續/間斷IO
9.穩定/突發IO
10.實/虛IO
11.IO并發幾率
12.IOPS
13.每秒IO吞吐量
二、磁盤陣列
1. RAID 0
2. RAID 1
3. RAID 2
4.RAID 3
5.RAID 4
6.RAID 5
7 RAID6
一、重要概念
1.漢明碼
漢明碼在原有的數據中插入一定數量的校驗位來進行措施檢測和糾錯。比如,對于一組4位數據編碼為例,漢明碼會在者4位中加入三個校驗位,從而使實際數據傳輸達到7位。
需要被插入的漢明碼位數與數據位之間的數量關系為?。漢明碼只能糾正一個位的錯誤。
2.布爾邏輯運算
1 XRO 0 =1,1 XOR 1 = 0 ,0 XOR 0?=0 1 XRO 0 XOR 1 = 0 0 XOR 1?XOR 0?=1不管多少位,進行邏輯運算后還是一位,假如有中間某一位被掩蓋,也完全可以推斷出來。
3.扇區、塊、段、條帶、條帶長度和深度
在下圖RAID0中五個豎條,分別代表5個磁盤。然后再磁盤相同偏移處上共享邏輯分割,形成Stripee。一個Stripee橫跨過的扇區或塊的個數或字節容量,就是條帶長度,即Stripee Length。而一個Stripee所占用的單位塊磁盤上的區域,稱為一個Segment。一個Segment中所包含的dataBlock或者扇區的個數或者字節容量,稱為Stripee Depth。Data Block或者扇區的個數或者字節容量,稱為Stripe Depth。Data Block可以是N倍個扇區大小的容量,應該可以調或者不可調,有控制器而定。
4.讀/寫IO
指令通知磁盤開始扇區的位置,然后給出需要從這個初始山區網吧讀取的連續扇區個數,同時給出動作時讀還是寫。磁盤收到這條指令滿清會按照指令的要求來讀或者寫數據。控制器發出這種指令加數據并得到對方回執的過程就是一次IO讀或者IO寫。
5.大/小塊IO
控制器的指令中給出的連續讀取扇區數目的多少。如果數目很大就是大塊IO,如128,如果很小就是小塊IO。大塊和小塊之間沒有界限。
6.連續/隨機IO
連續和隨機IO指本次IO給出的初始扇區地址應該和上一次IO的結束扇區地址時不是完全連續的或者相隔不多的。是——連續IO,不是——隨機IO。連續IO幾乎不用換道,或者換道時間極短。如果相差太大,則磁頭需要很長的環道時間。隨機IO需要很長的環道時間
7.順序/并發IO
順序IO:發向磁盤的IO只包含了文件系統級下發的一個IO
并發IO:發向磁盤的IO只包含了文件系統級下發的多個IO
8.持續/間斷IO
持續IO:持續不斷地發送或者接受IO請求數據流.
間斷IO:IO數據流時斷時續
9.穩定/突發IO
穩定IO:某存儲設備或者某程序在一段時間內接收或者發送的IOPS以及吞吐量保持相對恒定.
突發IO:單位時間的IOPS或者吞吐量突然猛增,突發IO
10.實/虛IO
實IO:請求讀或者寫實際文件或者磁盤數據區數據
虛IO:針對文件元數據操作,或對磁盤發送非實體數據IO請求。
11.IO并發幾率
單盤:0
RAIO:0.5
12.IOPS
完成一次IO所用的時間=尋道時間+旋轉延遲時間+數據傳輸時間,IOPS=IO并發數/(尋道時間+旋轉延遲時間+數據傳輸時間)。
由于尋道時間相對于傳輸時間要大幾個數量級,所以影響IOPS的關鍵因素就是降低尋道時間。在連續IO的情況下,尋道時間很短,僅在換磁道時候需要尋道。在這個前提下,傳輸時間越少,IOPS越高。
13.每秒IO吞吐量
每秒IO吞吐量=IOPS*平均IO SIZE。IO SIZE越大,IOPS越高,每秒IO吞吐量就越高。設磁頭每秒讀寫數據速度為V,V為定值。則IOPS=IO 并發數/(尋道時間+旋轉延遲時間+IO SIZE/V)。可以看出每秒IO吞吐量的最大因素就是IO SIZE 和尋道時間以及旋轉延遲時間。IO SIZE越大,尋道時間越小,吞吐量越高。相比能顯著影響IOPS的因素就只有一個,就是尋道時間。
二、磁盤陣列
1. RAID 0
左邊是4塊普通硬盤, 右邊是引入分割思想的后的硬盤,使用4個扇區組成的塊作為基本單元。不同硬盤的相同偏移處的塊組合成Stripe,也就是條帶。
當有大塊數據寫入時,數據可以被分為多個塊,寫入4個硬盤,這樣就提高了速度。
假如某一時刻,主控制器發出指令;讀取 初始扇區10000? 長度128。RAID控制器接受到這個指令后,計算邏輯扇區10000對應的物理磁盤扇區號。依次計算出邏輯上連續的下128哥扇區所在物理磁盤的扇區號。分別向對應這些扇區磁盤再次發出指令,讀取數據,磁盤接受道道指令,各自將數據交給RAID控制器,經過控制器,在Cache中的組合,再提交給主機控制器。
如果這128個扇區都落在同一個Segment中,也就是條帶深度大于128個扇區容量,則這次IO只能從就只能真實的從這一塊物理磁盤上讀取,性能反而減慢,還增加控制器開銷,因此要減小條帶深度。在磁盤數量不變的情況下,減少條帶大小(也就是條帶長度)。讓這個IO的數據被控制器分割。同時放滿一個條帶的第一個Segment、第二Segment等。但是條帶太小會導致并發概率低。
因此,如果小塊IO多,則適當增大條帶深度;如果臉上大塊IO多,則適當減小條帶深度。
2. RAID 1
寫IO沒有提升,因為寫數據要向多塊物理盤同時寫數據。但是可以同時從兩塊物理盤上讀數據,提升速度。
?
3. RAID 2
RAID 2 在寫入數據的是常被,計算出他們的漢明碼并寫入校驗陣列,讀取時也要對數據進行校驗,最后再發向系統。
RAID2每次的讀寫都要勸阻磁盤聯動,所以為了優化性能,最好保證每塊磁盤主軸同步,使同一時刻每塊磁盤磁頭所處的扇區邏輯編號都一致,并存并取,達到最佳性能。如果不能同步,則會產生等待,影響速度。
根據IOPS公式,避免尋道時間影響,最佳做法是盡量產生連續IO。RAID2 適合連續IO的情況。
4.RAID 3
RAID2 以bit為單位分割數據,而RAID3以一個扇區或者幾個扇區來分散數據。
采用的是布爾邏輯運算,每次IO都會分散到所有盤,RAID3 把一個邏輯塊又分割成N塊,數據在一次寫入之前,控制器就會計算好校驗塊,然后同時將數據和校驗塊寫入磁盤。
RAID3 的每一個條帶,其長度被設計為一個文件系統塊的大小,深度隨磁盤數量而定,但是最小深度為一個扇區。這樣的話,每個Segment的大小就是1個扇區或者幾個扇區的容量。
這種情況,大塊IO雖然可以提高效率,但小塊IO很不適用。所有磁盤同一時刻都被一個IO占用著。
5.RAID 4
在RAID3 的基礎上進行改造,實現并發IO,保證有空閑的磁盤未被IO占用,控制器一個IO過來,如果這個IO塊小于條帶深度,那么這次IO就會被完全禁錮在一塊磁盤上,直接寫入了一個磁盤的Segment中,這個過程只用到了一塊磁盤,而其他IO也可以個這個IO同時進行,前提是其他IO的目標不是這個IO要寫入或讀取的磁盤。
但有個非常重要的地方就是,每個IO寫操作必須占用校驗盤。
6.RAID 5
整條寫(Full-Stripee?Write):整條寫需要修改奇偶校驗群組中所有的條帶單元,因此新的奇偶校驗值可以根據所有新的條帶數據計算得到,不需要額外的讀、寫操作。因此,整條寫是最有效的寫類型。整條寫的例子,如?RAID?2、RAID?3。它們每次IO總是幾乎能保證占用所有盤,因此每個條帶上的每個Segment都被寫更新,所以控制器可以直接利用這些更新的數據計算出校驗數據之后,在數據被寫入數據盤的同時,將計算好的校驗信息寫入校驗盤。
重構寫(Reconstruct?Write):如果要寫入的磁盤數目超過陣列磁盤數目的一半,可采取重構寫方式。在重構寫中,從這個條帶中不需要修改的?Segment?中讀取原來的數據,再和本條帶中所有需要修改的?Segment?上的新數據計算奇偶校驗值,并將新的?Segment?數據和沒有更改過的?Segment?數據以及新的奇偶校驗值一并寫入。顯然,重構寫要牽涉更多的I/O操作,因此效率比整條寫低。重構寫的例子,比如在RAID?4中,如果數據盤為8塊,某時刻一個IO只更新了一個條帶的6個Segment,剩余兩個沒有更新。在重構寫模式下,會將沒有被更新的兩個Segment的數據讀出,和需要更新的前6個Segment的數據計算出校驗數據,然后將這8個?Segment?連同校驗數據一并寫入磁盤。可以看出,這個操作只是多出了讀兩個Segment?中數據的操作和寫兩個?segment?的操作,但是寫的時候幾乎不產生延遲開銷,因為是宏觀同時寫入。
讀改寫(Read-Modify?Write):如果要寫入的磁盤數目不足陣列磁盤數目的一半,可采取讀改寫方式。讀改寫過程是:先從需要修改的?Segment?上讀取舊的數據,再從條帶上讀取舊的奇偶校驗值;根據舊數據、舊校驗值和需要修改的?Segment上的新數據計算出這個條帶上的新的校驗值;最后寫入新的數據和新的奇偶校驗值。這個過程中包含讀取、修改和寫入的一個循環周期,因此稱為讀改寫。讀改寫計算新校驗值的公式為:新數據的校驗數據=(老數據EOR新數據)EOR老校驗數據。如果待更新的Segment已經超過了條帶中總Segment數量的一半,則此時不適合用讀改寫,因為讀改寫需要讀出這些?Segment?中的數據和校驗數據。而如果采用重構寫,只需要讀取剩余不準備更新數據的?Segment?中的數據即可,而后者數量比前者要少。所以超過一半用重構寫,不到一半用讀改寫。整條更新就用整條寫。
寫效率排列為:整條寫>重構寫>讀改寫。?
?
把校驗盤分隔開,組合與數據盤之中,依附于數據盤。RAID5是繼RAID0和RAID1之后又一個能實現并發IO的陣式。
RAID5寫的基本過程是,新數據過來之后,控制器立即讀取待更新扇區的原數據,同時也要讀取這個條帶上的校驗數據。三者按照公式運算,便可以得出新數據的校驗數據,然后將新數據和新數據的校驗數據寫到磁盤。
新數據的校驗數據=(老數據 EOR 新數據) EOR 老校驗數據。
RAID 5E和RAID 5EE
再磁盤陣列中增加熱備盤,有一個故障盤之后,故障盤的數據,再系統空閑的時候遷移到熱備盤。
7 RAID6
RAID0-RAID5都是只能壞一個盤。RAID6目標是可以壞兩個盤
RAID6采用兩塊校驗盤,每次寫數據的時候,計算兩個等式,將兩個等式的結果寫入校驗盤。
x XOR y =1 Ax XOR Bx=0?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【存储知识学习】第四章-七种RAID-《大话存储》阅读笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python日志详解【两篇就够了系列】-
- 下一篇: 【存储知识学习】第五章-5.1-5.3