一種固態(tài)盤內(nèi)部緩存管理方法
【技術領域】
[0001] 本發(fā)明屬于計算機存儲技術領域,更具體地,涉及一種固態(tài)盤內(nèi)部緩存管理方法。
【背景技術】
[0002] 閃存(NANDFLASH)具有讀、寫速度快,能耗低及抗震性好的特點,因此,基于閃存 的固態(tài)盤已廣泛應用于高端服務器及筆記本電腦。存芯片由很多數(shù)據(jù)塊組成,每個數(shù)據(jù)塊 又包含多個數(shù)據(jù)頁。閃存中,讀、寫操作的最小單位為頁,閃存芯片可以隨機讀閃存中的任 意一頁,但寫操作時如果目標頁中以前有數(shù)據(jù),則必須先將該頁的數(shù)據(jù)擦除,然后才能寫新 的數(shù)據(jù),閃存擦除的單位為塊,即每次至少擦除一塊,同時,對某個具體閃存塊,它的擦除次 數(shù)是有限的;閃存中讀、寫操作所需時間是不對稱的,在閃存中寫一頁所需時間通常是讀一 頁所需時間的8~12倍。為了提高基于閃存的固態(tài)盤的性能,在基于閃存的固態(tài)盤中,通 常會加入一個高速的緩存用于臨時存放系統(tǒng)將來可能再次使用的數(shù)據(jù),因此,如何有效管 理固態(tài)盤內(nèi)部的緩存對提高固態(tài)盤性能及壽命具有重要的意義。
[0003]目前常用的緩存管理算法有LeastRecentlyUsed(LRU)、2queue(2Q)、Low Inter-referenceRecencySet(LIRS)、AdaptiveReplacementCache(ARC)等,這些常用 的緩存管理算法都是針對主機端的緩存管理。由于閃存具有讀、寫不對稱的特點,因此直接 將它們用在固態(tài)盤內(nèi)部的緩存管理中效果并不理想。
[0004] 針對固態(tài)盤內(nèi)部的緩存管理算法主要有針對混合映射FlashTranslation Layer(FTL)的BPLRU(BlockPaddingLeastRecentlyUsed)算法和針對頁映射的 CFLRU(Clean-FirstLRU)算法,BPLRU算法是當訪問到閃存中某塊的任一頁時,就將其整個 塊調(diào)入緩存中,換出緩存時也是將整個塊一次性寫回FLASH,該算法的優(yōu)點是可以將隨機讀 寫轉(zhuǎn)換成順序讀寫,同時減少混合存儲中合并(merger)操作;但BPLRU法不適用于頁映射 的固態(tài)盤,因為頁映射的固態(tài)盤中每個邏輯頁可以映射到固態(tài)盤任意的物理頁上。
[0005] 頁映射FTL具有簡單、高效的特點,目前固態(tài)盤中常采用頁映射FTL算法,在頁映 射FTL固態(tài)盤中,SSD內(nèi)部緩存管理通常采用CFLRU算法,當緩存寫滿數(shù)據(jù)需要替換時,緩 存中只要存在干凈數(shù)據(jù)頁,就將干凈數(shù)據(jù)頁以LRU方式替換出去;CFLRU法沒有考慮干凈數(shù) 據(jù)頁(讀數(shù)據(jù))在將來系統(tǒng)是否還會再訪問,在極端情況下,該方法會退化成只對臟數(shù)據(jù)頁 (寫數(shù)據(jù))進行緩存的LRU算法;在以讀操作為主的負載中,CFLRU的命中率會很低,從而影 響SSD的性能和壽命;同時,CFLRU將導致很多一次性寫數(shù)據(jù)長期滯留在緩存中,影響固態(tài) 盤的性能。
【發(fā)明內(nèi)容】
[0006] 針對現(xiàn)有技術的以上缺陷或改進需求,本發(fā)明提供了一種固態(tài)盤內(nèi)部緩存管理方 法,其目的在于解決現(xiàn)有固態(tài)盤內(nèi)部緩存管理方法緩存命中率低的問題。
[0007] 為了實現(xiàn)上述目的,本發(fā)明提供了一種固態(tài)盤內(nèi)部緩存管理方法,具體包括如下 步驟:
[0008] (1)當固態(tài)盤接收到上層訪問數(shù)據(jù)頁X命令,設置數(shù)據(jù)頁X權值的初始值;并判斷 數(shù)據(jù)頁X是否處于隊列Alin中;若是,則訪問該數(shù)據(jù)頁,進入步驟(9);若否,則進入步驟 (2);
[0009] (2)判斷數(shù)據(jù)頁X是否處于環(huán)AClock中,若是,則進入步驟(3),若否,則進入步驟 (5);
[0010] (3)判斷訪問數(shù)據(jù)頁X的動作是否為讀操作,若是,將該數(shù)據(jù)頁X移到環(huán)AClock的 尾部,進入步驟(9);若否,則表明訪問數(shù)據(jù)頁X的動作為寫操作,進入步驟(4);
[0011] (4)將該數(shù)據(jù)頁X的權值設置為最大值,并將該數(shù)據(jù)頁X移到環(huán)AClock的尾部,進 入步驟(9);
[0012] (5)為數(shù)據(jù)頁X在緩存中分配空間,進入步驟(6);
[0013] (6)判斷數(shù)據(jù)頁X的標識是否在隊列Alout中,若是,進入步驟(7);若否,則進入 步驟(8);
[0014] (7)設置數(shù)據(jù)頁X權值的初始值,并將該頁插入到AClock的尾部,進入步驟(9);
[0015] (8)將數(shù)據(jù)頁X插入到隊列Alin的頭部,進入步驟(9);
[0016] (9)結束讀寫訪問;
[0017] 其中,Alin是指固態(tài)盤中內(nèi)部緩存中的一個先進先出隊列;Alout是指固態(tài)盤內(nèi) 部緩存中的一個近期最少使用隊列,即LRU隊列;AClock是固態(tài)盤內(nèi)部緩存中一個用指針 連接起來的單向環(huán),該單向環(huán)中保存了兩個指針,頭部指針和尾部指針,尾部指針緊連著頭 部指針,即尾部指針的下一節(jié)點指向頭部節(jié)點;
[0018] Alin和AClock均用于存放緩存數(shù)據(jù);Alout用于存放數(shù)據(jù)頁的標識;當一個數(shù)據(jù) 頁從Alin中替換出緩存時,將該數(shù)據(jù)頁的標識保存到Alout隊列;當一個頁面從AClock環(huán) 中替換出緩存時,將該頁丟棄。
[0019] 優(yōu)選的,設置數(shù)據(jù)頁X權值的初始值的方法具體如下:
[0020] (a)對于寫操作,數(shù)據(jù)頁X權值初始值的設定方法為:
[0021] 將閃存寫一個數(shù)據(jù)頁所用的時間除以閃存讀一個數(shù)據(jù)頁所用的時間,對獲得的結 果乘以系數(shù)〇. 6,再取整,獲得寫權值初始值;如果系數(shù)太大則緩存中將保存大量的一次性 訪問的寫數(shù)據(jù)頁,如果系數(shù)太小,則很多將來可能再次被訪問的寫數(shù)據(jù)頁可能會被替換出 緩存,導致系統(tǒng)性能降低,壽命減小;實驗結果顯示當系數(shù)為〇. 6時系統(tǒng)能達到較優(yōu)的結 果;如下公式所示:
[0022]
[0023] 其中,丨1:表示對數(shù)值取整;
[0024] (b)對于讀操作,數(shù)據(jù)頁權值初始值為0。
[0025] 優(yōu)選的,上述步驟(4)中,將數(shù)據(jù)頁X的權值取5 ;寫的開銷10倍于讀操作;對于 寫操作而言,若寫權值過大,則會延長一次性寫數(shù)據(jù)頁在緩存中的停留時間,將導致很多將 來可能再被訪問的讀數(shù)據(jù)被替換出緩存,影響系統(tǒng)整體性能;如果寫權值過小,則寫數(shù)據(jù)頁 將會較快的替換出緩存,會降低寫操作的命中率。
[0026] 優(yōu)選的,Alin隊列長度最大值Kin為緩存大小的20%~30% ;AClock環(huán)的大小為 緩存總量的70%~80% ;Alout隊列保存了各數(shù)據(jù)頁的標識,在Alout隊列中,可保存標識 的最大個數(shù)Kout為緩存所能存放數(shù)據(jù)頁面?zhèn)€數(shù)的40 %~60 %。
[0027] 優(yōu)選的,所述在緩存中為數(shù)據(jù)頁X分配空間的方法,具體包括如下步驟:
[0028] (5. 1)判斷緩存中是否有空閑空間,若是,則進入步驟(5. 2),若否,則進入步驟 (5. 3);
[0029] (5. 2)將數(shù)據(jù)頁X存入分配到的緩存空間節(jié)點Z中,進入步驟(5. 12);
[0030] (5. 3)判斷隊列Alin長度是否大于Alin隊列長度最大值Kin,若是,則進入步驟 (5.4);若否,則進入步驟(5. 10);
[0031] (5.4)將Alin尾部的數(shù)據(jù)塊替換出緩存,替換出的數(shù)據(jù)記為Y,進入步驟(5.5);
[0032] (5. 5)將數(shù)據(jù)頁X放入替換出的緩存節(jié)點Z中,進入步驟(5. 6);
[0033] (5. 6)提取替換出的數(shù)據(jù)Y的標志位,進入步驟(5. 7);
[0034] (5. 7)判斷隊列Alout長度是否大于Alout隊列可保存標識符的最大個數(shù)Kout, 若是,進入步驟(5.8);若否,則進入步驟(5.9);
[0035] (5. 8)將Alout的尾部節(jié)點從Alout隊列中刪除,進入步驟(5. 9);
[0036] (5. 9)將上述替換出的數(shù)據(jù)Y的標志位放入新的節(jié)點L中,將L節(jié)點的下一節(jié)點指 向Alout的頭節(jié)點,并將L節(jié)點作為Alout的頭節(jié)點,進入步驟(5. 12);
[0037] (5. 10)獲取AClock頭部節(jié)點數(shù)據(jù)頁的權值,判斷該權值是否為0,若是,則進入步 驟(5. 12);若否,則進入步驟(5. 11);
[0038] (5. 11)將該數(shù)據(jù)頁權值減1,使尾部指針指向頭部頁節(jié)點,頭部指針指向下一個 數(shù)據(jù)頁節(jié)點,進入步驟(5. 10);
[0039] (5. 12)將頭部節(jié)點記作Z,使頭部指針指向Z節(jié)點的下一節(jié)點,使尾部指針的下一 節(jié)點指向頭部節(jié)點,進入步驟(5. 13);
[0040] (5. 13)將Z節(jié)點從AClock中剝離,將數(shù)據(jù)X放入Z節(jié)點中,進入步驟(5. 14);
[0041] (5. 14)函數(shù)返回Z節(jié)點,分配空間結束;
[0042] 在AClock中,初始時給讀數(shù)據(jù)頁和寫數(shù)據(jù)頁賦予不同的權值;在系統(tǒng)運行過程 中,各數(shù)據(jù)頁的權值動態(tài)變化,在AClock環(huán)中進行替換操作時對權值為0的頁面節(jié)點進行 替換;
[0043] 權值為0的數(shù)據(jù)頁有讀數(shù)據(jù)頁和在緩存中長時間沒被訪問的寫數(shù)據(jù)頁,由于讀數(shù) 據(jù)頁為干凈頁面,替換時不需要對閃存進行操作,替換讀數(shù)據(jù)頁的開銷較小;當權值為〇的 頁面為寫數(shù)據(jù)頁時,則表明該頁面在較長時間沒有被訪問,根據(jù)局部性原理,替換權值變?yōu)?〇的與數(shù)據(jù)頁可提尚緩存的命中率,從而提尚系統(tǒng)性能。
[0044] 總體而言,通過本發(fā)明所構思的以上技術方案與現(xiàn)有技術相比,對寫操作及讀操 作數(shù)據(jù)頁賦予不同的權值,使寫數(shù)據(jù)頁在緩存中停留的時間比讀數(shù)據(jù)頁在緩存中停留的時 間更長,并根據(jù)數(shù)據(jù)頁的命中情況,動態(tài)的調(diào)整各頁面的權值,使緩存在保持較高的總命中 率的情況下提高寫命中率,達到提高系統(tǒng)性能,延遲使用壽命的目的;具體能夠取得如下所 列的有益效果:
[0045] (1)本發(fā)明提供的固態(tài)盤內(nèi)部緩存管理方法,根據(jù)閃存讀、寫速度不對稱性的特 點,對固態(tài)盤內(nèi)部緩存中讀、寫數(shù)據(jù)頁賦予不同的權值;寫數(shù)據(jù)頁的權值大于讀數(shù)據(jù)頁;緩 存中數(shù)據(jù)頁的權值依據(jù)緩存中數(shù)據(jù)頁命中情況及數(shù)據(jù)頁在緩存中存放的時間進行動態(tài)調(diào) 整,當緩存寫滿數(shù)據(jù)需要替換時,系統(tǒng)查找緩存中權值為0的數(shù)據(jù)頁進行替換;
[0046] 由于寫數(shù)據(jù)頁權值比讀數(shù)據(jù)也權值大,寫數(shù)據(jù)頁在緩存中的停留時間比讀數(shù)據(jù)頁 在緩存中停留的時間長,以提尚緩存與命中率;因此,在保證緩存總命中率(讀命中率+與 命中率)的情況下提高了寫數(shù)據(jù)頁的命中率,從而提高了固態(tài)盤的性能,同時延長了固態(tài) 盤的壽命;
[0047] (2)本發(fā)明提供的固態(tài)盤內(nèi)部緩存管理方法,具有與2Q等傳統(tǒng)的緩存管理算法相 當?shù)目偯新剩ㄗx命中+寫命中),但由于本發(fā)明中將寫數(shù)據(jù)頁比讀數(shù)據(jù)頁賦予更高的權 值,使寫數(shù)據(jù)頁在緩存中停留的時間比讀數(shù)據(jù)頁停留的時間更長,提高了寫命中率;實驗結 果顯不,它的與命中率比2Q等傳統(tǒng)算法最多可提尚30%;另外,在Aclock環(huán)中,各頁依據(jù) 局部性原理,動態(tài)調(diào)整權值,從而保證了系統(tǒng)具有較高的總命中率;
[0048] (3)本發(fā)明提供的固態(tài)盤內(nèi)部緩存管理方法,與基于頁映射的固態(tài)盤內(nèi)部緩存管 理算法如CFLRU比較而言,由于該發(fā)明緩存中使用了兩個隊列,消除了一次性數(shù)據(jù)對緩存 的污染;使其總命中率比