本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)領(lǐng)域,特別涉及一種基于捎帶回收的瓦記錄RAID寫(xiě)順序化方法及裝置。
背景技術(shù):
作為主要存儲(chǔ)介質(zhì)的傳統(tǒng)磁盤(pán)的面密度很快將要接近1TB/In2極限,也就意味著單盤(pán)的存儲(chǔ)空間已經(jīng)很難再有大幅度的提升,為了解決這一問(wèn)題,近幾年,一種新的磁盤(pán)技術(shù)被業(yè)內(nèi)提出,即瓦記錄(Shingled Magnetic Recording,SMR)技術(shù),其采用部分疊加相鄰磁道的方式進(jìn)一步提升磁盤(pán)的存儲(chǔ)密度,然而,這種疊加磁道的方式在增大了磁盤(pán)存儲(chǔ)容量的同時(shí)卻使得磁盤(pán)無(wú)法直接原地更新,因?yàn)楦聦?xiě)一條磁道上的數(shù)據(jù)會(huì)覆蓋其相鄰磁道上的數(shù)據(jù),為避免相鄰磁道數(shù)據(jù)的損壞,需要做讀修改寫(xiě)(Read-Modify-Write,RMW),正如名字描述的那樣,首先從磁盤(pán)上讀出部分?jǐn)?shù)據(jù),然后修改其中的一部分?jǐn)?shù)據(jù),最后再將修改后的和未修改的數(shù)據(jù)一起寫(xiě)回磁盤(pán),其中讀出的部分?jǐn)?shù)據(jù)要保證在寫(xiě)回時(shí)不會(huì)覆蓋磁盤(pán)上其他位置的有效數(shù)據(jù),因此,最壞的情況下,如果磁盤(pán)存滿有效數(shù)據(jù),一次RMW可能需要操作整個(gè)磁盤(pán),導(dǎo)致嚴(yán)重的寫(xiě)放大,極大的降低磁盤(pán)的非順序?qū)懶阅埽瑸榱藴p小寫(xiě)放大,將RMW控制在一定范圍內(nèi),減小寫(xiě)性能開(kāi)銷,可以將磁盤(pán)劃分為連續(xù)的區(qū)域,即帶(Band),如圖1所示(假設(shè)寫(xiě)一條磁道(Track)最遠(yuǎn)只會(huì)覆蓋下一條磁道上的數(shù)據(jù),即覆蓋率K=2,每個(gè)Band由兩條Track組成),Band之間的編址是連續(xù)的,但是Band之間需預(yù)留一定空間(Gap),確保寫(xiě)B(tài)and0上的任意位置都不會(huì)覆蓋到Band1上的任何數(shù)據(jù),這樣,就可以將寫(xiě)放大控制在一條Band的范圍內(nèi),因此寫(xiě)放大程度取決于Band的大小(Band Size),由于以Band劃分磁盤(pán)需要在相鄰Band間預(yù)留空間,浪費(fèi)了磁盤(pán)存儲(chǔ)容量,為減小磁盤(pán)容量浪費(fèi),Band Size不能太小,因?yàn)锽and Size越小,磁盤(pán)上Band的數(shù)量就越多,磁盤(pán)空間浪費(fèi)就越嚴(yán)重,但即使Band Size設(shè)置為幾十MB左右,用戶的每個(gè)寫(xiě)請(qǐng)求都可能會(huì)引發(fā)RMW,在最壞的情況下需要將整個(gè)Band上的數(shù)據(jù)都讀出,修改完再寫(xiě)回,性能也會(huì)大幅下降。
對(duì)于RAID5\6或者更高維帶校驗(yàn)的RAID系統(tǒng),在非順序?qū)憟?chǎng)景下,由于小寫(xiě)的存在,在磁盤(pán)的每一個(gè)帶上都會(huì)引入頻繁的非順序讀寫(xiě)操作,由于瓦記錄磁盤(pán)非順序?qū)懶阅芎懿?,RAID系統(tǒng)整體的非順序?qū)懶阅軙?huì)受到嚴(yán)重的影響。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種基于捎帶回收的瓦記錄RAID寫(xiě)順序化方法及裝置。
本發(fā)明提出一種基于捎帶回收的瓦記錄RAID寫(xiě)順序化裝置,包括:
結(jié)構(gòu)管理模塊,用于將帶通過(guò)循環(huán)日志的結(jié)構(gòu)進(jìn)行管理;
高速持久緩存模塊,用于接收所有非順序?qū)懻?qǐng)求,當(dāng)高速持久緩存被寫(xiě)到水位時(shí)觸發(fā)下刷,其中將帶劃分為數(shù)據(jù)帶與校驗(yàn)帶,下刷以組為單位進(jìn)行,組之間的寫(xiě)入未產(chǎn)生寫(xiě)覆蓋,組內(nèi)非整條帶的寫(xiě)過(guò)程觸發(fā)小寫(xiě)過(guò)程,同時(shí)在小寫(xiě)讀時(shí)做捎帶回收操作。
各磁盤(pán)上具有相同帶號(hào)的帶組成一個(gè)組。
所述循環(huán)日志包括頭部位置、尾部位置,當(dāng)小寫(xiě)讀完成后,將小寫(xiě)的寫(xiě)請(qǐng)求寫(xiě)入頭部位置,并將頭部位置前移,捎帶回收從所述尾部位置向所述頭部位置順序掃描讀取一段連續(xù)空間的數(shù)據(jù),掃描包含無(wú)效的數(shù)據(jù)塊,從讀出的數(shù)據(jù)塊中提取出有效數(shù)據(jù)塊,并將有效數(shù)據(jù)塊寫(xiě)入所述頭部位置,從而做到將落入帶內(nèi)的隨機(jī)讀與隨機(jī)寫(xiě)轉(zhuǎn)換成隨機(jī)讀與順序?qū)憽?/p>
所述頭部位置與所述尾部位置存在距離N。
當(dāng)進(jìn)行非順序?qū)懻?qǐng)求時(shí),將所述數(shù)據(jù)帶與所述校驗(yàn)帶中與將要寫(xiě)入的數(shù)據(jù)塊相對(duì)應(yīng)的數(shù)據(jù)塊及校驗(yàn)塊讀出,并結(jié)合所述將要寫(xiě)入的數(shù)據(jù)塊計(jì)算新的校驗(yàn)塊,并將所述將要寫(xiě)入的數(shù)據(jù)塊與所述新的校驗(yàn)塊寫(xiě)入帶內(nèi)。
本發(fā)明還提出一種基于捎帶回收的瓦記錄RAID寫(xiě)順序化方法,包括:
步驟1,將帶通過(guò)循環(huán)日志的結(jié)構(gòu)進(jìn)行管理;
步驟2,接收所有非順序?qū)懻?qǐng)求,當(dāng)高速持久緩存被寫(xiě)到水位時(shí)觸發(fā)下刷,其中將帶劃分為數(shù)據(jù)帶與校驗(yàn)帶,下刷以組為單位進(jìn)行,組之間的寫(xiě)入未產(chǎn)生寫(xiě)覆蓋,組內(nèi)非整條帶的寫(xiě)過(guò)程觸發(fā)小寫(xiě)過(guò)程,同時(shí)在小寫(xiě)讀時(shí)做捎帶回收操作。
各磁盤(pán)上具有相同帶號(hào)的帶組成一個(gè)組。
所述循環(huán)日志包括頭部位置、尾部位置,當(dāng)小寫(xiě)讀完成后,將小寫(xiě)的寫(xiě)請(qǐng)求寫(xiě)入頭部位置,并將頭部位置前移,捎帶回收從所述尾部位置向所述頭部位置順序掃描讀取一段連續(xù)空間的數(shù)據(jù),掃描包含無(wú)效的數(shù)據(jù)塊,從讀出的數(shù)據(jù)塊中提取出有效數(shù)據(jù)塊,并將有效數(shù)據(jù)塊寫(xiě)入所述頭部位置,從而做到將落入帶內(nèi)的隨機(jī)讀與隨機(jī)寫(xiě)轉(zhuǎn)換成隨機(jī)讀與順序?qū)憽?/p>
所述頭部位置與所述尾部位置存在距離N。
當(dāng)進(jìn)行非順序?qū)懻?qǐng)求時(shí),將所述數(shù)據(jù)帶與所述校驗(yàn)帶中與將要寫(xiě)入的數(shù)據(jù)塊相對(duì)應(yīng)的數(shù)據(jù)塊及校驗(yàn)塊讀出,并結(jié)合所述將要寫(xiě)入的數(shù)據(jù)塊計(jì)算新的校驗(yàn)塊,并將所述將要寫(xiě)入的數(shù)據(jù)塊與所述新的校驗(yàn)塊寫(xiě)入帶內(nèi)。
由以上方案可知,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明通過(guò)高速持久緩存聚集非順序?qū)懻?qǐng)求,在下刷時(shí)將落入每個(gè)帶內(nèi)的小寫(xiě)讀和小寫(xiě)寫(xiě)拆為兩個(gè)過(guò)程,即當(dāng)所有小寫(xiě)讀都完成后再開(kāi)始小寫(xiě)寫(xiě),在帶內(nèi)小寫(xiě)讀的過(guò)程中捎帶做回收讀,在小寫(xiě)寫(xiě)過(guò)程中將回收讀出的有效數(shù)據(jù)和要下刷的有效數(shù)據(jù)合并為大塊的順序?qū)?,避免帶?nèi)小寫(xiě)產(chǎn)生的RMW過(guò)程,并提升系統(tǒng)的整體性能。
附圖說(shuō)明
圖1為盤(pán)片空間按帶劃分圖;
圖2為帶內(nèi)循環(huán)日志結(jié)構(gòu)圖;
圖3為系統(tǒng)架構(gòu)圖;
圖4為捎帶回收的帶隨機(jī)讀和順序?qū)憟D。
具體實(shí)施方式
本發(fā)明對(duì)瓦記錄磁盤(pán)的帶采用了循環(huán)日志的結(jié)構(gòu)進(jìn)行管理,如圖2所示,寫(xiě)請(qǐng)求寫(xiě)入頭指針位置,并將頭指針前移,黑色區(qū)域?yàn)橛行?shù)據(jù)塊,陰影區(qū)域是由于更新操作產(chǎn)生的無(wú)效數(shù)據(jù)塊,由于瓦記錄技術(shù)不支持原地更新,無(wú)效數(shù)據(jù)塊只能通過(guò)回收操作才能重新被利用,回收操作是從尾指針處向頭指針?lè)较蝽樞驋呙枳x取一段連續(xù)空間的數(shù)據(jù),掃描需包含無(wú)效的數(shù)據(jù)塊,從讀出的數(shù)據(jù)塊中提取出有效數(shù)據(jù)塊,并將有效數(shù)據(jù)塊寫(xiě)入頭指針位置,從而釋放出無(wú)效數(shù)據(jù)塊占用的空間,實(shí)現(xiàn)帶內(nèi)空間的釋放。帶內(nèi)循環(huán)日志結(jié)構(gòu)確保寫(xiě)是順序化的,避免瓦記錄磁盤(pán)的RMW操作,本發(fā)明改進(jìn)了傳統(tǒng)RAID的小寫(xiě)流程,使得小寫(xiě)的寫(xiě)過(guò)程變成了帶內(nèi)的順序?qū)懀瑥亩嵘哂涗汻AID系統(tǒng)非順序?qū)懶阅堋?/p>
本發(fā)明在傳統(tǒng)RAID之上加入了一層高速持久緩存(如:SSD),用來(lái)接收所有非順序?qū)懻?qǐng)求,當(dāng)高速持久緩存被寫(xiě)到水位時(shí)觸發(fā)下刷,如圖3,并將帶劃分為數(shù)據(jù)帶和校驗(yàn)帶,下刷以組(Group)為單位進(jìn)行(圖3中虛線框中不同磁盤(pán)上具有相同帶號(hào)的帶組成一個(gè)組),組之間的寫(xiě)入不會(huì)產(chǎn)生寫(xiě)覆蓋,組內(nèi)非整條帶寫(xiě)會(huì)觸發(fā)小寫(xiě)過(guò)程,在小寫(xiě)讀時(shí)做回收讀,如圖4,帶內(nèi)小寫(xiě)過(guò)程中引入一次回收讀操作,當(dāng)帶內(nèi)所有小寫(xiě)讀操作都完成以后,將小寫(xiě)要寫(xiě)入帶內(nèi)的數(shù)據(jù)與回收讀出的有效數(shù)據(jù)一起順序的寫(xiě)入帶的頭指針處,從而做到將落入帶內(nèi)的隨機(jī)讀和隨機(jī)寫(xiě)轉(zhuǎn)換成隨機(jī)讀和順序?qū)?,只引入了一次帶?nèi)隨機(jī)回收讀的開(kāi)銷,但是將帶內(nèi)多個(gè)隨機(jī)寫(xiě)合并為了順序?qū)?,避免了瓦記錄磁盤(pán)的RMW過(guò)程,且對(duì)傳統(tǒng)RAID5的小寫(xiě)過(guò)程進(jìn)行了順序化。
本發(fā)明提出一種基于捎帶回收的瓦記錄RAID寫(xiě)順序化裝置,包括:
結(jié)構(gòu)管理模塊,用于將帶通過(guò)循環(huán)日志的結(jié)構(gòu)進(jìn)行管理;
高速持久緩存模塊,用于接收所有非順序?qū)懻?qǐng)求,當(dāng)高速持久緩存被寫(xiě)到水位時(shí)觸發(fā)下刷,其中將帶劃分為數(shù)據(jù)帶與校驗(yàn)帶,下刷以組為單位進(jìn)行,組之間的寫(xiě)入未產(chǎn)生寫(xiě)覆蓋,組內(nèi)非整條帶的寫(xiě)過(guò)程觸發(fā)小寫(xiě)過(guò)程,同時(shí)在小寫(xiě)讀時(shí)做捎帶回收操作。
各磁盤(pán)上具有相同帶號(hào)的帶組成一個(gè)組。
所述循環(huán)日志包括頭部位置、尾部位置,當(dāng)小寫(xiě)讀完成后,將小寫(xiě)的寫(xiě)請(qǐng)求寫(xiě)入頭部位置,并將頭部位置前移,捎帶回收從所述尾部位置向所述頭部位置順序掃描讀取一段連續(xù)空間的數(shù)據(jù),掃描包含無(wú)效的數(shù)據(jù)塊,從讀出的數(shù)據(jù)塊中提取出有效數(shù)據(jù)塊,并將有效數(shù)據(jù)塊寫(xiě)入所述頭部位置,從而做到將落入帶內(nèi)的隨機(jī)讀與隨機(jī)寫(xiě)轉(zhuǎn)換成隨機(jī)讀與順序?qū)憽?/p>
所述頭部位置與所述尾部位置存在距離N。
當(dāng)進(jìn)行非順序?qū)懻?qǐng)求時(shí),將所述數(shù)據(jù)帶與所述校驗(yàn)帶中與將要寫(xiě)入的數(shù)據(jù)塊相對(duì)應(yīng)的數(shù)據(jù)塊及校驗(yàn)塊讀出,并結(jié)合所述將要寫(xiě)入的數(shù)據(jù)塊計(jì)算新的校驗(yàn)塊,并將所述將要寫(xiě)入的數(shù)據(jù)塊與所述新的校驗(yàn)塊寫(xiě)入帶內(nèi)。
下面給出本發(fā)明的具體實(shí)施方式,結(jié)合附圖對(duì)本發(fā)明做出了詳細(xì)描述,其中本發(fā)明包括非順序?qū)懻?qǐng)求聚集和捎帶回收寫(xiě)順序化兩個(gè)部分。
非順序?qū)懻?qǐng)求聚集:
如圖3所示,將所有非順序?qū)?D8'、D3'、D1')寫(xiě)入高速持久緩存中(如SSD),當(dāng)持久緩存被寫(xiě)入一定水位(water level)后,觸發(fā)下刷操作,假設(shè)數(shù)據(jù)塊D8'、D3'、D1'應(yīng)當(dāng)被寫(xiě)入Disk0:Band1中,由于是非滿條帶寫(xiě),會(huì)觸發(fā)RAID5小寫(xiě)流程(假設(shè)是讀改寫(xiě)),需先將Disk0:Band1中舊的數(shù)據(jù)塊D8、D3、D1和Disk1:Band1中舊的校驗(yàn)塊P8、P3、P1讀出(帶內(nèi)隨機(jī)讀),跟新的D8'、D3'、D1'計(jì)算出新的校驗(yàn)P8'、P3'、P1',再將新數(shù)據(jù)塊和校驗(yàn)塊寫(xiě)回帶內(nèi)。
捎帶回收的寫(xiě)順序化:
如圖4,以讀舊的D8、D3、D1、回收讀和寫(xiě)新的D8'、D3'、D1'、回收讀的有效數(shù)據(jù)為例,小寫(xiě)讀時(shí)隨機(jī)讀D8、D3、D1是原有的小寫(xiě)讀開(kāi)銷,捎帶回收引入一次額外的隨機(jī)讀,即回收讀,當(dāng)帶內(nèi)所有小寫(xiě)讀和回收讀都完成后,將回收讀出的有效數(shù)據(jù)和新的D8'、D3'、D1'順序?qū)懭霂У念^指針處,圖4中的最遠(yuǎn)寫(xiě)距離為循環(huán)日志的頭指針和尾指針之間的最遠(yuǎn)距離,由于瓦記錄磁盤(pán)相鄰磁道會(huì)產(chǎn)生寫(xiě)覆蓋,因此頭指針和尾指針之間必須保持一定距離N,其中N的大小既取決于前面提到的瓦記錄寫(xiě)覆蓋率K,即寫(xiě)一條磁道最遠(yuǎn)會(huì)覆蓋到的磁道數(shù)量,又跟相鄰磁道上扇區(qū)的偏移有關(guān)(相鄰磁道上的扇區(qū)的物理位置并不是嚴(yán)格按照半徑方向?qū)R的),因此N值與廠商具體的產(chǎn)品采用的技術(shù)程度有關(guān),本發(fā)明中N的大小≈磁道的扇區(qū)數(shù)量*(K-1),N以扇區(qū)為單位。
對(duì)于未優(yōu)化的以帶為單位的RMW過(guò)程,小寫(xiě)讀是原有的開(kāi)銷,小寫(xiě)的寫(xiě)在帶內(nèi)是非順序?qū)?,因此最壞的情形需要將整個(gè)帶內(nèi)的數(shù)據(jù)都讀出,跟新數(shù)據(jù)合并后再寫(xiě)回,本發(fā)明只引入了一次隨機(jī)回收讀的開(kāi)銷,并且將原有的小寫(xiě)的隨機(jī)寫(xiě)轉(zhuǎn)換成了順序?qū)?,提升了系統(tǒng)整體性能。