亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

可動(dòng)態(tài)調(diào)整條帶深度的raid0的實(shí)現(xiàn)方法及系統(tǒng)的制作方法

文檔序號(hào):6375551閱讀:240來源:國知局
專利名稱:可動(dòng)態(tài)調(diào)整條帶深度的raid 0的實(shí)現(xiàn)方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息存儲(chǔ)領(lǐng)域,尤其涉及一種可動(dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法及系統(tǒng)。
背景技術(shù)
RAID是英文Redundant Array of Independent Disks 的縮寫,翻譯成中文即為獨(dú)立磁盤冗余陣列,或簡稱磁盤陣列。簡單的說,RAID是一種把多塊獨(dú)立的硬盤(物理硬盤)按不同方式組合起來形成一個(gè)硬盤組(邏輯硬盤),從而提供比單個(gè)硬盤更高的存儲(chǔ)性能和提供數(shù)據(jù)冗余的技術(shù)。RAID通過對硬盤上的數(shù)據(jù)進(jìn)行條帶化,可以讓很多磁盤驅(qū)動(dòng)器同時(shí) 傳輸數(shù)據(jù),而這些磁盤驅(qū)動(dòng)器在邏輯上又是一個(gè)磁盤驅(qū)動(dòng)器,所以使用RAID可以達(dá)到單個(gè)磁盤驅(qū)動(dòng)器幾倍的性能。RAID O是其中的一種,其特點(diǎn)是條帶在RAID創(chuàng)建時(shí)同時(shí)被創(chuàng)建,且同一個(gè)RAID中,每個(gè)條帶的深度都是一致的。一般的我們盡量的將Stripe Size設(shè)置為等于上層應(yīng)用I/O塊大小,這樣一個(gè)I/O的讀寫盡可能分布到RAID O中所有的磁盤上,同時(shí)進(jìn)行,從而獲得最佳的并行效果。但是,上層應(yīng)用I/O的塊大小可能是變化的,或者需要在RAID O上同時(shí)運(yùn)行多種應(yīng)用,不同應(yīng)用所需的最優(yōu)Stripe Size又是不一樣的。例如,對于視頻應(yīng)用,也許IMB的Stripe Size是最佳的,但是對于數(shù)據(jù)庫可能16KB的Stripe Size是最佳的。因此固定的條帶深度在實(shí)際應(yīng)用中并不能在各種應(yīng)用場合都能獲得最佳的并行效果。固態(tài)硬盤(Solid State Disk, SSD)是一種建立在標(biāo)準(zhǔn)NAND Flash等非揮發(fā)存儲(chǔ)介質(zhì)基礎(chǔ)上的新一代存儲(chǔ)設(shè)備,完全半導(dǎo)體化,無機(jī)械結(jié)構(gòu),具有低功耗、無噪音、抗震動(dòng)、低熱量等特點(diǎn),不存在磁盤尋道時(shí)間,數(shù)據(jù)存取速度快,數(shù)據(jù)吞吐量能和IOPS能達(dá)到傳統(tǒng)硬盤的數(shù)千倍。隨著NAND Flash制程技術(shù)不斷提高及成本的降低,有效地降低了 SSD的成本,推進(jìn)SSD的應(yīng)用普及。NAND Flash存儲(chǔ)器的特點(diǎn)是由Block (塊)構(gòu)成,block的基本單元是Page(頁),每個(gè)Page的存儲(chǔ)區(qū)又包含Data area (數(shù)據(jù)存儲(chǔ)區(qū))和Spare area (備用區(qū)域)。不同廠商,不同規(guī)格的Nand Flash的Page, Block及Spare area的大小可能會(huì)有區(qū)別。以美光的一款Nand Flash為例,一個(gè)Page的大小為8KB, Spare area的大小為448B, —個(gè)Block包含256個(gè)Page。但不管是哪個(gè)廠商的都包含Spare area區(qū)域,實(shí)際上用戶可見的存儲(chǔ)空間都是指Data area區(qū),而每個(gè)Page中Spare area區(qū)處理較多的用于存儲(chǔ)ECC數(shù)據(jù)外,剩余部分區(qū)域都是空閑的,浪費(fèi)了,而過去的RAID O信息都需要額外占用用戶的存儲(chǔ)空間。因此,現(xiàn)有的固定條帶深度的RAID O存在不能在不同應(yīng)用1/0塊大小的場景下都獲得最佳的并發(fā)處理,且RAID O的條帶信息還需額外消耗系統(tǒng)存儲(chǔ)空間的缺陷。

發(fā)明內(nèi)容
針對以上缺陷,本發(fā)明目的在于提出了一種可動(dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法及系統(tǒng),以解決在不同的應(yīng)用I/o塊大小的場景中都可獲得最佳的并發(fā)效果,整體上提高存儲(chǔ)器的訪問速度且不額外占用用戶的存儲(chǔ)空間。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種可動(dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法及系統(tǒng),所述方法包括
步驟I. I,接收到應(yīng)用訪問RAID O的I/O命令,在條帶地址映射表中查找I/O命令要讀寫的數(shù)據(jù)是否覆蓋已存在的條帶,如果存在則直接根據(jù)檢索到的條帶的條帶表項(xiàng)信息跳到步驟I. 4開始執(zhí)行,否則繼續(xù)執(zhí)行步驟I. 2 ;
步驟I. 2,動(dòng)態(tài)創(chuàng)建RAID O的條帶,其中條帶深度StripeDepth根據(jù)I/O命令要讀寫數(shù)據(jù)的大小動(dòng)態(tài)計(jì)算,保證StripeDepth為StripeDepthmin的整數(shù)倍,其中StripeDepthmin為最小條帶深度,等于區(qū)塊的大??;并創(chuàng)建該條帶的條帶表項(xiàng)信息;其中條帶表項(xiàng)信息包括開始條帶的邏輯區(qū)塊地址StripeStartLBA,結(jié)束邏輯區(qū)塊地址StripeEndLBA和條帶深度 StripeDepth 信息; 步驟I. 3,將步驟I. 2創(chuàng)建的條帶表項(xiàng)信息添加到條帶地址映射表中,條帶表項(xiàng)信息的集合構(gòu)成條帶地址映射表;
步驟I. 4,根據(jù)步驟I. I檢索到的或步驟I. 2新創(chuàng)建的條帶的條帶表項(xiàng)信息計(jì)算出各個(gè)FLASH盤中的數(shù)據(jù)的物理區(qū)塊地址PBA ;
步驟I. 5,根據(jù)步驟I. 4計(jì)算得到的地址信息PBA,拆分I/O命令為多個(gè)子命令到各個(gè)成員FLASH盤中,實(shí)現(xiàn)并發(fā)數(shù)據(jù)訪問??蓜?dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法,在于所述條帶表項(xiàng)信息按如下方法計(jì)算獲得
步驟 2. I, StripeStartLBA = StartLBA/N X N ;
步驟 2. 2, Len = Len + StartLBA - StripeStartLBA ;
步驟2. 3,計(jì)算條帶深度StripeDepth,
當(dāng) Len%N 等于 O 時(shí),取 StripeDepth 為 Len / N,
當(dāng) Len%N 不等于 O 時(shí),取 StripeDepth 為 Len / N +1 ;
步驟 2. 4,計(jì)算 StripeEndLBA = StartLBA + StripeDepthXN -I其中,StartLBA為I/O讀寫的開始邏輯區(qū)塊地址,F(xiàn)LASH盤數(shù)目為N,I/O命令讀寫的數(shù)據(jù)塊長度為Len??蓜?dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法,在于所述PBA按如下方法計(jì)算獲得
步驟 3. I,計(jì)算 DiskID :DiskID = (LBA - StripeStartLBA) /StripeDepth ;
步驟 3. 2,計(jì)算 StripeStartPBA
StripeStartPBA = (StripeStartLBA /StripeSizemin) X StripeDepthmin
= StripeStartLBA / N
步驟3. 3,計(jì)算PBA
PBA = StripeStartPBA + LBA - (StripeStartLBA + DiskIDXStripeDepth);
其中,LBA為要訪問的邏輯區(qū)塊地址,DiskID為所要讀寫的LBA所在的FLASH盤ID,最小區(qū)塊大小StripeSizemin =N??蓜?dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法,在于所述的FLASH盤為NAND FLASH盤;所述的方法還包括,在創(chuàng)建新的條帶表項(xiàng)信息時(shí),在NAND FLASH的每個(gè)Page的Sparearea中增加存儲(chǔ)如下元數(shù)據(jù)
((StripeStartPBA , StripeEndPBA), StripeStartLBA);具有相同的 StripeStartLBA的Page數(shù)據(jù)區(qū)屬于同一個(gè)條帶;
其中
StripeStart PBA = (StripeStartLBA /StripeSizemin) X StripeDepthmin=StripeStartLBA / NStripeEndPBA = (StripeEndLBA /StripeSizemin) X StripeDepthmin
=StripeEndLBA / N。
可動(dòng)態(tài)調(diào)整條帶深度的RAID O的實(shí)現(xiàn)方法,在于所述的條帶地址映射表在系統(tǒng)重新啟動(dòng)時(shí),通過按照PBA順序掃描NAND FLASH的所有Page的Spare area區(qū)域中的元數(shù)據(jù),根據(jù)該信息構(gòu)建出整個(gè)RAID O的條帶地址映射表??蓜?dòng)態(tài)調(diào)整條帶深度的RAID O系統(tǒng),所述系統(tǒng)包括
I/O處理模塊,用于接收到系統(tǒng)訪問RAIDO的I/O命令,及拆分I/O命令;
地址映射模塊,用于動(dòng)態(tài)創(chuàng)建RAID O的條帶,其中條帶深度StripeD^th根據(jù)I/O命令的數(shù)據(jù)塊的大小動(dòng)態(tài)計(jì)算,保證StripeDepth為StripeDepthmin的整數(shù)倍,其中StripeDepthmin為最小條帶深度StripeDepthmin,等于區(qū)塊的大?。徊?chuàng)建該條帶的條帶表項(xiàng)信息;將創(chuàng)建的條帶表項(xiàng)信息添加到條帶地址映射表中,并根據(jù)條帶表項(xiàng)信息計(jì)算出各個(gè)FLASH盤中的數(shù)據(jù)的物理區(qū)塊地址PBA ;
Flash讀寫模塊,負(fù)責(zé)與Flash控制器交互,根據(jù)地址映射模塊計(jì)算出的用戶請求的PBA地址實(shí)現(xiàn)讀寫用戶數(shù)據(jù)??蓜?dòng)態(tài)調(diào)整條帶深度的RAID O系統(tǒng),在于所述的條帶表項(xiàng)信息包括開始條帶的邏輯區(qū)塊地址StripeStartLBA,結(jié)束邏輯區(qū)塊地址StripeEndLBA和條帶深度StripeDepth信息,其中
StripeStartLBA = StartLBA/N X N ;
Len = Len + StartLBA - StripeStartLBA ;
當(dāng) Len%N 等于 O 時(shí),取 StripeDepth 為 Len / N,
當(dāng) Len%N 不等于 O 時(shí),取 StripeDepth 為 Len / N +1 ;
StripeEndLBA = StartLBA + StripeDepthXN -I
其中,StartLBA為應(yīng)用I/O訪問的開始邏輯區(qū)塊地址,N為FLASH盤數(shù)目,I/O所需要訪問的數(shù)據(jù)長度為Len。可動(dòng)態(tài)調(diào)整條帶深度的RAID O系統(tǒng),在于所述的地址映射模塊在計(jì)算出該條帶表項(xiàng)信息的同時(shí)還計(jì)算出新創(chuàng)建出來的條帶對應(yīng)的實(shí)際NAND FLASH的每個(gè)Page的元數(shù)據(jù),包括 StripeStartPBA , StripeEndPBA,和 StripeStartLBA ;并可通過 Flash 讀寫模塊在創(chuàng)建條帶的同時(shí)將這些元數(shù)據(jù)存儲(chǔ)到NAND FLASH每個(gè)Page的Spare area區(qū)域中??蓜?dòng)態(tài)調(diào)整條帶深度的RAID O系統(tǒng),在于所述系統(tǒng)還包括條帶地址映射表初始化模塊,所述模塊實(shí)現(xiàn)在系統(tǒng)重新啟動(dòng)時(shí),通過按照PBA順序掃描NAND FLASH的所有Page的Spare area區(qū)域中的元數(shù)據(jù),根據(jù)該信息構(gòu)建出整個(gè)RAID O的條帶地址映射表。本發(fā)明針對上層不同的應(yīng)用I/O的塊大小是變化的情況,提出了動(dòng)態(tài)根據(jù)應(yīng)用I/O的塊大小,來動(dòng)態(tài)創(chuàng)建RAID O的條帶,并根據(jù)I/O的塊大小確定條帶的深度,保證應(yīng)用I/O的請求盡可能的均勻分散到N個(gè)存儲(chǔ)器上,并充分利用NAND FLASH的特點(diǎn)在NAND FLASH的Spare area區(qū)域存儲(chǔ)條帶相關(guān)信息,不額外占用用戶存儲(chǔ)空間的前提下,獲得在不同的應(yīng)用I/O塊大小的場景中都可獲得最佳的并發(fā)效果,整體上提高存儲(chǔ)器的訪問速度。


圖I是條帶深度可變的RAID O示意 圖2是RAID O命令處理流程如 圖3是命令拆分示意 圖4是RAID O系統(tǒng)架構(gòu)圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明中,定義“/”為整除運(yùn)算,只保留結(jié)果的整數(shù)部分,“%”為取余數(shù)運(yùn)算。參見圖I是條帶深度可變的RAID O示意圖,圖I橫向表示有N個(gè)Disk,表示RAID O磁盤數(shù)目為N;RAID O的縱向表示有多個(gè)條帶Stripel、Stripe2、Stripe3……,StripeDepthmin為最小條帶深度等于區(qū)塊的大小;圖I所示的Stripel的條塊深度為2* StripeDepthmin、Stripe2 的條塊深度為 I* StripeDepthmin、Stripe3 的條塊深度為 4*StripeDepthmin,各個(gè)條帶的深度是不一樣的,但都是StripeDepthmin的整數(shù)倍,從而保證了任何一個(gè)條帶的起始地址一定也是N的整數(shù)倍,而具體條帶的深度是由I/O讀寫的大小來決定的,在RAID的條帶讀寫過程中動(dòng)態(tài)創(chuàng)建的和計(jì)算決定的。所述的Disk為NAND FLASH構(gòu)成的硬盤。同時(shí)系統(tǒng)內(nèi)存在系統(tǒng)啟動(dòng)的時(shí)候開始維護(hù)一份RAID O的條帶地址映射表,每個(gè)條帶對應(yīng)著映射表中的一表項(xiàng),因?yàn)槊總€(gè)條帶的深度可能不一樣,因此每個(gè)表項(xiàng)都記錄了該條帶的條帶深度。具體到每個(gè)表項(xiàng)都記錄了如下信息:_
StripeStartLBA StripeEndLBA StripeDepth對應(yīng)于圖I所示的條帶Stripel、Stripe2和Stripe3對應(yīng)的表項(xiàng)為
O |2N-1 下
~2N 3N-1 ~T 3Ν |7Ν-1 ~|4
這樣每個(gè)條帶在每個(gè)Disk上的起始StripStartPBA可以通過以下方式計(jì)算獲得StripeStartPBA = (StripeStartLBA /StripeSizemin) X StripeDepthmin=StripeStart LBA / NStripeEndPBA = (StripeEndLBA /StripeSizemin) X StripeDepthmin=StripeEndLBA / N參見圖4是RAID O的系統(tǒng)框架圖,整個(gè)系統(tǒng)核心部分包含3個(gè)模1/0處理模塊、地址映射模塊和FLASH讀寫模塊。其中I/O處理模塊通過系統(tǒng)I/O總線接收應(yīng)用讀寫RAID的命令、并將讀寫的結(jié)果反饋給應(yīng)用和將讀寫RAID的命令根據(jù)地址映射模塊解析出的地址信息,將一個(gè)讀寫RAID的命令拆分成幾個(gè)實(shí)際FLASH的讀寫命令,通過FLASH讀寫模塊實(shí)現(xiàn)并行讀寫多個(gè)FLASH的操作。參見圖2是RAID O命令處理流程圖,
步驟11 當(dāng)I/O處理模塊接收到一個(gè)讀寫命令后,首先在系統(tǒng)的條帶地址映射表中查找要讀寫的數(shù)據(jù)塊是否命中已存在的條帶。步驟12 :分三種情況處理。A.完全命中已有條帶讀寫的數(shù)據(jù)塊全部都在已存在的條帶中,那么根據(jù)命中條帶的表項(xiàng)計(jì)算出各個(gè)Flash盤中數(shù)據(jù)的PBA,拆分讀寫命令到成員盤。B.沒有命中已有條帶讀寫的數(shù)據(jù)塊完全與已存在的條帶沒有重合,那么創(chuàng)建新的條帶表項(xiàng)。 C.部分命中已有條帶讀寫的數(shù)據(jù)塊部分命中已存在的條帶,那么將這個(gè)命令拆 分,命中的部分與A情況中的處理流程相同,未命中部分與B情況的處理流程相同。一個(gè)命令可能被拆分為兩個(gè)或者兩個(gè)以上的子命令。參見圖3命令拆分不意圖,如圖3所不應(yīng)用I/O發(fā)出讀寫命令C被拆分為5個(gè)子命令Stripe A、Stripe B和Stripe C是內(nèi)存中的地址映射表已記錄的在線條帶,通過查詢內(nèi)存中的地址映射表發(fā)現(xiàn)C命令的部分和Stripe A、Stripe B和Stripe C重合,這3部分可以分別拆成3個(gè)子命令分別訪問Stripe A、Stripe B和Stripe C;其中C命令還有未命中部分I和未命中部分2,需要?jiǎng)?chuàng)建新的條帶,其中未命中部分I將創(chuàng)建一個(gè)StripeD印th為I的條帶,未命中部分2將創(chuàng)建一個(gè)StripeDepth為2的條帶。這樣實(shí)現(xiàn)將命令C拆分為5個(gè)子命令。步驟13 :圖2中未命中的命令創(chuàng)建條帶及條帶表項(xiàng)未命中的命令可能就是原始命令C,或者來自從原始命令C拆分得到的多個(gè)未命中的子命令,下面具體介紹下創(chuàng)建條帶及條帶表項(xiàng)的具體過程。假設(shè)未命中命令Cl的起始地址為StartLBA,長度為Len。未命中命令Cl的結(jié)束EndLBA = StartLBA + Len - I。命令Cl請求的就是讀寫從StartLBA到EndLBA之間的數(shù)據(jù),它不一定正好從條帶起始位置開始,也不一定在一個(gè)條帶的末尾結(jié)束。條帶表項(xiàng)根據(jù)命令Cl的信息動(dòng)態(tài)建立。偽碼如下
StripeStartLBA = StartLBA/N X N // 找到 Start LBA 前面最近的條帶起始
LBA
Len = Len+ StartLBA - StripeStartLBA //長度加上StartLBA到條帶開始的距離。if (Len%N == O) // 長度正好是 StripeSizemin 的整數(shù)倍
StripeDepth = Len / N
else
StripeDepth = Len / N +1StripeEndLBA = StartLBA + StripeDepthXN -I可以看出StripeDepth的產(chǎn)生方法保證了讀寫數(shù)據(jù)被盡可能的拆分到N個(gè)Flash盤上。從StartLBA到EndLBA中的某一個(gè)LBA,它所在的Flash盤IDDiskID = (LBA - StripeStartLBA) /StripeDepth
PBA = StripeStartPBA + LBA - (StripeStartLBA + DiskIDXStripeDepth)有了DiskID和PBA便可以知道某塊具體的數(shù)據(jù)對應(yīng)到RAID中的哪個(gè)位置。當(dāng)創(chuàng)建了新的條帶表項(xiàng)時(shí),需要在對應(yīng)的Nand Flash的每個(gè)Page的Spare area中儲(chǔ)存相應(yīng)的元數(shù)據(jù)。元數(shù)據(jù)的格式如下
((StripeStartPBA , StripeEndPBA), StripeStartLBA)
具有相同的StripeStartLBA的數(shù)據(jù)區(qū)屬于同一個(gè)條帶。這樣當(dāng)系統(tǒng)重啟后,每個(gè)Flash盤按照PBA順序掃描讀取元數(shù)據(jù),根據(jù)獲取到的元數(shù)據(jù)可重新組合得到整個(gè)RAID的條帶地址映射表。
以上所揭露的僅為本發(fā)明一種實(shí)施例而已,當(dāng)然不能以此來限定本之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于本發(fā)明所涵蓋的范圍。
權(quán)利要求
1.可動(dòng)態(tài)調(diào)整條帶深度的RAIDO的實(shí)現(xiàn)方法,其特征在于步驟I. 1,接收到應(yīng)用訪問RAID O的I/O命令,在條帶地址映射表中查找I/O命令要讀寫的數(shù)據(jù)是否覆蓋已存在的條帶,如果存在則直接根據(jù)檢索到的條帶的條帶表項(xiàng)信息跳到步驟I. 4開始執(zhí)行,否則繼續(xù)執(zhí)行步驟I. 2; 步驟I. 2,動(dòng)態(tài)創(chuàng)建RAID O的條帶,其中條帶深度StripeDepth根據(jù)I/O命令要讀寫數(shù)據(jù)的大小動(dòng)態(tài)計(jì)算,保證StripeDepth為StripeDepthmin的整數(shù)倍,其中StripeDepthmin為最小條帶深度,等于區(qū)塊的大小;并創(chuàng)建該條帶的條帶表項(xiàng)信息;其中條帶表項(xiàng)信息包括開始條帶的邏輯區(qū)塊地址StripeStartLBA,結(jié)束邏輯區(qū)塊地址StripeEndLBA和條帶深度 StripeDepth 信息; 步驟I. 3,將步驟I. 2創(chuàng)建的條帶表項(xiàng)信息添加到條帶地址映射表中,條帶表項(xiàng)信息的集合構(gòu)成條帶地址映射表; 步驟I. 4,根據(jù)步驟I. I檢索到的或步驟I. 2新創(chuàng)建的條帶的條帶表項(xiàng)信息計(jì)算出各個(gè)FLASH盤中的數(shù)據(jù)的物理區(qū)塊地址PBA ; 步驟I. 5,根據(jù)步驟I. 4計(jì)算得到的地址信息PBA,拆分I/O命令為多個(gè)子命令到各個(gè)成員FLASH盤中,實(shí)現(xiàn)并發(fā)數(shù)據(jù)訪問。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于所述條帶表項(xiàng)信息按如下方法計(jì)算獲得 步驟 2. I, StripeStartLBA = StartLBA/N X N ; 步驟 2. 2, Len = Len + StartLBA - StripeStartLBA ; 步驟2. 3,計(jì)算條帶深度StripeDepth, 當(dāng) Len%N 等于 O 時(shí),取 StripeDepth 為 Len / N,當(dāng) Len%N 不等于 O 時(shí),取 StripeDepth 為 Len / N +1 ;步驟 2. 4,計(jì)算 StripeEndLBA = StartLBA + StripeDepthXN -I; 其中,StartLBA為I/O讀寫的開始邏輯區(qū)塊地址,F(xiàn)LASH盤數(shù)目為N,I/O命令讀寫的數(shù)據(jù)塊長度為Len。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于所述PBA按如下方法計(jì)算獲得步驟 3. I,計(jì)算 DiskID :DiskID = (LBA - StripeStartLBA) /StripeDepth ;步驟 3. 2,計(jì)算 StripeStartPBA StripeStartPBA = (StripeStartLBA /StripeSizemin) X StripeDepthmin= StripeStartLBA / N 步驟3. 3,計(jì)算PBA PBA = StripeStartPBA + LBA - (StripeStartLBA + DiskIDX StripeDepth); 其中,LBA為要訪問的邏輯區(qū)塊地址,DiskID為所要讀寫的LBA所在的FLASH盤ID,最小區(qū)塊大小StripeSizemin =N。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于所述的FLASH盤為NANDFLASH盤;所述的方法還包括,在創(chuàng)建新的條帶表項(xiàng)信息時(shí),在NAND FLASH的每個(gè)Page的Spare area中增加存儲(chǔ)如下元數(shù)據(jù)((StripeStartPBA , StripeEndPBA), StripeStartLBA);具有相同的 StripeStartLBA的Page數(shù)據(jù)區(qū)屬于同一個(gè)條帶;其中 StripeStartPBA = (StripeStartLBA /StripeSizemin) X StripeDepthmin =StripeStartLBA / NStripeEndPBA = (StripeEndLBA /StripeSizemin) X StripeDepthmin =StripeEndLBA / N 。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于所述的條帶地址映射表在系統(tǒng)重新啟動(dòng)時(shí),通過按照PBA順序掃描NAND FLASH的所有Page的Spare area區(qū)域中的元數(shù)據(jù),根據(jù)該元數(shù)據(jù)組合構(gòu)建出整個(gè)RAID O的條帶地址映射表。
6.可動(dòng)態(tài)調(diào)整條帶深度的RAIDO系統(tǒng),其特征在于所述系統(tǒng)包括 I/O處理模塊,用于接收到系統(tǒng)訪問RAIDO的I/O命令,及拆分I/O命令; 地址映射模塊,用于動(dòng)態(tài)創(chuàng)建RAID O的條帶,其中條帶深度StripeD^th根據(jù)I/O命令的數(shù)據(jù)塊的大小動(dòng)態(tài)計(jì)算,保證StripeDepth為StripeDepthmin的整數(shù)倍,其中StripeDepthmin為最小條帶深度Stripe Depthmin,等于區(qū)塊的大??;并創(chuàng)建該條帶的條帶表項(xiàng)信息;將創(chuàng)建的條帶表項(xiàng)信息添加到條帶地址映射表中,并根據(jù)條帶表項(xiàng)信息計(jì)算出各個(gè)FLASH盤中的數(shù)據(jù)的物理區(qū)塊地址PBA ;Flash讀寫模塊,負(fù)責(zé)與Flash控制器交互,根據(jù)地址映射模塊計(jì)算出的用戶請求的PBA地址實(shí)現(xiàn)讀寫用戶數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的可動(dòng)態(tài)調(diào)整條帶深度的RAIDO系統(tǒng),其特征在于所述的條帶表項(xiàng)信息包括開始條帶的邏輯區(qū)塊地址StripeStartLBA,結(jié)束邏輯區(qū)塊地址StripeEndLBA和條帶深度StripeDepth信息,其中 StripeStartLBA = StartLBA/N X N ; Len = Len + StartLBA - StripeStartLBA ; 當(dāng) Len%N 等于 O 時(shí),取 StripeDepth 為 Len / N, 當(dāng) Len%N 不等于 O 時(shí),取 StripeDepth 為 Len / N +1 ;StripeEndLBA = StartLBA + StripeDepthXN -I ; 其中,StartLBA為應(yīng)用I/O訪問的開始邏輯區(qū)塊地址,N為FLASH盤數(shù)目,I/O所需要訪問的數(shù)據(jù)長度為Len。
8.根據(jù)權(quán)利要求7所述的可動(dòng)態(tài)調(diào)整條帶深度的RAIDO系統(tǒng),其特征在于所述的地址映射模塊在計(jì)算出該條帶表項(xiàng)信息的同時(shí)還計(jì)算出新創(chuàng)建出來的條帶對應(yīng)的實(shí)際NANDFLASH 的每個(gè) Page 的兀數(shù)據(jù),包括 StripeStartPBA , StripeEndPBA,和 StripeStartLBA ;并可通過Flash讀寫模塊在創(chuàng)建條帶的同時(shí)將這些元數(shù)據(jù)存儲(chǔ)到NAND FLASH每個(gè)Page的Spare area 區(qū)域中。
9.根據(jù)權(quán)利要求8所述的可動(dòng)態(tài)調(diào)整條帶深度的RAIDO系統(tǒng),其特征在于所述系統(tǒng)還包括條帶地址映射表初始化模塊,所述模塊實(shí)現(xiàn)在系統(tǒng)重新啟動(dòng)時(shí),通過按照PBA順序掃描NAND FLASH的所有Page的Spare area區(qū)域中的元數(shù)據(jù),根據(jù)該信息構(gòu)建出整個(gè)RAIDO的條帶地址映射表。
全文摘要
可動(dòng)態(tài)調(diào)整條帶深度的RAID0的實(shí)現(xiàn)方法,本發(fā)明通過接收應(yīng)用訪問RAID0的I/O命令,動(dòng)態(tài)創(chuàng)建RAID0的條帶,條帶深度StripeDepth根據(jù)I/O命令要讀寫數(shù)據(jù)的大小動(dòng)態(tài)計(jì)算,保證為StripeDepthmin的整數(shù)倍,StripeDepthmin等于區(qū)塊的大小,并將記錄每個(gè)條帶信息的元數(shù)據(jù)存儲(chǔ)到NANDFLASH的Sparearea區(qū)。并同時(shí)設(shè)計(jì)了實(shí)現(xiàn)該可動(dòng)態(tài)調(diào)整條帶深度的RAID0的實(shí)現(xiàn)方法的系統(tǒng)。在不額外占用用戶存儲(chǔ)空間的前提下,獲得在不同的應(yīng)用I/O塊大小的場景中都可獲得最佳的并發(fā)效果,整體上提高存儲(chǔ)器的訪問速度。
文檔編號(hào)G06F3/06GK102819408SQ20121030234
公開日2012年12月12日 申請日期2012年8月24日 優(yōu)先權(quán)日2012年8月24日
發(fā)明者夏君揚(yáng) 申請人:記憶科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1