本發(fā)明屬于固態(tài)盤(SSD)讀寫性能控制技術(shù)領(lǐng)域,具體涉及一種提升SSD在垃圾回收期間讀性能的方法。
背景技術(shù):
近些年來,基于NAND Flash的固態(tài)硬盤(Solid State Drive,SSD)由于性能高、功耗低、可靠性高、抗震性好、無噪聲等諸多優(yōu)點(diǎn)獲得廣泛的應(yīng)用。但是SSD在使用一段時(shí)間之后,其訪問性能會有顯著下降。垃圾回收對SSD的性能有顯著的影響,通過對Intel SSD DC P3700(800G)進(jìn)行測試發(fā)現(xiàn),針對讀寫粒度為4KB,讀寫比例是7:3的隨機(jī)混合請求。當(dāng)Intel SSD是空盤時(shí),其IOPS能達(dá)到20萬,讀寫帶寬能達(dá)到800MB/s;當(dāng)對Intel SSD進(jìn)行數(shù)據(jù)預(yù)埋和碎片化處理后,其IOPS下降到9W,讀寫帶寬下降到360MB/s。主要原因是,在使用一段時(shí)間后,SSD內(nèi)部垃圾回收的頻繁觸發(fā),降低了SSD的讀寫性能。
由于閃存芯片具有寫前擦除的特性,更新數(shù)據(jù)時(shí)通常采用異地更新策略,這會產(chǎn)生大量無效頁。為保證SSD的正常使用,需要對無效頁進(jìn)行垃圾回收操作,擦除選擇的目標(biāo)塊以便再使用。由于閃存芯片的讀寫粒度和擦除粒度不同,在擦除一個(gè)塊之前,垃圾回收一般涉及到有效數(shù)據(jù)的遷移,在數(shù)據(jù)遷移時(shí),數(shù)據(jù)的源物理頁和目的物理頁所處的芯片(chip)和通道(channel)會被占用。在執(zhí)行擦除操作時(shí),雖然不會占用通道資源,但擦除對象所處的晶圓(die)會被占用。因此,垃圾回收過程中SSD的讀寫性能將受到較大影響。
如圖3所示,一個(gè)完整的垃圾回收操作包括三步:1)選擇要回收的目標(biāo)塊,2)進(jìn)行有效數(shù)據(jù)的遷移,3)擦除目標(biāo)塊。在擦除目標(biāo)塊時(shí),整個(gè)die將被占用,容易造成請求沖突,不能及時(shí)響應(yīng)外界請求。寫請求的沖突可以通過緩存和預(yù)留空間等方式解決,相較之下讀沖突更難處理,一般只能被迫等待擦除操作完成,另外同步的讀操作不僅影響本通道(channel)的請求,還會影響各個(gè)通道(channel)的響應(yīng)。比較Flash的擦除操作和讀操作時(shí)間,擦除操作時(shí)間為ms級,讀操作時(shí)間為us級,兩者時(shí)間比接近100:1;并且隨著SSD容量的增加,擦除塊大小進(jìn)一步變大,兩者的時(shí)間相差會越來越大。綜上所述,對讀請求而言,被迫等待擦除操作的完成會顯著降低SSD的訪問性能。
因?yàn)槔厥丈婕暗接行?shù)據(jù)的遷移和塊擦除操作,占用大量系統(tǒng)資源,為盡可能減少垃圾回收對SSD訪問性能的影響,目前存在充分利用系統(tǒng)空閑資源進(jìn)行垃圾回收或通過最大程度提高垃圾回收效率的垃圾回收的方案,但是這些方案中垃圾回收始終被視為一個(gè)不可拆分整體,缺少垃圾回收對SSD正常請求沖突的考慮。為解決上述問題,現(xiàn)有技術(shù)中出現(xiàn)了一種可中斷的垃圾回收機(jī)制,其在有效數(shù)據(jù)遷移期間,每遷移一個(gè)數(shù)據(jù)頁能夠中斷正在進(jìn)行的垃圾回收響應(yīng)正常的讀寫請求。該方案能夠在一定程度上解決垃圾回收和正常請求的沖突,但是其中斷時(shí)間選擇有局限性,只能在數(shù)據(jù)遷移中發(fā)生,沒有考慮垃圾回收過程中耗時(shí)最長的擦除操作和讀寫請求的沖突。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種提升SSD在垃圾回收期間的讀性能的方法,其通過在固態(tài)盤通道間搭建RAID,從而能夠及時(shí)響應(yīng)讀請求,解決目前的SSD在垃圾回收期間讀請求性能低,克服現(xiàn)有技術(shù)中存在的垃圾回收過程中耗時(shí)最長的擦除操作和讀寫請求的沖突缺陷。
為實(shí)現(xiàn)上述目的,按照本發(fā)明,提供一種提升SSD在垃圾回收期間讀性能的方法,包括:
在各通道間以數(shù)據(jù)頁為條帶建立RAID;
處理讀請求時(shí),如果讀請求訪問的數(shù)據(jù)頁所在的晶圓(die)沒有進(jìn)行擦除操作,此時(shí)讀請求正常響應(yīng);
如果讀請求訪問的數(shù)據(jù)頁所在的晶圓(die)正被擦除操作所占用,發(fā)生短暫失效,此時(shí)利用通道間的所述RAID通過讀取同一條帶上其他數(shù)據(jù)頁的數(shù)據(jù)進(jìn)行RAID重建,從而及時(shí)響應(yīng)該讀請求。
作為本發(fā)明的進(jìn)一步優(yōu)選,所述RAID重建即通過RAID條帶中的其他數(shù)據(jù)頁用異或的方式來恢復(fù)所述讀請求所需要讀取的數(shù)據(jù)頁。
作為本發(fā)明的進(jìn)一步優(yōu)選,在進(jìn)行RAID重建過程中若擦除操作完成,晶圓(die)可重新被訪問,則消除所述RAID重建痕跡,正常響應(yīng)讀請求。
作為本發(fā)明的進(jìn)一步優(yōu)選,各個(gè)通道的RAID重建讀操作能夠并行處理,且不影響該通道上的正常的讀寫請求,重建讀操作完成可以有先后順序。
作為本發(fā)明的進(jìn)一步優(yōu)選,在每次處理寫請求時(shí)計(jì)算或者更新校驗(yàn)數(shù)據(jù)頁數(shù)據(jù),所述計(jì)算或者更新校驗(yàn)數(shù)據(jù)頁數(shù)據(jù)包括整個(gè)條帶第一次寫數(shù)據(jù)、單個(gè)數(shù)據(jù)頁第一次寫數(shù)據(jù)、單個(gè)數(shù)據(jù)頁更新數(shù)據(jù)以及整個(gè)條帶更新數(shù)據(jù)。
作為本發(fā)明的進(jìn)一步優(yōu)選,所述整個(gè)條帶第一次寫數(shù)據(jù)包括同時(shí)向各數(shù)據(jù)頁寫數(shù)據(jù),校驗(yàn)頁數(shù)據(jù)由各數(shù)據(jù)頁數(shù)據(jù)做異或運(yùn)算得到,最后將各數(shù)據(jù)頁和校驗(yàn)頁構(gòu)成一個(gè)條帶寫入閃存。
作為本發(fā)明的進(jìn)一步優(yōu)選,所述單個(gè)數(shù)據(jù)頁第一次寫數(shù)據(jù)包括向任一條帶中的一個(gè)新數(shù)據(jù)頁寫入數(shù)據(jù),首先將原始校驗(yàn)頁數(shù)據(jù)從閃存中讀取到DRAM,然后校驗(yàn)頁的校驗(yàn)數(shù)據(jù)與所述新數(shù)據(jù)頁數(shù)據(jù)異或得到新校驗(yàn)數(shù)據(jù),最后將所述新數(shù)據(jù)頁數(shù)據(jù)和新校驗(yàn)數(shù)據(jù)寫入閃存。
作為本發(fā)明的進(jìn)一步優(yōu)選,所述單個(gè)數(shù)據(jù)頁更新寫數(shù)據(jù)包括將所述單個(gè)數(shù)據(jù)頁的原數(shù)據(jù)和校驗(yàn)頁的原校驗(yàn)數(shù)據(jù)從閃存中讀取出來,然后將所述原數(shù)據(jù)與新數(shù)據(jù)按位異或,異或后的結(jié)果再與原校驗(yàn)數(shù)據(jù)按位異或,得到的結(jié)果即為新校驗(yàn)數(shù)據(jù),最后將新數(shù)據(jù)與新校驗(yàn)數(shù)據(jù)寫回到閃存中。
作為本發(fā)明的進(jìn)一步優(yōu)選,所述整個(gè)條帶更新寫數(shù)據(jù)包括同時(shí)使用新數(shù)據(jù)更新各數(shù)據(jù)頁,校驗(yàn)頁數(shù)據(jù)由各數(shù)據(jù)頁更新的新數(shù)據(jù)異或得到,最后將各數(shù)據(jù)頁更新的新數(shù)據(jù)和新校驗(yàn)頁數(shù)據(jù)寫回閃存。
按照本發(fā)明的另一方面,提供一種通過通道間內(nèi)建RAID響應(yīng)系統(tǒng)讀請求的方法,其步驟如下:
1)在各通道間以數(shù)據(jù)頁為條帶建立RAID;
2)有讀請求,置計(jì)數(shù)器i=1;
3)判斷該讀請求所在的晶圓(die)是否被擦除操作占用,是轉(zhuǎn)步驟4),否步驟轉(zhuǎn)9);
4)判斷i是否等于1,是則轉(zhuǎn)步驟5),否則轉(zhuǎn)步驟6);
5)生成n-1個(gè)重建讀請求分別掛載到n-1個(gè)通道上,讀取剩余RAID條帶的數(shù)據(jù),其中n為通道總數(shù);
6)并行處理n-i個(gè)通道,依次處理通道上已有的讀寫請求;
7)讀取通道上同一條帶的相應(yīng)數(shù)據(jù)塊,每處理一個(gè)通道上的重建讀請求,i++;
8)判斷n-i是否等于0,是則轉(zhuǎn)步驟10),否則轉(zhuǎn)步驟3);
9)直接讀取數(shù)據(jù)塊,清除RAID重建的痕跡,轉(zhuǎn)步驟11);
10)根據(jù)已有的n-1個(gè)數(shù)據(jù)塊,利用RAID5來恢復(fù)要讀取的數(shù)據(jù)塊;
11)響應(yīng)讀請求。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效果:
(1)本發(fā)明中,利用SSD內(nèi)建的RAID,將垃圾回收過程中擦除塊所在的die視作短暫失效,類似RAID的降級模式,通過RAID重建的方式來響應(yīng)讀請求,能夠有效解決垃圾回收中讀沖突。
(2)本發(fā)明中,在通道間搭建RAID,充分利用SSD內(nèi)部的并行性,因?yàn)楣虘B(tài)盤的數(shù)據(jù)讀寫粒度為一個(gè)閃存頁,故其條帶以頁為單位組織。
附圖說明
圖1是本發(fā)明實(shí)施例的多通道SSD架構(gòu)示意圖;
圖2是NAND Flash芯片的內(nèi)部結(jié)構(gòu)示意圖;
圖3是NAND Flash執(zhí)行垃圾回收的過程示意圖;
圖4是本發(fā)明實(shí)施例的讀寫請求處理流程圖;
圖5是本發(fā)明實(shí)施例的SSD通道間搭建RAID5工作原理示意圖;
圖6是本發(fā)明實(shí)施例的方法中針對不同寫請求4種計(jì)算校驗(yàn)頁方式示意圖;
圖7本發(fā)明實(shí)施例的方法中利用RAID5同一條帶來重建數(shù)據(jù)頁的示意圖;
圖8是本發(fā)明實(shí)施例的方法處理讀請求流程示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,SSD由一系列閃存陣列組成,SSD內(nèi)部有多個(gè)閃存控制器(nfc),每個(gè)閃存控制器控制一個(gè)通道(channel),閃存控制器之間獨(dú)立工作,每個(gè)通道有自己的通道總線;每個(gè)通道上掛載多個(gè)閃存芯片(chip)。圖2為芯片內(nèi)部結(jié)構(gòu),每個(gè)閃存芯片由多個(gè)晶圓(die)組成;每個(gè)晶圓由多個(gè)分組(plane)組成;每個(gè)分組有多個(gè)塊(block),塊是閃存芯片擦除的基本單位,每個(gè)塊有多個(gè)頁(page),頁是閃存芯片讀寫的基本單位。
按照本發(fā)明一個(gè)實(shí)施例的方法,如圖5所示,首先在各通道(channel)間以數(shù)據(jù)頁(page)為條帶建立RAID,本實(shí)施例中優(yōu)選為RAID5,內(nèi)建RAID5的通道數(shù)優(yōu)選為5個(gè),但本發(fā)明中并不限于此,只要能夠校驗(yàn)的RAID都適用此。每個(gè)條帶由D0,D1,D2,D3四個(gè)數(shù)據(jù)頁和P一個(gè)校驗(yàn)頁組成,分別屬于組成RAID5的5個(gè)通道。
針對SSD內(nèi)建RAID的存在,為保證SSD數(shù)據(jù)的一致性,每次處理寫請求除了寫其本身的數(shù)據(jù)頁之外,還會更新RAID條帶的校驗(yàn)數(shù)據(jù)頁。計(jì)算或者更新校驗(yàn)數(shù)據(jù)頁包括整個(gè)條帶第一次寫數(shù)據(jù)、單個(gè)數(shù)據(jù)頁第一次寫數(shù)據(jù)、單個(gè)數(shù)據(jù)頁第一次寫數(shù)據(jù)以及單個(gè)數(shù)據(jù)頁更新寫數(shù)據(jù)。
本方案中第一次寫數(shù)據(jù)頁和更新數(shù)據(jù)寫以及整條帶寫數(shù)據(jù)和寫單個(gè)數(shù)據(jù)頁計(jì)算校驗(yàn)數(shù)據(jù)頁的方式不同。
如圖6所示,對于整個(gè)條帶第一次寫數(shù)據(jù),其具體過程可以如下:如圖6(A),條帶為空,數(shù)據(jù)D0,D1,D2,D3所在頁一開始為空,校驗(yàn)數(shù)據(jù)P所在的頁也為空。同時(shí)寫入數(shù)據(jù)D0,D1,D2,D3后,校驗(yàn)數(shù)據(jù)P由數(shù)據(jù)D0,D1,D2,D3做異或運(yùn)算得到,最后將數(shù)據(jù)D0,D1,D2,D3和校驗(yàn)數(shù)據(jù)P都寫入閃存構(gòu)成一個(gè)條帶。
如圖6所示,對于單個(gè)數(shù)據(jù)頁第一次寫數(shù)據(jù),其具體過程可以如下:如圖6(B),向某一條帶中寫入新數(shù)據(jù)D0,首先將原始校驗(yàn)數(shù)據(jù)P從閃存中讀取到DRAM,然后校驗(yàn)數(shù)據(jù)P與數(shù)據(jù)D0異或得到新的校驗(yàn)數(shù)據(jù)P’,最后將數(shù)據(jù)D0和新校驗(yàn)數(shù)據(jù)P’寫入閃存。
如圖6所示,對于單個(gè)數(shù)據(jù)頁更新寫數(shù)據(jù),其具體過程可以如下:如圖6(C),當(dāng)要使用新數(shù)據(jù)D0’來更新舊數(shù)據(jù)D0時(shí),首先將舊數(shù)據(jù)D0和校驗(yàn)數(shù)據(jù)P0從閃存中讀取出來,然后將舊數(shù)據(jù)D0與新數(shù)據(jù)D0’按位異或,異或后的結(jié)果再與校驗(yàn)數(shù)據(jù)P0按位異或,得到的結(jié)果P0’即為新的校驗(yàn)數(shù)據(jù),最后將新數(shù)據(jù)D0’與新校驗(yàn)數(shù)據(jù)P0’寫回到閃存中。
如圖6所示,對于整個(gè)條帶更新寫數(shù)據(jù),其具體過程可以如下:如圖6(D)所示,同時(shí)使用新數(shù)據(jù)D0’,D1’,D2’,D3’更新舊數(shù)據(jù)D0,D1,D2,D3,新校驗(yàn)數(shù)據(jù)P’由新數(shù)據(jù)D0’,D1’,D2’,D3’異或得到,最后將新數(shù)據(jù)D0’,D1’,D2’,D3’和新校驗(yàn)數(shù)據(jù)P’一起寫回閃存。
如圖7所示,描述數(shù)據(jù)重建的過程:此時(shí)有讀請求要讀取channel2上的數(shù)據(jù)D2,D2所屬die被擦除操作占用,出現(xiàn)短暫失效,通過RAID5條帶中的其他頁的數(shù)據(jù)用異或的方式來恢復(fù)數(shù)據(jù)D2。
本發(fā)明中,提升SSD在垃圾回收期間讀性能的方法主要包括:
在各通道間以數(shù)據(jù)頁為條帶建立RAID;
處理讀請求時(shí),如果讀請求訪問的數(shù)據(jù)頁所在的晶圓(die)沒有正在進(jìn)行擦除操作,此時(shí)讀請求正常響應(yīng);
如果讀請求訪問的數(shù)據(jù)頁所在的晶圓(die)正被擦除操作所占用,發(fā)生短暫失效,此時(shí)利用通道間的所述RAID通過讀取同一條帶上其他數(shù)據(jù)頁的數(shù)據(jù)進(jìn)行RAID重建,從而及時(shí)響應(yīng)該讀請求。
其中RAID重建即通過RAID條帶中的其他數(shù)據(jù)頁用異或的方式來恢復(fù)所述讀請求所需要讀取的數(shù)據(jù)頁。
具體地,如圖8所示,本發(fā)明一個(gè)實(shí)施例的提升SSD在垃圾回收期間讀性能的方法,通過在通道間內(nèi)建RAID5響應(yīng)系統(tǒng)讀請求的方式進(jìn)行,其具體步驟如下:
①有讀請求,置計(jì)數(shù)器i=1,i用來記錄重建讀請求已完成的通道數(shù);
②判斷該讀請求所在的die是否被擦除操作占用,是轉(zhuǎn)步驟③,否步驟轉(zhuǎn)⑧;
③判斷i是否等于1,是則轉(zhuǎn)步驟④,否則轉(zhuǎn)步驟⑤;
④生成(n-1)個(gè)重建讀請求分別掛載到(n-1)個(gè)通道上;讀取剩余RAID條帶的數(shù)據(jù),n為通道總數(shù);
⑤并行處理(n-i)個(gè)channel;依次處理通道上已有的讀寫請求;
⑥讀取channel上同一條帶的相應(yīng)數(shù)據(jù)塊,每處理一個(gè)channel上的重建讀請求,i++;
⑦判斷(n-i)是否等于0,是轉(zhuǎn)⑨,否轉(zhuǎn)②;
⑧直接讀取數(shù)據(jù)塊,清除RAID重建的痕跡,轉(zhuǎn)⑩;
⑨根據(jù)已有的n-1個(gè)數(shù)據(jù)塊,利用RAID5來恢復(fù)要讀取的數(shù)據(jù)塊;
⑩響應(yīng)讀請求。
本方案中,通道上的請求是順序處理的,重建讀請求也被順序掛載到對應(yīng)channel上。因?yàn)槊總€(gè)channel上已有的請求數(shù)一般不相同,所以完成重建讀的時(shí)間也不同。通過輪詢的方式來保證所有channel都完成重建讀。因?yàn)榭赡艽嬖赗AID重建操作未完成之前,原channel上擦除操作先一步完成,此時(shí)不需要再進(jìn)行RAID重建,需要將未完成的raid重建的痕跡清除(主要是清除重建讀請求所生成的數(shù)據(jù)),即在進(jìn)行RAID重建過程中若擦除操作完成,晶圓(die)可重新被訪問,則消除所述RAID重建痕跡,正常響應(yīng)讀請求。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。