一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法
【專利摘要】本發(fā)明公開了一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,將瓦記錄磁盤直接應(yīng)用到現(xiàn)有的存儲系統(tǒng)中,基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層進(jìn)行讀寫處理;對于地址映射表,采用段內(nèi)動(dòng)態(tài)塊映射的方法,有效的減少了瓦記錄磁盤的寫放大倍數(shù),提高了磁盤性能;同時(shí),SSTL使用了一種基于最近最久未被訪問段的寫緩存替換算法來管理瓦記錄磁盤中的非易失性緩存NVRAM;本發(fā)明提供的這種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,有效的減少了數(shù)據(jù)寫入操作和段整理操作的次數(shù),降低了瓦記錄磁盤的寫放大倍數(shù),顯著的提高了瓦記錄磁盤的性能。
【專利說明】
一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于數(shù)據(jù)存儲技術(shù)領(lǐng)域,更具體地,涉及一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法?!颈尘凹夹g(shù)】
[0002]磁盤作為計(jì)算機(jī)系統(tǒng)最主要的數(shù)據(jù)存儲設(shè)備,發(fā)展至今已經(jīng)有60余年的歷史。但是,超順磁效應(yīng)阻礙了磁記錄面密度的提升。當(dāng)前,使用垂直磁記錄技術(shù)的磁盤的面密度已經(jīng)達(dá)到了上限值1 Tb = in2。瓦記錄技術(shù)通過部分重疊磁道的方式來提升磁道密度。
[0003]磁記錄磁盤存在一個(gè)固有的缺點(diǎn):寫入數(shù)據(jù)到當(dāng)前磁道會覆蓋后續(xù)磁道的數(shù)據(jù), 導(dǎo)致后續(xù)磁道數(shù)據(jù)的丟失;瓦記錄技術(shù)采用部分重疊磁道的方式來記錄數(shù)據(jù);瓦記錄磁盤不能直接替代傳統(tǒng)磁盤應(yīng)用到現(xiàn)有的存儲系統(tǒng)中。為了克服瓦記錄技術(shù)寫入操作的物理限制,現(xiàn)在有兩種解決方案,一是采用瓦記錄轉(zhuǎn)換層STL(ShingleTranslat1nLayer)來掩蓋寫入操作上的差異;二是設(shè)計(jì)瓦記錄磁盤專用的文件系統(tǒng)或?qū)ο蟠鎯ο到y(tǒng);上述兩種方案, 均需解決瓦記錄磁盤不能覆蓋寫引入的寫放大問題。
[0004]現(xiàn)有技術(shù)中,采用基于段結(jié)構(gòu)的數(shù)據(jù)布局管理方法讀寫,將磁盤的整個(gè)盤面分成多個(gè)瓦記錄區(qū),每個(gè)區(qū)包含了多個(gè)連續(xù)的磁道;在徑向方向上,每個(gè)瓦記錄區(qū)分割成大小相同的段,每個(gè)段有唯一邏輯段號;在每個(gè)段中,同一磁道上的扇區(qū)組成一個(gè)塊;由此,整個(gè)磁盤按照“區(qū)-段-塊-扇區(qū)”的形式組織起來;該方案將寫放大從區(qū)降到了段大小,但基于段結(jié)構(gòu)的瓦記錄磁盤的就地更新模式和段級寫放大仍需要進(jìn)一步優(yōu)化。
【發(fā)明內(nèi)容】
[0005]針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,其目的在于對段結(jié)構(gòu)瓦記錄磁盤的存儲地址映射和非易失緩存區(qū)管理進(jìn)行優(yōu)化,解決段結(jié)構(gòu)瓦記錄磁盤就地更新帶來的寫放大問題。
[0006]為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,包括如下步驟:
[0007](1)當(dāng)SSTL(基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層,Segment based Shingle Translat1n Layer)接收到上層請求,判斷請求類型,若為讀請求,進(jìn)入步驟(2),若為寫請求,則進(jìn)入步驟(7);
[0008](2)由SSTL查找讀、寫緩存,判斷讀、寫緩存中是否存在與請求匹配的內(nèi)容,若是, 則獲取請求的數(shù)據(jù),并向請求方反饋所述數(shù)據(jù);若否,則進(jìn)入步驟(3);
[0009](3)由SSTL獲取邏輯段號(LSN)、邏輯塊索引(LCI)和邏輯區(qū)號(LRN);[〇〇1〇] (4)以邏輯段號作為索引,在地址映射表中獲取段轉(zhuǎn)換頁;
[0011](5)采用邏輯塊索引從所述段轉(zhuǎn)換頁中獲取實(shí)際的塊索引值;
[0012](6)獲取請求的物理地址PBA = LRN*Sreg+LCI*ST+(LBA mod Sreg)/Sseg*Schk+ Noff set;從所述物理地址獲取數(shù)據(jù),并向請求方反饋所述數(shù)據(jù);[0〇13]其中,Sreg是指區(qū)大小,ST是指磁道大小,Sseg是指段大小,Schk是指塊大??;LBA mod Sreg是指邏輯塊地址對Sreg取余操作;Noffset是指塊內(nèi)偏移地址;
[0014](7)由SSTL查找寫緩存,判斷寫緩存中是否存在與請求匹配的內(nèi)容,若是,由SSTL 用擬寫入的數(shù)據(jù)替換緩存中的舊數(shù)據(jù);若否,則進(jìn)入步驟(8);
[0015](8)由SSTL查找讀緩存,判斷讀緩存中是否存在與請求匹配的內(nèi)容,若是,則刪除讀緩存中的舊數(shù)據(jù),并進(jìn)入步驟(9);若否,則將寫請求的數(shù)據(jù)寫入寫緩存中,并進(jìn)入步驟 (9);[〇〇16]其中,舊數(shù)據(jù)是指緩存中與寫請求對應(yīng)的地址上存儲的數(shù)據(jù);
[0017](9)判斷寫緩存是否足夠空閑空間,若是,則由SSTL將寫請求的數(shù)據(jù)寫入寫緩存中;若否,則進(jìn)入步驟(10);
[0018](10)由SSTL采用最近最久未被訪問段的寫緩存替換算法,選擇擬替換出緩存的段;
[0019](11)判斷磁盤是否有足夠的空間容納擬寫入的數(shù)據(jù),若是,則將所述擬替換出緩存的段按照動(dòng)態(tài)塊映射方法寫入磁盤;若否,則進(jìn)入步驟(12);
[0020](12)由SSTL將磁盤上整個(gè)段的內(nèi)容存儲到內(nèi)存,并與從緩存中替換出來的段進(jìn)行合并,將合并獲得的數(shù)據(jù)寫到磁盤。
[0021]優(yōu)選地,上述基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,地址映射表按照如下方法進(jìn)行管理:
[0022](a)地址映射表包含多個(gè)段轉(zhuǎn)換頁,每個(gè)段轉(zhuǎn)換頁記錄一個(gè)段的地址映射信息;
[0023](b)將經(jīng)動(dòng)態(tài)塊映射的每個(gè)數(shù)據(jù)塊的索引值作為地址映射信息保存在段轉(zhuǎn)換頁中;
[0024](c)將段轉(zhuǎn)換頁按照邏輯段號順序存儲在地址映射表中;
[0025](d)當(dāng)SSTL接收到邏輯段號,將所述邏輯段號作為索引值順次查找,從地址映射表中獲取段轉(zhuǎn)換頁。
[0026]優(yōu)選地,上述基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,其段內(nèi)動(dòng)態(tài)塊映射方法具體如下:
[0027](I)以段作為數(shù)據(jù)管理單位;段內(nèi)的數(shù)據(jù)塊可以存放在段內(nèi)任意位置;
[0028](II)對于數(shù)據(jù)的寫入或修改操作,將擬寫入或修改的數(shù)據(jù)順序追加到數(shù)據(jù)段的尾部;[〇〇29](III)對于數(shù)據(jù)段段尾數(shù)據(jù)的更新操作,則采用擬寫入數(shù)據(jù)直接覆蓋段尾的舊版本數(shù)據(jù)。
[0030]優(yōu)選地,上述基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,其步驟(10)中所述最近最久未被訪問段的寫緩存替換算法,具體如下:
[0031](10-1)由LRU_S(Least Recently Used—Segment,最近最久未訪問段)將LRU (Least Recently Used)鏈表劃分為LRU工作鏈表和LRU替換鏈表;[〇〇32]其中,LRU工作鏈表采用塊的形式組織數(shù)據(jù),替換單元為塊;LRU替換鏈表采用段的形式組織數(shù)據(jù),替換單元為段所包含的數(shù)據(jù)塊組;[〇〇33](10-2)當(dāng)收到數(shù)據(jù)寫入請求,而寫入請求所對應(yīng)的數(shù)據(jù)塊不在緩存中時(shí),則將該數(shù)據(jù)塊直接插入到LRU工作鏈表中;
[0034](10-3)當(dāng)LRU鏈表中的數(shù)據(jù)塊被再次訪問,將該數(shù)據(jù)塊插入到LRU工作鏈表的頭部;[〇〇35](10-4)當(dāng)LRU工作鏈表已滿,而有新的數(shù)據(jù)插入時(shí),采用新的數(shù)據(jù)替換LRU工作鏈表尾部的數(shù)據(jù)塊;將被替換出的數(shù)據(jù)塊插入到LRU替換鏈表中;
[0036](10-5)將LRU替換鏈表中的段按照各段所包含的塊的數(shù)目由少到多依次排序;[〇〇37](10-6)當(dāng)LRU替換鏈表已滿,則由LRU-S把LRU替換鏈表中包含數(shù)據(jù)塊最多的段寫到磁盤。
[0038]優(yōu)選地,上述基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,其步驟(10-6)具體如下: [〇〇39]由LRU-S從指針數(shù)組的第N個(gè)指針開始,往第(N+i)個(gè)指針方向順序查找;當(dāng)遇到包含數(shù)據(jù)段的指針,則將所述指針包含的數(shù)據(jù)段從緩存中替換出來,將替換出的數(shù)據(jù)段寫到磁盤;i大于等于1。
[0040]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0041](1)本發(fā)明提供的基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,由于采用了段內(nèi)動(dòng)態(tài)塊映射方法和地址映射管理算法,更新的數(shù)據(jù)塊總是追加在段尾,不需要重寫數(shù)據(jù)塊所在段的后續(xù)所有數(shù)據(jù)塊,充分利用數(shù)據(jù)局部性原理和磁盤空間的利用率狀態(tài),更新操作不帶來額外的磁盤讀寫操作;具有減少基于段結(jié)構(gòu)的瓦記錄磁盤的寫放大倍數(shù)的有益效果;
[0042](2)本發(fā)明提供的基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,采用了最近最久未被訪問段的寫緩存替換方法來管理瓦記錄磁盤中的非易失性緩存NVRAM,在LRU工作鏈表中命中了大量的熱寫數(shù)據(jù),把冷數(shù)據(jù)聚集在LRU替換鏈表中;替換時(shí),最近最久未被訪問且包含數(shù)據(jù)塊最多的段才會被替換出緩存,減少了瓦記錄磁盤的寫操作次數(shù),且每次寫回操作都能帶來最大的收益;
[0043](3)本發(fā)明提供的基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,將需要頻繁更新的地址映射元數(shù)據(jù)和熱數(shù)據(jù)都存儲在高速緩存介質(zhì)中,具有提高瓦記錄磁盤的讀寫性能的效果?!靖綀D說明】
[0044]圖1是段結(jié)構(gòu)瓦記錄磁盤的數(shù)據(jù)布局示意圖;
[0045]圖2是瓦記錄轉(zhuǎn)換層SSTL在系統(tǒng)中的位置示意圖;
[0046]圖3是基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層SSTL的架構(gòu)圖;
[0047]圖4是實(shí)施例中的地址映射表結(jié)構(gòu)示意圖;
[0048]圖5是實(shí)施例中LRU-S緩存的雙鏈表結(jié)構(gòu)示意圖;
[0049]圖6是實(shí)施例中動(dòng)態(tài)映射塊數(shù)據(jù)與傳統(tǒng)段結(jié)構(gòu)塊數(shù)據(jù)的比較圖?!揪唧w實(shí)施方式】
[0050]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0051]圖1所示,是現(xiàn)有技術(shù)中基于段結(jié)構(gòu)的數(shù)據(jù)布局管理方法HWSR,該方法把磁盤分成多個(gè)瓦記錄區(qū),每個(gè)區(qū)包含了多個(gè)連續(xù)的磁道;在徑向方向上,把每個(gè)瓦記錄區(qū)分割成大小相同的段,每個(gè)段有一個(gè)獨(dú)一無二的邏輯段號;在每一個(gè)段中,同一磁道上的扇區(qū)組成一個(gè)塊;整個(gè)磁盤劃分為“區(qū)-段-塊-扇區(qū)”的形式。[〇〇52]當(dāng)段結(jié)構(gòu)的瓦記錄磁盤收到一個(gè)邏輯地址為LBA的請求時(shí),該請求的物理地址PBA 通過下式計(jì)算得到;該方法中,段結(jié)構(gòu)的瓦記錄磁盤將寫放大從區(qū)降到了段大小,但基于段結(jié)構(gòu)的瓦記錄磁盤的就地更新模式和段級寫放大仍需要進(jìn)一步優(yōu)化。
[0053]LRN=LBA = Sreg (1)
[0054]LSN=LBA = Sseg (2)
[0055]LCI = (LBA mod Sseg) =Schk (3)
[0056]Noffset = LBA mod Schk (4)
[0057]PBA = LRN*Sreg+LCI*ST+(LBAmodSreg)/Sseg*Schk+Noffset (5);[〇〇58] 上述式1到5中的各個(gè)參數(shù)的意義如下:LRN表示邏輯區(qū)號;LSN表示邏輯段號;LCI 表示一個(gè)塊在一個(gè)段中的邏輯塊索引;Noff set表示塊內(nèi)偏移地址;ST,Sreg,Sseg和Schk分別表示磁道大小,區(qū)大小,段大小和塊大小。[0〇59]圖2所示,是瓦記錄轉(zhuǎn)換層在整個(gè)SSTL系統(tǒng)中的位置示意圖,瓦記錄轉(zhuǎn)換層是在設(shè)備層掩飾瓦記錄磁盤隨機(jī)寫性能缺陷的一種方式。本發(fā)明在瓦記錄存儲介質(zhì)上對瓦記錄轉(zhuǎn)換層進(jìn)行優(yōu)化,同時(shí)在瓦記錄轉(zhuǎn)換層上的增加非易失性緩存提升系統(tǒng)整體性能。
[0060]圖3所示,是基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層SSTL的架構(gòu);SSTL系統(tǒng)的整體結(jié)構(gòu)包括設(shè)備層和SSTL地址轉(zhuǎn)換層,本發(fā)明提供的改進(jìn)策略在地址轉(zhuǎn)換層實(shí)現(xiàn)。
[0061]結(jié)合實(shí)施例和附圖,具體闡述本發(fā)明提供的基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,具體包括如下步驟:
[0062](1)當(dāng)SSTL接收到上層請求,判斷請求類型,若為讀請求,進(jìn)入步驟(2),若為寫請求,則進(jìn)入步驟(7);
[0063](2)由SSTL查找讀、寫緩存,判斷讀、寫緩存中是否存在與請求匹配的內(nèi)容,若是, 則獲取請求的數(shù)據(jù),并向請求方反饋所述數(shù)據(jù);若否,則進(jìn)入步驟(3);
[0064](3)由SSTL獲取邏輯段號(LSN)、邏輯塊索引(LCI)和邏輯區(qū)號(LRN);
[0065](4)以邏輯段號作為索引,在地址映射表中獲取段轉(zhuǎn)換頁;
[0066]實(shí)施例中,SSTL地址映射表管理方法,其地址映射表結(jié)構(gòu)如圖4所示,將請求定位到物理地址所采用的地址管理策略,具體如下:
[0067]SSTL采用的段內(nèi)動(dòng)態(tài)塊映射的方式,地址映射表只需記錄段中每一個(gè)塊的實(shí)際塊索引值;每一個(gè)段在地址映射表都存在一個(gè)段轉(zhuǎn)換頁,所有的段轉(zhuǎn)換頁按照邏輯段號順序的存儲在地址映射表中;每一個(gè)段包含的塊數(shù)據(jù)都是相等的,所以每一個(gè)段轉(zhuǎn)換頁的大小也相等,SSTL使用邏輯段號作為索引值在地址映射表中取得段轉(zhuǎn)換頁。[〇〇68] 如圖4所示,段35(LSN = 35)和段36(LSN = 36)的段轉(zhuǎn)換頁存儲在地址映射表中的相鄰位置,段轉(zhuǎn)換頁一次記錄了塊C0-C8的實(shí)際塊索引值;如圖4中虛線箭頭所指示,邏輯段 36的邏輯塊C3的實(shí)際塊索引值為O(IdxO),即段36的塊C3實(shí)際存儲在虛線箭頭所指示的位置;圖中每個(gè)段包含8個(gè)塊,每一個(gè)塊索引值的大小為一個(gè)字節(jié),因此每一個(gè)段轉(zhuǎn)換頁為8個(gè)字節(jié);為了取得段36的段轉(zhuǎn)換頁,只需要往地址映射表的起始位置向后偏移368個(gè)字節(jié)。
[0069](5)采用邏輯塊索引從所述段轉(zhuǎn)換頁中獲取實(shí)際的塊索引值;
[0070](6)獲取請求的物理地址PBA = LRN*Sreg+LCI*ST+(LBA mod Sreg)/Sseg*Schk+ Noff set;從所述物理地址獲取數(shù)據(jù),并向請求方反饋所述數(shù)據(jù);
[0071](7)由SSTL查找寫緩存,判斷寫緩存中是否存在與請求匹配的內(nèi)容,若是,由SSTL 用擬寫入的數(shù)據(jù)替換緩存中的舊數(shù)據(jù),若否,則進(jìn)入步驟(8);
[0072](8)由SSTL查找讀緩存,判斷讀緩存中是否存在與請求匹配的內(nèi)容,若是,則刪除讀緩存中的舊數(shù)據(jù),將寫請求數(shù)據(jù)寫入寫緩存中,進(jìn)入步驟(9);若否,則直接將寫請求的數(shù)據(jù)寫入寫緩存中,進(jìn)入步驟(9);
[0073](9)數(shù)據(jù)寫入寫緩存時(shí),判定寫緩存空閑空間是否足夠,若是,則由SSTL將寫請求的數(shù)據(jù)寫入寫緩存中;若否,則進(jìn)入步驟(10);[〇〇74](10)由SSTL采用最近最久未被訪問段(LRU-S)的寫緩存替換算法,選擇需要替換出緩存的段;[〇〇75]實(shí)施例提供的NVRAM寫緩存管理算法LRU-S,其雙鏈表結(jié)構(gòu)如圖5所示,是緩存空間不足情況下的緩存淘汰策略,具體如下:[〇〇76] LRU-S把整個(gè)LRU鏈表分為兩部分:LRU工作鏈表和LRU替換鏈表。LRU工作鏈表采用塊的形式組織數(shù)據(jù),替換的單元也是塊,圖5中S2C1表示邏輯段S1中的數(shù)據(jù)塊C1。當(dāng)一個(gè)數(shù)據(jù)被寫入到緩存,而這個(gè)數(shù)據(jù)塊本身又不存在緩存中時(shí),這個(gè)數(shù)據(jù)塊將被插入到LRU工作鏈表中。無論何時(shí),整個(gè)LRU鏈表中的某一個(gè)數(shù)據(jù)塊被再次訪問,這個(gè)數(shù)據(jù)塊都會被插入到LRU 工作鏈表的頭部。當(dāng)LRU工作鏈表已滿,而又有新的數(shù)據(jù)插入時(shí),LRU工作鏈表尾部的數(shù)據(jù)塊將被替換出LRU工作鏈表,插入到LRU替換鏈表中。LRU工作鏈表用于保存負(fù)載中當(dāng)前的熱數(shù)據(jù),大多數(shù)的緩存命中率也將產(chǎn)生在LRU工作鏈表中。[〇〇77] LRU替換鏈表采用段的形式組織數(shù)據(jù),替換的單元是某個(gè)段所包含的數(shù)據(jù)塊組。圖 5中的N表示段結(jié)構(gòu)的瓦記錄磁盤每個(gè)段所包含的塊的數(shù)目。LRU替換鏈表中的段按照每個(gè)段所包含的塊的數(shù)目來排序;譬如:對于一個(gè)包含了 3個(gè)數(shù)據(jù)塊的段,該段被鏈接在圖5中指針數(shù)組的第3個(gè)指針中。圖5中,每個(gè)帶有LSN字樣的方塊表示一個(gè)段,它也是一個(gè)鏈表,它把這個(gè)段內(nèi)的屬于LRU替換鏈表的數(shù)據(jù)塊鏈起來。當(dāng)一個(gè)數(shù)據(jù)塊從LRU工作鏈表替換出來時(shí), 該數(shù)據(jù)塊會被插入LRU替換鏈表中相應(yīng)段的鏈表中。當(dāng)LRU替換鏈表滿了,LRU-S就會把LRU 替換鏈表中包含數(shù)據(jù)塊最多的段寫回到磁盤;LRU-S從指針數(shù)組的第N個(gè)指針開始,往第(N+ i)個(gè)指針方向順序查找;當(dāng)遇到包含數(shù)據(jù)段的指針,則將所述指針包含的數(shù)據(jù)段從緩存中替換出來,將替換出的數(shù)據(jù)段寫回磁盤;i大于等于1。[〇〇78] LRU-S把熱數(shù)據(jù)塊集中在LRU工作鏈表中,把冷數(shù)據(jù)聚集在LRU替換鏈表中。替換的時(shí)候,最近最久未被訪問的段,并且包含數(shù)據(jù)塊最多的段才會被替換出緩存,LRU-S不僅利用了數(shù)據(jù)的時(shí)間局部性原理來增加緩存的命中率,而且像FAB—樣能夠減少數(shù)據(jù)寫入操作的次數(shù),同時(shí)減少了數(shù)據(jù)的寫放大;LRU-S不僅能夠把熱數(shù)據(jù)存儲在緩存中,還能減少數(shù)據(jù)寫入的次數(shù)。
[0079](11)判斷磁盤是否有足夠的空間容納擬寫入的數(shù)據(jù),若是,則將替換出緩存的數(shù)據(jù)按照動(dòng)態(tài)塊映射方法寫入磁盤;若否,則進(jìn)入步驟(12);
[0080]實(shí)施例中采用的動(dòng)態(tài)塊映射方法,如圖6所示意的,將其與現(xiàn)有HSWR技術(shù)進(jìn)行對比,具體如下:
[0081]使用動(dòng)態(tài)塊映射方法進(jìn)一步減少基于段結(jié)構(gòu)的瓦記錄磁盤的寫放大倍數(shù),如圖6 中段36中數(shù)據(jù)塊C0-C8存儲的方式,數(shù)據(jù)塊可以存儲在段中任意位置,而且數(shù)據(jù)被修改后, 只要以追加的形式寫在段尾部。而在HWSR瓦記錄磁盤系統(tǒng)中,一個(gè)段內(nèi)的數(shù)據(jù)塊嚴(yán)格按照順序的方式存儲,如圖6中段35 (LSN= 35)中數(shù)據(jù)塊C0-C8所示,數(shù)據(jù)塊C0-C8中任何一個(gè)數(shù)據(jù)塊被修改了,都要被寫回到原來的位置,導(dǎo)致段中后續(xù)的數(shù)據(jù)被覆蓋。[〇〇82]下面結(jié)合實(shí)施例來比較SSTL和HWSR的寫放大情況;根據(jù)NVRAM寫緩存管理算法 LRU-S,LRU-S總是把同一個(gè)段中的多個(gè)數(shù)據(jù)塊同時(shí)替換出緩存,HWSR也采用類似的算法;如圖6中4個(gè)緩存刷新操作,圖中F{SI,(C5,C4,C3)}表示把段S1中的數(shù)據(jù)塊C5,C4,C3刷新到磁盤,其中F表示Flush,表示刷新操作。[〇〇83]刷新操作①F{S1,(C5,C4,C3)}:開始的時(shí)候段S1是空的,但是HWSR要把數(shù)據(jù)塊C5、 C4和C3寫到對應(yīng)的位置,沒有覆蓋數(shù)據(jù)塊,而SSTL總是以追加的形式把數(shù)據(jù)寫入到段的尾部,也沒有覆蓋數(shù)據(jù)塊。[〇〇84]刷新操作②?{51,(02,(:1,0))}:服51?在寫入數(shù)據(jù)塊02、(:1和0)時(shí),會覆蓋數(shù)據(jù)塊 C3-C5 ; S卩,在寫入數(shù)據(jù)塊C0-C2之前,HWSR要把數(shù)據(jù)塊C3-C5先讀出來,并寫入到磁盤,而 SSTL仍然沒有覆蓋數(shù)據(jù)塊。[〇〇85]刷新操作③F {S1,( C1’,C0 ’)}:數(shù)據(jù)塊CO,C1被修改了,同樣,HWSR在寫入C0 ’和C1’ 時(shí)會覆蓋后面的C2-C5的數(shù)據(jù)塊,而SSTL僅僅是把C0 ’和C1’追加到段S1的尾部。
[0086]刷新操作④F{S1,(Cl”,C0”)}:數(shù)據(jù)塊C0和C1又被修改了,HWSR的寫入過程如同刷新操作③一樣,SSTL不覆蓋任何數(shù)據(jù)塊,因?yàn)槎蜸1尾部存儲的就是C0和C1的舊數(shù)據(jù),SSTL只需要覆蓋原來的cr和co’。
[0087]上述的實(shí)施例中,HWSR覆蓋了11個(gè)數(shù)據(jù)塊而SSTL沒有覆蓋任何的數(shù)據(jù)塊;HWSR就地更新數(shù)據(jù)的方式,導(dǎo)致每一次寫數(shù)據(jù)都可能需要重寫整個(gè)段;而SSTL僅在一個(gè)段被寫滿了才需要重寫整個(gè)段,減少了額外的寫操作,從而減少了寫放大倍數(shù)。
[0088](12)由SSTL將磁盤上整個(gè)段的內(nèi)容讀到內(nèi)存,與從緩存中替換出來的數(shù)據(jù)塊進(jìn)行合并,將合并后的數(shù)據(jù)寫回到磁盤。[〇〇89]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于段結(jié)構(gòu)的瓦記錄轉(zhuǎn)換層的讀寫方法,其特征在于,包括如下步驟:(1)當(dāng)SSTL接收到讀寫請求,判斷請求類型,若為讀請求,進(jìn)入步驟(2),若為寫請求,貝1J 進(jìn)入步驟(7);(2)由SSTL判斷讀、寫緩存中是否存在與請求匹配的內(nèi)容,若是,則獲取請求的數(shù)據(jù),并 向請求方反饋所述數(shù)據(jù);若否,則進(jìn)入步驟(3);(3)由SSTL獲取邏輯段號、邏輯塊索引和邏輯區(qū)號;(4)以所述邏輯段號作為索引,在地址映射表中獲取段轉(zhuǎn)換頁;(5)采用所述邏輯塊索引從所述段轉(zhuǎn)換頁中獲取塊索引值;(6)獲取請求的物理地址PBA = LRN*Sreg+LCI*ST+(LBA mod Sreg)/Sseg*Schk+ Noff set;從所述物理地址獲取數(shù)據(jù),并向請求方反饋所述數(shù)據(jù);其中,LRN是指邏輯區(qū)號,LCI是指邏輯塊索引,Sreg是指區(qū)大小,ST是指磁道大小,Sseg 是指段大小,Schk是指塊大?。籐BA mod Sreg是指邏輯塊地址對Sreg取余操作;Noffset是 指塊內(nèi)偏移地址;(7)由SSTL查找寫緩存,判斷寫緩存中是否存在與請求匹配的內(nèi)容,若是,由SSTL用擬 寫入的數(shù)據(jù)替換緩存中的舊數(shù)據(jù);若否,則進(jìn)入步驟(8);(8)由SSTL查找讀緩存,判斷讀緩存中是否存在與請求匹配的內(nèi)容,若是,則刪除讀緩 存中的舊數(shù)據(jù),并進(jìn)入步驟(9);若否,則將寫請求的數(shù)據(jù)寫入寫緩存中,并進(jìn)入步驟(9);其中,舊數(shù)據(jù)是指緩存中與寫請求對應(yīng)的地址上存儲的數(shù)據(jù);(9)判斷寫緩存是否足夠空閑空間,若是,則由SSTL將寫請求的數(shù)據(jù)寫入寫緩存中;若 否,則進(jìn)入步驟(10);(10)由SSTL采用最近最久未被訪問段的寫緩存替換算法,選擇擬替換出緩存的段;(11)判斷磁盤是否有足夠的空間容納擬寫入的數(shù)據(jù),若是,則將所述擬替換出緩存的 段按照動(dòng)態(tài)塊映射方法寫入磁盤;若否,則進(jìn)入步驟(12);(12)由SSTL將磁盤上整個(gè)段的內(nèi)容存儲到內(nèi)存,并與從緩存中替換出來的段進(jìn)行合 并,將合并獲得的數(shù)據(jù)寫到磁盤。2.如權(quán)利要求1所述的讀寫方法,其特征在于,按照如下方法管理所述地址映射表:(a)地址映射表包含多個(gè)段轉(zhuǎn)換頁,每個(gè)段轉(zhuǎn)換頁記錄一個(gè)段的地址映射信息;(b)將經(jīng)動(dòng)態(tài)塊映射的每個(gè)數(shù)據(jù)塊的索引值作為地址映射信息保存在段轉(zhuǎn)換頁中;(c)將段轉(zhuǎn)換頁按照邏輯段號順序存儲在地址映射表中;(d)當(dāng)SSTL接收到邏輯段號,將所述邏輯段號作為索引值在地址映射表中順次查找,獲 取段轉(zhuǎn)換頁。3.如權(quán)利要求1所述的讀寫方法,其特征在于,所述動(dòng)態(tài)塊映射方法具體如下:(I)以段作為數(shù)據(jù)管理單位;段內(nèi)的數(shù)據(jù)塊可以存放在段內(nèi)任意位置;(II)對于數(shù)據(jù)的寫入或修改操作,將擬寫入或修改的數(shù)據(jù)順序追加到數(shù)據(jù)段的尾部;(III)對于數(shù)據(jù)段段尾數(shù)據(jù)的更新操作,則采用擬寫入數(shù)據(jù)直接覆蓋段尾的舊版本數(shù)據(jù)。4.如權(quán)利要求1至3任一項(xiàng)所述的讀寫方法,其特征在于,所述最近最久未被訪問段的 寫緩存替換算法,具體如下:(10-1)由LRU-S將LRU鏈表劃分為LRU工作鏈表和LRU替換鏈表;(10-2)當(dāng)收到數(shù)據(jù)寫入請求,而寫入請求所對應(yīng)的數(shù)據(jù)塊不在緩存中時(shí),則將該數(shù)據(jù) 塊直接插入到LRU工作鏈表中;(10-3)當(dāng)LRU鏈表中的數(shù)據(jù)塊被再次訪問,將該數(shù)據(jù)塊插入到LRU工作鏈表的頭部; (10-4)當(dāng)LRU工作鏈表已滿,而有新的數(shù)據(jù)插入時(shí),采用新的數(shù)據(jù)替換LRU工作鏈表尾 部的數(shù)據(jù)塊;將被替換出的數(shù)據(jù)塊插入到LRU替換鏈表中;(10-5)將LRU替換鏈表中的段按照各段所包含的塊的數(shù)目由少到多依次排序;(10-6)當(dāng)LRU替換鏈表已滿,則由LRU-S把LRU替換鏈表中包含數(shù)據(jù)塊最多的段寫到磁 盤。5.如權(quán)利要求4所述的讀寫方法,其特征在于,所述步驟(10-6)具體為:由LRU-S從指針 數(shù)組的第N個(gè)指針開始,往第(N+i)個(gè)指針方向順序查找;當(dāng)遇到包含數(shù)據(jù)段的指針,則將所 述指針包含的數(shù)據(jù)段從緩存中替換出來,將替換出的數(shù)據(jù)段寫到磁盤;i大于等于1。
【文檔編號】G06F12/123GK105955664SQ201610279310
【公開日】2016年9月21日
【申請日】2016年4月29日
【發(fā)明人】萬繼光, 姚婷, 羅旦, 譚志虎, 謝長生
【申請人】華中科技大學(xué)