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