管理混合緩存的方法及設(shè)備的制作方法
【專利摘要】本發(fā)明實施例提供了一種管理混合緩存的方法,其中,混合緩存包括隨機存儲器RAM和固態(tài)存儲器SSD,方法包括:生成第二隊列以及第三隊列,其中,第二隊列用于管理RAM中熱的干凈數(shù)據(jù)塊;第三隊列用于管理RAM中臟數(shù)據(jù)塊;第二隊列和第三隊列的長度之和不變;第二隊列的淘汰概率高于第三隊列的淘汰概率,第二隊列的長度隨著對第二隊列執(zhí)行的淘汰操作動態(tài)變化,第三隊列的長度隨著對第三隊列執(zhí)行的淘汰操作動態(tài)變化;確定從第二隊列或第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次數(shù)閾值;如果是,即判定該數(shù)據(jù)塊為長期熱數(shù)據(jù)塊,利用第五隊列管理淘汰的數(shù)據(jù)塊,并將淘汰的數(shù)據(jù)塊寫入SSD,第五隊列用于管理SSD中的數(shù)據(jù)塊。
【專利說明】管理混合緩存的方法及設(shè)備
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及信息【技術(shù)領(lǐng)域】,并且具體地,涉及管理混合緩存的方法及設(shè)備。
【背景技術(shù)】
[0002] 目前為了改進磁盤系統(tǒng)的輸入/輸出(Input/Output,I/O)性能,如縮短請求響應(yīng) 時間、提高吞吐率等等,在大多數(shù)存儲系統(tǒng)中都在磁盤系統(tǒng)的上層采用了緩存技術(shù)。
[0003] 例如,從存儲結(jié)構(gòu)上來講,一種典型結(jié)構(gòu)是"隨機存取存儲器(Random Access Memory,RAM) +廉價冗余磁盤陣列(Redundant Arrays of Inexpensive Disks,RAID),'型, 其中只有RAM作為RAID的緩存。這種緩存器件由一種介質(zhì)構(gòu)成,稱為單質(zhì)緩存。
[0004] 最近,由于固態(tài)存儲器(Solid State Disk,SSD)的普遍應(yīng)用,人們提出了一種三 級存儲結(jié)構(gòu)--^'RAM+SSD+RAID",其中RAM和SSD共同作為RAID的緩存。由于RAM和SSD 是兩種不同的介質(zhì),故稱為混合緩存??梢愿鶕?jù)一定的算法原則,在RAM、SSD、RAID三種存 儲器件之間調(diào)度數(shù)據(jù),一般地做法是將RAID中認為有價值的數(shù)據(jù)副本,緩存在RAM或SSD 中,以快速響應(yīng)應(yīng)用的請求。
[0005] 相對于典型的以RAM為緩存的單質(zhì)緩存結(jié)構(gòu),為了在混合緩存結(jié)構(gòu)中更好地發(fā)揮 SSD的作用,出現(xiàn)了考慮SSD特性的新緩存算法。例如,以SSD的隨機I/O性能較好為著眼 點的算法。比如,基于溫度感知的緩存算法(Temperature Aware Caching, TAC)。具體而 言,在TAC算法中,按照磁盤地址空間劃分成多個區(qū)域(region),每個區(qū)域含32個4KB的 頁。每個區(qū)域有一個溫度。當上層1/0請求到達時,如果該1/0請求涉及的頁是隨機訪問 類型的,則給其所屬的區(qū)域的溫度加上一個常量Q ;如果該1/0請求涉及的頁是順序訪問 類型的,則給其所屬的區(qū)域的溫度加上另一常量Q。Q大于Q。如果某個區(qū)域的溫度超過 SSD中所有區(qū)域的最低溫度,則該區(qū)域可以替換SSD中最低溫度的區(qū)域,從而進入SSD中。 對于RAM而言,常采用最近最少使用(Least Recently Used,LRU)算法。因此,從RAM淘汰 的干凈頁和臟頁進入SSD的機會是均等的。對于隨機訪問的臟頁,根據(jù)TAC算法需要寫回 SSD中,而寫請求會給SSD帶來損耗,影響SSD的性能和壽命。而且,SSD響應(yīng)寫請求的速度 比響應(yīng)讀請求的速度慢若干個數(shù)量級。同時,這樣的緩存算法也會導致緩存訪問次數(shù)較少 的數(shù)據(jù)塊,從而使得緩存命中率降低。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明實施例提供一種管理混合緩存的方法及裝置,用于解決現(xiàn)有技術(shù)中的緩存 命中率低的問題。
[0007] 第一方面,本發(fā)明實施例提供了一種管理混合緩存的方法,所述混合緩存包括隨 機存儲器RAM和固態(tài)存儲器SSD,所述RAM和所述SSD共同作為由一個或多個磁盤構(gòu)成的磁 盤系統(tǒng)的緩存;
[0008] 所述方法包括:
[0009] 生成第二隊列以及第三隊列,其中,所述第二隊列用于管理所述RAM中熱的干凈 數(shù)據(jù)塊,所述熱的干凈數(shù)據(jù)塊通過所述第二隊列被找到;所述第三隊列用于管理所述RAM 中臟數(shù)據(jù)塊,所述臟數(shù)據(jù)塊通過所述第三隊列被找到;所述第二隊列和所述第三隊列的長 度之和不變;
[0010] 當新數(shù)據(jù)塊需要由所述第二隊列或所述第三隊列管理,并且所述RAM的空閑空間 不足以存放所述新數(shù)據(jù)塊時,對所述第二隊列或所述第三隊列執(zhí)行淘汰操作,其中所述第 二隊列的淘汰概率高于所述第三隊列的淘汰概率,所述第二隊列的長度隨著對所述第二隊 列執(zhí)行的淘汰操作動態(tài)變化,所述第三隊列的長度隨著對所述第三隊列執(zhí)行的淘汰操作動 態(tài)變化;
[0011] 確定從所述第二隊列或所述第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次 數(shù)閾值;
[0012] 如果所述淘汰的數(shù)據(jù)塊的訪問次數(shù)超過所述訪問次數(shù)閾值,即判定該數(shù)據(jù)塊為長 期熱數(shù)據(jù)塊,利用第五隊列管理所述淘汰的數(shù)據(jù)塊,并將所述淘汰的數(shù)據(jù)塊寫入所述SSD, 所述第五隊列用于管理所述SSD中的數(shù)據(jù)塊。
[0013] 在第一方面的第一種可能的實現(xiàn)方式中,所述磁盤系統(tǒng)包括多個磁盤,所述磁盤 系統(tǒng)為廉價冗余磁盤陣列RAID,所述RAID包括多個條帶,一個條帶對應(yīng)一個數(shù)據(jù)塊;
[0014] 所述第三隊列包括(n+1)個子隊列,所述第三隊列中的第i子隊列中所管理的所 有數(shù)據(jù)塊對應(yīng)的條帶頻率SF值均為i,所述SF值為條帶中已讀入所述RAM中的條帶單元的 大小與所述條帶訪問次數(shù)之間的比值,η為正整數(shù),i為取值從0至η的整數(shù);
[0015] 所述(n+1)子隊列中的第η子隊列用于管理進入所述RAM的新的臟數(shù)據(jù)塊;所述 (n+1)個子隊列中除所述第η子隊列之外的其它子隊列分別用于管理所述RAM中熱的臟數(shù) 據(jù)塊;
[0016] 當有讀請求或?qū)懻埱笤L問到所述第三隊列管理的數(shù)據(jù)塊時,根據(jù)該請求的特征更 新該數(shù)據(jù)塊的SF值,并根據(jù)新的SF值將該數(shù)據(jù)塊移動到對應(yīng)的子隊列;
[0017] 在對所述第三隊列執(zhí)行淘汰操作時,按照SF值從大到小的順序?qū)λ觯╪+1)個子 隊列執(zhí)行淘汰操作。
[0018] 結(jié)合第一方面第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述對所述 第二隊列或所述第三隊列執(zhí)行淘汰操作包括:
[0019] 如果所述第二隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行淘汰 操作;
[0020] 如果所述第三隊列的長度小于或等于第二長度閾值,則對所述第二隊列執(zhí)行淘汰 操作;
[0021] 如果所述第二隊列的長度大于所述第一長度閾值且所述第二隊列的長度大于或 等于第三長度閾值,則對所述第二隊列執(zhí)行淘汰操作;
[0022] 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述 第三長度閾值、且所述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí) 行淘汰操作;
[0023] 其中,所述第一長度閾值用于表示所述第二隊列的最小長度的參考值;
[0024] 所述第二長度閾值用于表示所述第三隊列的最小長度的參考值;
[0025] 所述第三長度閾值與第一歷史隊列的命中次數(shù)正相關(guān),與所述第二歷史隊列的命 中次數(shù)負相關(guān),所述第一歷史隊列用于管理從所述第二隊列淘汰的數(shù)據(jù)塊,所述第二歷史 隊列用于管理從所述第三隊列淘汰的數(shù)據(jù)塊;
[0026] 所述第四長度閾值用于表示所述第η子隊列的最大長度的參考值。
[0027] 結(jié)合第一方面第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述如果所 述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于第三長度閾值、且所 述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí)行淘汰操作,包括 :
[0028] 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述 第三長度閾值、且所述第三隊列中的第η子隊列的長度大于或等于所述第四長度閾值,則 對所述第η子隊列執(zhí)行淘汰操作。
[0029] 結(jié)合第一方面第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述如果所 述第二隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行淘汰操作,包括:
[0030] 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第三隊列中第η 子隊列的長度大于所述第二長度閾值的情況下,則對所述第η子隊列執(zhí)行淘汰操作;
[0031] 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第η子隊列的長 度小于或等于所述第二長度閾值的情況下,則對所述第(η-1)子隊列執(zhí)行淘汰操作。
[0032] 結(jié)合第一方面第一到第四種中任意一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方 式中,當?shù)谝魂犃?、第四隊列或所述第五隊列所管理的?shù)據(jù)塊被應(yīng)用層的讀請求命中時,被 命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第二隊列管理,所述第一隊列用于管理進入所述RAM的新的干凈 數(shù)據(jù)塊,所述第四隊列用于管理從所述RAM淘汰到所述RAID的數(shù)據(jù)塊,所述第四隊列管理 的數(shù)據(jù)塊的訪問次數(shù)小于或等于所述訪問次數(shù)閾值;
[0033] 當所述第一隊列、所述第二隊列、所述第四隊列或所述第五隊列所管理的數(shù)據(jù)塊 被應(yīng)用層的寫請求命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第三隊列中的第k子隊列管理,k為 所述寫請求產(chǎn)生的數(shù)據(jù)塊對應(yīng)的SF值,k為正整數(shù),且0彡k彡η-1。
[0034] 結(jié)合第一方面第五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,所述第一隊 列的長度是固定的,所述第一隊列的長度是根據(jù)以下因素確定的:進入所述RAM的新的干 凈塊在所述RAM中的預熱時長,抗讀請求掃描緩存。
[0035] 結(jié)合第一方面,或者第一方面第一至第六種任意一種可能的實現(xiàn)方式,在第七種 可能的實現(xiàn)方式中,在所述第五隊列中,將數(shù)據(jù)塊訪問次數(shù)作為價值因子之一,來衡量所述 第五隊列所管理的數(shù)據(jù)塊的價值;所述價值為將所述第五隊列所管理的數(shù)據(jù)塊從所述SSD 淘汰到所述磁盤系統(tǒng)的依據(jù)。
[0036] 第二方面,本發(fā)明實施例提供了一種管理混合緩存的設(shè)備,所述混合緩存包括隨 機存儲器RAM和固態(tài)存儲器SSD,所述RAM和所述SSD共同作為由一個或多個磁盤構(gòu)成的磁 盤系統(tǒng)的緩存;
[0037] 所述設(shè)備包括:
[0038] 生成單元,用于生成第二隊列、第三隊列以及第五隊列,其中,所述第二隊列用于 管理所述RAM中熱的干凈數(shù)據(jù)塊,所述熱的干凈數(shù)據(jù)塊通過所述第二隊列被找到;所述第 三隊列用于管理所述RAM中臟數(shù)據(jù)塊,所述臟數(shù)據(jù)塊通過所述第三隊列被找到;所述第二 隊列和所述第三隊列的長度之和不變;所述第五隊列用于管理所述SSD中的數(shù)據(jù)塊;
[0039] 淘汰單元,當有新數(shù)據(jù)塊需要由所述第二隊列或所述第三隊列管理,并且所述RAM 的空閑空間不足以存放所述新數(shù)據(jù)塊時,對所述生成單元生成的所述第二隊列或所述第三 隊列執(zhí)行淘汰操作,其中所述第二隊列的淘汰概率高于所述第三隊列的淘汰概率,所述第 二隊列的長度隨著對所述第二隊列執(zhí)行的淘汰操作動態(tài)變化,所述第三隊列的長度隨著對 所述第三隊列執(zhí)行的淘汰操作動態(tài)變化;
[0040] 確定單元,用于確定所述淘汰單元在對所述第二隊列或第二隊列進行淘汰操作 時,從所述第二隊列或所述第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次數(shù)閾值;
[0041] 寫入單元,用于當所述確定單元確定淘汰的數(shù)據(jù)塊的訪問次數(shù)超過所述訪問次數(shù) 閾值,則利用所述第五隊列管理所述淘汰的數(shù)據(jù)塊,并將所述淘汰的數(shù)據(jù)塊寫入所述SSD, 所述第五隊列用于管理所述SSD中的數(shù)據(jù)塊。
[0042] 在第二方面的第一種可能的實現(xiàn)方式中,所述磁盤系統(tǒng)包括多個磁盤,所述磁盤 系統(tǒng)為廉價冗余磁盤陣列RAID,所述RAID包括多個條帶,一個條帶對應(yīng)一個數(shù)據(jù)塊;
[0043] 所述第三隊列包括(n+1)個子隊列,所述第三隊列中的第i子隊列中所管理的所 有數(shù)據(jù)塊對應(yīng)的條帶頻率SF值均為i,所述SF值為條帶中已讀入所述RAM中的條帶單元的 大小與所述條帶訪問次數(shù)之間的比值,η為正整數(shù),i為取值從0至η的整數(shù);
[0044] 所述(n+1)子隊列中的第η子隊列用于管理進入所述RAM的新的臟數(shù)據(jù)塊;所述 (n+1)個子隊列中除所述第η子隊列之外的其它子隊列分別用于管理所述RAM中熱的臟數(shù) 據(jù)塊;
[0045] 所述淘汰單元具體用于:當有讀請求或?qū)懻埱笤L問到所述第三隊列管理的數(shù)據(jù)塊 時,根據(jù)該請求的特征更新該數(shù)據(jù)塊的SF值,并根據(jù)新的SF值將該數(shù)據(jù)塊移動到對應(yīng)的子 隊列;在對所述第三隊列執(zhí)行淘汰操作時,按照SF值從大到小的順序?qū)λ觯╪+1)個子隊 列執(zhí)行淘汰操作。
[0046] 結(jié)合第二方面第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述淘汰單 元具體用于:
[0047] 如果所述第二隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行淘汰 操作;
[0048] 如果所述第三隊列的長度小于或等于第二長度閾值,則對所述第二隊列執(zhí)行淘汰 操作;
[0049] 如果所述第二隊列的長度大于所述第一長度閾值且所述第二隊列的長度大于或 等于第三長度閾值,則對所述第二隊列執(zhí)行淘汰操作;
[0050] 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述 第三長度閾值、且所述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí) 行淘汰操作;
[0051] 其中,所述第一長度閾值用于表示所述第二隊列的最小長度的參考值;
[0052] 所述第二長度閾值用于表示所述第三隊列的最小長度的參考值;
[0053] 所述第三長度閾值與第一歷史隊列的命中次數(shù)正相關(guān),與所述第二歷史隊列的命 中次數(shù)負相關(guān),所述第一歷史隊列用于管理從所述第二隊列淘汰的數(shù)據(jù)塊,所述第二歷史 隊列用于管理從所述第三隊列淘汰的數(shù)據(jù)塊;
[0054] 所述第四長度閾值用于表示所述第η子隊列的最大長度的參考值。
[0055] 結(jié)合第二方面第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述淘汰單 元在用于:
[0056] 所述如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于 第三長度閾值、且所述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí) 行淘汰操作時,具體用于:
[0057] 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述 第三長度閾值、且所述第三隊列中的第η子隊列的長度大于或等于所述第四長度閾值,則 對所述第η子隊列執(zhí)行淘汰操作。
[0058] 結(jié)合第二方面第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述淘汰單 元在用于:
[0059] 所述如果所述第二隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行 淘汰操作時,具體用于:
[0060] 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第三隊列中第η 子隊列的長度大于所述第二長度閾值的情況下,則對所述第η子隊列執(zhí)行淘汰操作;
[0061] 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第η子隊列的長 度小于或等于所述第二長度閾值的情況下,則對所述第(η-1)子隊列執(zhí)行淘汰操作。
[0062] 結(jié)合第二方面第一到第四種中任意一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方 式中,所述生成單元還用于生成第一隊列以及第四隊列,所述第一隊列用于管理進入所述 RAM的新的干凈數(shù)據(jù)塊,所述第四隊列用于管理從所述RAM淘汰到所述RAID的數(shù)據(jù)塊,所述 第四隊列管理的數(shù)據(jù)塊的訪問次數(shù)小于或等于所述訪問次數(shù)閾值;
[0063] 當?shù)谝魂犃?、第四隊列或所述第五隊列所管理的?shù)據(jù)塊被應(yīng)用層的讀請求命中 時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第二隊列管理;
[0064] 當所述第一隊列、所述第二隊列、所述第四隊列或所述第五隊列所管理的數(shù)據(jù)塊 被應(yīng)用層的寫請求命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第三隊列中的第k子隊列管理,k為 所述寫請求產(chǎn)生的數(shù)據(jù)塊對應(yīng)的SF值,k為正整數(shù),且0彡k彡η-1。
[0065] 結(jié)合第二方面第五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,所述第一隊 列的長度是固定的,所述第一隊列的長度是根據(jù)以下因素確定的:進入所述RAM的新的干 凈塊在所述RAM中的緩存時長,抗讀請求掃描緩存。
[0066] 結(jié)合第二方面,或者第二方面第一至第六種任意一種可能的實現(xiàn)方式,在第七種 可能的實現(xiàn)方式中,在所述第五隊列中,將數(shù)據(jù)塊訪問次數(shù)作為價值因子之一,來衡量所述 第五隊列所管理的數(shù)據(jù)塊的價值;所述價值為將所述第五隊列所管理的數(shù)據(jù)塊從所述SSD 淘汰到所述磁盤系統(tǒng)的依據(jù)。
[0067] 本發(fā)明實施例中,在RAM的淘汰策略中,考慮給第三隊列中熱的臟數(shù)據(jù)塊更多的 被緩存下來的機會,盡可能地淘汰第一隊列或第二隊列管理的干凈數(shù)據(jù)塊;其中用于第三 隊列的根據(jù)SF值淘汰的策略,體現(xiàn)了盡可能淘汰"占用緩存空間大、訪問次數(shù)少"的臟數(shù)據(jù) 塊。這樣一來,一方面盡可能減少對SSD頻繁寫操作,另一方面盡可能將較大的數(shù)據(jù)塊寫回 RAID或SSD,能減少寫請求的開銷。最后,從整體上來看,RAM只用于緩存較近期的熱數(shù)據(jù), 從RAM淘汰的數(shù)據(jù)中篩選出訪問次數(shù)較大的數(shù)據(jù),移動到SSD中,而訪問次數(shù)較小的數(shù)據(jù), 則回到RAID,即SSD只用于緩存較長期的熱數(shù)據(jù),RAID用于保存冷數(shù)據(jù),這種做法很好地利 用了 RAM和SSD的容量上差異,使得熱數(shù)據(jù)分布更加合理,從而有利于提高命中率、縮短1/ 0請求響應(yīng)時間。
【專利附圖】
【附圖說明】
[0068] 為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使 用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實施例,對于 本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他 的附圖。
[0069] 圖1是可應(yīng)用本發(fā)明實施例的架構(gòu)的示意圖;
[0070] 圖2是本發(fā)明實施例一的流程圖;
[0071] 圖3是本發(fā)明實施例二的管理混合緩存的方法的示意性流程圖;
[0072] 圖4是本發(fā)明實施例二的多條隊列管理數(shù)據(jù)塊的過程的示意圖;
[0073] 圖5是本發(fā)明實施例二的第一隊列的管理過程的示意圖;
[0074] 圖6是本發(fā)明實施例二的第二隊列的管理過程的示意圖;
[0075] 圖7是本發(fā)明實施例二的第二隊列的動態(tài)調(diào)整過程的示意圖;
[0076] 圖8是本發(fā)明實施例二的第三隊列的管理過程的示意圖;
[0077] 圖9是本發(fā)明實施例二的第三隊列的一個例子的示意圖;
[0078] 圖10是本發(fā)明實施例二的第三隊列的老化策略的例子的示意圖;
[0079] 圖11是本發(fā)明實施例二的第四隊列的管理過程的示意圖;
[0080] 圖12是本發(fā)明實施例二的第五隊列的一個例子的示意圖;
[0081] 圖13是本發(fā)明實施例二的管理混合緩存的方法中響應(yīng)讀請求過程的示意性流程 圖;
[0082] 圖14是本發(fā)明實施例二的管理混合緩存的方法中響應(yīng)寫請求過程的示意性流程 圖;
[0083] 圖15是本發(fā)明實施例二的第二隊列和第三隊列的淘汰過程的示意性流程圖;
[0084] 圖16為本發(fā)明實施例三的結(jié)構(gòu)示意圖;
[0085] 圖17為本發(fā)明實施例四的結(jié)構(gòu)示意圖。
【具體實施方式】
[0086] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例是本發(fā)明的一部分實施例,而不是全部實施例?;诒景l(fā) 明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實 施例,都應(yīng)屬于本發(fā)明保護的范圍。
[0087] 本發(fā)明實施例可以應(yīng)用于傳統(tǒng)塊存儲系統(tǒng)或分布塊存儲系統(tǒng)的混合緩存管理系 統(tǒng)中。
[0088] 實施例一
[0089] 圖1是可應(yīng)用本發(fā)明實施例一的架構(gòu)的示意圖。
[0090] 如圖1所示,在該架構(gòu)中,存儲系統(tǒng)包括RAM110、SSD120以及磁盤系統(tǒng),其中,磁盤 系統(tǒng)為了保證性能及可靠性,一般都會組成RAID (當然,如果不考慮上述優(yōu)點,也可不構(gòu)建 RAID),本實施例在圖中用RAID130表示。RAM110和SSD120共同構(gòu)建成RAID130的混合緩 存。
[0091] 圖1中,緩存管理模塊140可以對混合緩存和RAID130進行管理。緩存管理模塊 為在邏輯上進行劃分的一個模塊,其實現(xiàn)上有多種形式。例如,緩存管理模塊可以是運行于 主機上的軟件模塊,用于管理與主機直接相聯(lián)(Direct Attached)或通過網(wǎng)絡(luò)(如Storage Attached Network)相聯(lián)的存儲設(shè)備,包括圖中所示RAM以及SSD、磁盤設(shè)備。緩存管理模 塊還可以是運行于RAID控制器中的基于CPU或FPGA或其他硬件實現(xiàn)的軟件模塊和/或硬 件模塊,用于管理與RAID控制器相聯(lián)的RAM設(shè)備、磁盤設(shè)備、SSD設(shè)備。
[0092] 可以接收應(yīng)用層150的I/O請求,基于混合緩存和RAID130,對應(yīng)用層150的I/O 請求進行處理。
[0093] 本發(fā)明實施例提供的一種管理混合緩存的方法包括:
[0094] S1、生成第二隊列以及第三隊列,其中,第二隊列用于管理RAM中熱的干凈數(shù)據(jù) 塊,熱的干凈數(shù)據(jù)塊通過第二隊列被找到;第三隊列用于管理RAM中臟數(shù)據(jù)塊,臟數(shù)據(jù)塊通 過第三隊被找到;第二隊列和第三隊列的長度之和不變;
[0095] 本步驟中的"隊列"中的數(shù)據(jù)可認為是管理數(shù)據(jù)塊的元數(shù)據(jù)的隊列,用于記錄真正 的數(shù)據(jù)塊的有關(guān)信息,隊列的實現(xiàn)及含義都跟緩存管理領(lǐng)域中的"隊列"含義保持一致,前 面加上"第二"、"第三"等術(shù)語僅用于區(qū)別不同的隊列,這些隊列的結(jié)構(gòu)及功能都相同。本 步驟中的"熱"、"冷"、"干凈"、"臟"、等術(shù)語都為緩存管理領(lǐng)域技術(shù)人員所公知的術(shù)語,因此, 這里不再詳細解釋。
[0096] 此外,本領(lǐng)域技術(shù)人員能夠理解,第二隊列管理的"RAM中熱的干凈數(shù)據(jù)塊"是短期 的,第三隊列管理的"RAM中臟數(shù)據(jù)塊"也是短期的。這里的"短期"的概念是相對于"長期" 而言的。由于RAM容量較小,它僅擁有較小時間窗口來記錄數(shù)據(jù)塊被訪問的情況,即只能緩 存近期可能被訪問的數(shù)據(jù)塊;而SSD容量較大,擁有較長的時間窗口,可用來緩存較遠的未 來可能被訪問的數(shù)據(jù)塊,這種數(shù)據(jù)分布方法較為合理地利用了 RAM和SSD在容量上的差異。 為方便表述,本發(fā)明稱在RAM中的數(shù)據(jù)塊為短期數(shù)據(jù)塊,在SSD中數(shù)據(jù)塊為長期數(shù)據(jù)塊。
[0097] S2、當新數(shù)據(jù)塊需要由第二隊列或第三隊列管理,并且RAM的空閑空間不足以存 放新數(shù)據(jù)塊時,對第二隊列或第三隊列執(zhí)行淘汰操作,其中第二隊列的淘汰概率高于第三 隊列的淘汰概率,第二隊列的長度隨著對第二隊列執(zhí)行的淘汰操作動態(tài)變化,第三隊列的 長度隨著對第三隊列執(zhí)行的淘汰操作動態(tài)變化;
[0098] 本步驟中的"淘汰"的概念跟現(xiàn)有緩存管理中"淘汰"的概念也相同,即緩存滿了 的時候,"淘汰"掉一部分緩存中的數(shù)據(jù)以騰出空間給新的需要緩存的數(shù)據(jù)。其中,"第二隊 列的淘汰概率"完整的說法為"對第二隊列管理的存儲介質(zhì)中的數(shù)據(jù)進行淘汰的概率",但 為了方便,本領(lǐng)域技術(shù)人員一般都使用"第二隊列的淘汰概率",因此,為了說明方便,本實 施例以及以下各實施例中,并不對上述術(shù)語進行嚴格區(qū)分,可以認為,對第二隊列進行淘汰 就是對第二隊列管理的存儲介質(zhì)中的數(shù)據(jù)進行淘汰,即對RAM中的RAM中短期的熱的干凈 數(shù)據(jù)塊進行淘汰。
[0099] S3、確定從第二隊列或第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次數(shù)閾 值;
[0100] S4、如果淘汰的數(shù)據(jù)塊的訪問次數(shù)超過訪問次數(shù)閾值,則利用第五隊列管理淘汰 的數(shù)據(jù)塊,并將淘汰的數(shù)據(jù)塊寫入SSD,第五隊列用于管理SSD中的數(shù)據(jù)塊。
[0101] 本發(fā)明實施例中,在RAM的淘汰策略中,優(yōu)先對用于管理短期的熱的干凈數(shù)據(jù)塊 的第二隊列執(zhí)行淘汰操作(即第二隊列的淘汰概率要高于第二隊列的淘汰概率),使得給 臟數(shù)據(jù)塊更多地被RAM緩存的機會,而不需要頻繁地將臟數(shù)據(jù)塊寫回SSD,從而能夠降低 SSD的寫損耗,提升SSD的響應(yīng)速度。同時,從RAM淘汰的且訪問次數(shù)超過次數(shù)閾值的數(shù)據(jù) 塊由第五隊列管理,也就是說該淘汰數(shù)據(jù)塊進入SSD,使得能夠為RAM騰出更多的空間緩存 更有價值的數(shù)據(jù)塊,因此能夠有效提高緩存命中率。
[0102] 在一種優(yōu)選的實施方式中,磁盤系統(tǒng)包括多個磁盤,磁盤系統(tǒng)為廉價冗余磁盤陣 列RAID,RAID包括多個條帶,一個條帶對應(yīng)一個數(shù)據(jù)塊;
[0103] 此時,第三隊列可以包括(n+1)個子隊列,第三隊列中的第i子隊列中所管理的所 有數(shù)據(jù)塊對應(yīng)的條帶頻率SF值均為i,SF值為條帶中已讀入RAM中的條帶單元的大小與條 帶訪問次數(shù)之間的比值,η為正整數(shù),i為取值從0至η的整數(shù);
[0104] (n+1)子隊列中的第η子隊列用于管理進入RAM的新的臟數(shù)據(jù)塊;(n+1)個子隊列 中除第η子隊列之外的其它子隊列分別用于管理RAM中短期的熱的臟數(shù)據(jù)塊;
[0105] 在對第三隊列執(zhí)行淘汰操作時,按照SF值從大到小的順序?qū)Γ╪+1)個子隊列執(zhí)行 淘汰操作。
[0106] 采用這種根據(jù)SF值淘汰的方法,能盡可能淘汰那些"占用空間較大、訪問次數(shù)較 少"的臟數(shù)據(jù)塊,一方面能為RAM騰出較大塊的緩存空間、淘汰那些近期訪問次數(shù)較少的數(shù) 據(jù)塊,使得RAM緩存更近期的、更熱的數(shù)據(jù)塊,因而有利于提高命中率;另一方面,由于RAID 和SSD在處理較小的寫請求方面開銷較大,該方法能減少對RAID和SSD頻繁地小寫,一定 程度上能夠削減訪問RAID和SSD帶來的開銷。
[0107] 本實施例中,對第二隊列或第三隊列執(zhí)行淘汰操作包括:
[0108] 如果第二隊列的長度小于或等于第一長度閾值,則對第三隊列執(zhí)行淘汰操作;
[0109] 如果第三隊列的長度小于或等于第二長度閾值,則對第二隊列執(zhí)行淘汰操作;
[0110] 如果第二隊列的長度大于第一長度閾值且第二隊列的長度大于或等于第三長度 閾值,則對第二隊列執(zhí)行淘汰操作;
[0111] 如果第二隊列的長度大于第一長度閾值、第二隊列的長度小于第三長度閾值、且 第η子隊列的長度大于或等于第四長度閾值,則對第三隊列執(zhí)行淘汰操作;
[0112] 其中,第一長度閾值用于表不第二隊列的最小長度的參考值;
[0113] 第二長度閾值用于表示第三隊列的最小長度的參考值;
[0114] 第三長度閾值與第一歷史隊列的命中次數(shù)正相關(guān),與第二歷史隊列的命中次數(shù)負 相關(guān),第一歷史隊列用于管理從第二隊列淘汰的數(shù)據(jù)塊,第二歷史隊列用于管理從第三隊 列淘汰的數(shù)據(jù)塊;
[0115] 第四長度閾值用于表示第η子隊列的最大長度的參考值。
[0116] 應(yīng)用上述四條淘汰規(guī)則,從整體上來說,使得從RAM淘汰干凈塊的概率大于臟塊, 給臟塊更多的機會被RAM緩存,減少淘汰臟塊的操作頻率,有助于削減寫RAM和SSD的開 銷,延長SSD的使用壽命。詳見下文。
[0117] 本實施例中,如果第二隊列的長度大于第一長度閾值、第二隊列的長度小于第三 長度閾值、且第η子隊列的長度大于或等于第四長度閾值,則對第三隊列執(zhí)行淘汰操作,包 括:
[0118] 如果第二隊列的長度大于第一長度閾值、第二隊列的長度小于第三長度閾值、且 第三隊列中的第η子隊列的長度大于或等于第四長度閾值,則對第η子隊列執(zhí)行淘汰操作。
[0119] 這種做法能夠使得第三隊列的第η子隊列抵抗寫請求掃描緩存。具體來說,當 有大量寫請求產(chǎn)生大量的新的臟數(shù)據(jù)塊時,且若此時RAM已滿,為了避免這些新的臟數(shù)據(jù) 塊擠出RAM中已緩存的熱數(shù)據(jù)塊,上述規(guī)則通常能夠保證這些新塊最多不超過第四長度閾 值,合理的第四長度閾值使得這種寫請求掃描現(xiàn)象不會擠出過多的熱數(shù)據(jù)塊,有利于保證 在此特殊情況下請求的命中率不會急劇下降。
[0120] 另外,這種做法相比于傳統(tǒng)的自適應(yīng)淘汰算法(傳統(tǒng)做法是當?shù)诙犃虚L度小于 第三長度閾值就選擇淘汰第三隊列),加強了淘汰第三隊列的條件。通常情況下,這樣做帶 來的效果是淘汰第二隊列的概率大于第三隊列。而第三隊列管理的都是臟塊,因而臟的數(shù) 據(jù)塊有更多的機會被保留在RAM,減少寫SSD和RAID的操作頻率,使得臟數(shù)據(jù)塊有更多的時 間去承接應(yīng)用層的寫請求,當?shù)谌犃兄械呐K數(shù)據(jù)塊變得足夠大、足夠冷時,再根據(jù)SF值 淘汰規(guī)則淘汰之,而SF值淘汰規(guī)則又進一步有利于削減被淘汰的數(shù)據(jù)塊寫回SSD或RAID 的開銷。
[0121] 本實施例中,如果第二隊列的長度小于或等于第一長度閾值,則對第三隊列執(zhí)行 淘汰操作,包括:
[0122] 如果第二隊列的長度小于或等于第一長度閾值,在第三隊列中第η子隊列的長度 大于第二長度閾值的情況下,則對第η子隊列執(zhí)行淘汰操作;
[0123] 如果第二隊列的長度小于或等于第一長度閾值,在第η子隊列的長度小于或等于 第二長度閾值的情況下,則對第(η-1)子隊列執(zhí)行淘汰操作。
[0124] 應(yīng)用該規(guī)則能夠避免第二隊列長度過小,盡可能保證緩存中留存一定量的熱的干 凈塊。由于淘汰規(guī)則整體上使得第二隊列淘汰的概率更大,在某些極端情況下(如寫請求 所訪問數(shù)據(jù)集急劇增大的時候),第二隊列長度可能被淘汰操作減少到〇,此時若沒有該規(guī) 則的約束且根據(jù)優(yōu)先淘汰第二隊列的原則,讀請求產(chǎn)生的熱的干凈塊會立即被淘汰,其后 果就是第二隊列的長度長期在0和1之間跳變,即第二隊列對訪問模式的變化的響應(yīng)特性 很差。因此給第二隊列設(shè)置一個最小長度閾值(即第一長度閾值),當該隊列長度到達該長 度閾值,則選擇淘汰第三隊列,這樣至少能保證最低的讀請求命中率。
[0125] 本實施例中,當?shù)谝魂犃小⒌谒年犃谢虻谖尻犃兴芾淼臄?shù)據(jù)塊被應(yīng)用層的讀請 求命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由第二隊列管理,第一隊列用于管理進入RAM的新的干凈 數(shù)據(jù)塊,第四隊列用于管理從RAM淘汰到RAID的數(shù)據(jù)塊,第四隊列管理的數(shù)據(jù)塊的訪問次 數(shù)小于或等于訪問次數(shù)閾值;
[0126] 當?shù)谝魂犃?、第二隊列、第四隊列或第五隊列所管理的?shù)據(jù)塊被應(yīng)用層的寫請求 命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由第三隊列中的第k子隊列管理,k為寫請求產(chǎn)生的數(shù)據(jù)塊對 應(yīng)的SF值,k為正整數(shù),且0彡k彡η-1。
[0127] 這種做法較好地利用了 RAM容量較小但訪問速度相對較快的特性,該做法構(gòu)造了 一種讓冷數(shù)據(jù)塊及長期熱數(shù)據(jù)塊,變成短期熱數(shù)據(jù)塊的機制,這樣做能提高命中率。由于 RAM容量較SSD小,為了規(guī)避RAM的這個限制,同時發(fā)揮RAM訪問速度很快的特性,有必要 讓RAM緩存那些近期的熱數(shù)據(jù),即短期的熱數(shù)據(jù)塊。根據(jù)上述做法,第一隊列、第四隊列管 理的均為冷數(shù)據(jù)塊,第五隊列管理的是長期熱數(shù)據(jù)塊,當這些數(shù)據(jù)塊被再次訪問到,根據(jù)程 序局部性原理,可以預期它們在短期內(nèi)還會被訪問到,因而需要將它們轉(zhuǎn)移到RAM,并由第 二隊列或第三隊列接管。
[0128] 本實施例中,第一隊列的長度是固定的,第一隊列的長度是根據(jù)以下因素確定的: 進入RAM的新的干凈塊在RAM中的緩存時長,抗讀請求掃描緩存。
[0129] 這樣使得第一隊列起到預熱干凈塊的作用,同時還能抵抗讀請求掃描緩存。由于 新的干凈塊都是先進入第一隊列進行預熱,而將該隊列長度即成為新塊預熱的時間窗口, 只有被再次訪問才可以進一步進入第二或第三隊列,這證明該塊有可能成為有價值的熱數(shù) 據(jù)塊;否則,就會其他新塊擠出第一隊列,從而從RAM中被淘汰,這證明該數(shù)據(jù)塊沒有價值。 這種預熱的作用有利于識別有價值的數(shù)據(jù)塊,幫助提高緩存命中率。另外,當突發(fā)的大量 讀請求產(chǎn)生大量的這種低價值的干凈塊時,由于第一隊列長度固定,這些塊能夠迅速流出 RAM,從而避免過多地擠出其他隊列所管理的數(shù)據(jù)塊,即抗讀請求掃描,有利于保證在此特 殊情況下請求的命中率不會急劇下降。
[0130] 本實施例中,在第五隊列中,將數(shù)據(jù)塊訪問次數(shù)作為價值因子之一,來衡量第五隊 列所管理的數(shù)據(jù)塊的價值;價值為將第五隊列所管理的數(shù)據(jù)塊從SSD淘汰到磁盤系統(tǒng)的依 據(jù)。
[0131] 這種做法使得SSD中數(shù)據(jù)塊的價值判定因素與RAM保持一致,即都必須考慮訪問 次數(shù),避免管理RAM和SSD的算法缺少相關(guān)性,避免忽略了訪問次數(shù)這個價值因子。相比于 RAM和SSD分別采用獨立的算法(如管理RAM的算法考慮I/O請求的時間局部性,而管理 SSD的算法則進數(shù)據(jù)塊的訪問次數(shù)),采用一致價值因子,能盡量漏選有價值的數(shù)據(jù)塊或誤 選沒有價值的數(shù)據(jù)塊,有利于提高緩存命中率。
[0132] 實施例二
[0133] 基于實施例一,本發(fā)明實施例通過一個具體的執(zhí)行流程來對上述方案進行具體描 述,具體包括如下步驟:
[0134] 圖3是根據(jù)本發(fā)明實施例的管理混合緩存的方法的示意性流程圖。圖3的方法由 管理混合緩存的設(shè)備執(zhí)行,例如可以是圖1中所示的緩存管理模塊140。
[0135] 混合緩存包括RAM和SSD。RAM和SSD共同作為RAID的緩存。
[0136] 210,接收應(yīng)用層的當前I/O請求。
[0137] 220,確定當前I/O請求的命中結(jié)果,命中結(jié)果用于指示I/O請求是否命中第一隊 列、第二隊列、第三隊列、第四隊列和第五隊列中之一,其中,第一隊列用于記錄RAM中的第 一部分數(shù)據(jù)塊的信息,第二隊列用于記錄RAM中的第二部分數(shù)據(jù)塊的信息,第三隊列用于 記錄RAM中第三部分數(shù)據(jù)塊的信息,第四隊列用于記錄第四部分數(shù)據(jù)塊的信息,第五隊列 用于記錄第五部分數(shù)據(jù)塊的信息,第三部分數(shù)據(jù)塊為RAM中除第一部分數(shù)據(jù)塊和第二部分 數(shù)據(jù)塊之外的數(shù)據(jù)塊,第四部分數(shù)據(jù)塊為從RAM淘汰到RAID中的數(shù)據(jù)塊,第五部分數(shù)據(jù)塊 為SSD中的數(shù)據(jù)塊并且是從RAM淘汰的。
[0138] 230,根據(jù)命中結(jié)果,將當前I/O請求針對的當前數(shù)據(jù)塊的信息插入目標隊列,目 標隊列為下列之一:第一隊列、第二隊列、第三隊列。
[0139] 240,在RAM中處理當前I/O請求。
[0140] 本發(fā)明實施例中,通過確定當前I/O請求的命中結(jié)果,根據(jù)用于指示是否命中第 一隊列至第五隊列之一的命中結(jié)果,將當前I/O請求針對的當前數(shù)據(jù)塊的信息插入第一隊 列、第二隊列和第三隊列中之一。第一隊列、第二隊列和第三隊列用于管理RAM中的數(shù)據(jù) 塊,第四隊列用于管理從RAM淘汰到RAID中的數(shù)據(jù)塊,第五隊列用于管理SSD中的數(shù)據(jù)塊, 而SSD中的數(shù)據(jù)塊是從RAM中淘汰的數(shù)據(jù)塊,可見,對于I/O請求產(chǎn)生的數(shù)據(jù)塊,首先由第 一隊列、第二隊列或第三隊列進行管理,然后第一隊列、第二隊列、第三隊列與第四隊列和 第五隊列相互配合,為SSD篩選出準入的數(shù)據(jù)塊,因此通過五條隊列的管理模式,將RAM和 SSD相結(jié)合,而不再是彼此獨立,從而能夠?qū)崿F(xiàn)對RAM和SSD的協(xié)同管理,提高混合緩存性 能。
[0141] 本發(fā)明實施例中,數(shù)據(jù)塊的信息可以包括數(shù)據(jù)塊的元數(shù)據(jù)和/或數(shù)據(jù)塊的存儲地 址信息。例如,存儲地址信息可以為地址指針。對于第一隊列、第二隊列和第三隊列中記錄 的數(shù)據(jù)塊的信息可以包括元數(shù)據(jù)和地址指針,地址指針均指向RAM。第四隊列中記錄的數(shù)據(jù) 塊的信息可以包括元數(shù)據(jù)。第五隊列中記錄的數(shù)據(jù)塊的信息可以包括元數(shù)據(jù)和地址指針, 其中地址指針指向SSD。另外,上述元數(shù)據(jù)可以包括條帶或數(shù)據(jù)塊的訪問次數(shù)、已被緩存的 條帶單元數(shù)、條帶在RAID中的地址等。
[0142] 應(yīng)理解,本發(fā)明實施例中,RAM中的數(shù)據(jù)塊由上述第一部分數(shù)據(jù)塊、上述第二部分 數(shù)據(jù)塊和上述第三部分數(shù)據(jù)塊組成。
[0143] 可選地,作為一個實施例,第一部分數(shù)據(jù)塊和第二部分數(shù)據(jù)塊可以是由讀I/O請 求產(chǎn)生的,第二部分數(shù)據(jù)塊的訪問頻率可以高于第一部分數(shù)據(jù)塊的訪問頻率。第三部分數(shù) 據(jù)塊可以是由寫I/O請求產(chǎn)生的。
[0144] 具體而言,按照訪問模式來分類,數(shù)據(jù)塊可以分為干凈塊和臟塊。具體地,讀I/O 請求所產(chǎn)生的數(shù)據(jù)塊屬于干凈塊,寫I/O請求所產(chǎn)生的數(shù)據(jù)塊屬于臟塊。按照數(shù)據(jù)塊的熱 度來分類,數(shù)據(jù)塊可以分為熱數(shù)據(jù)塊和冷數(shù)據(jù)塊塊。熱度與訪問頻率相關(guān)。本發(fā)明實施例 中,將訪問模式和數(shù)據(jù)的熱度相結(jié)合,可以將數(shù)據(jù)塊分為四類:熱的干凈(Hot Clean,HC) 塊、熱的臟(Hot Dirty,HD)塊、冷的干凈(Cold Clean,CC)塊、冷的臟(Cold Dirty,CD)塊 四類。
[0145] 因此,上述第一部分數(shù)據(jù)塊可以為CC塊,第二部分數(shù)據(jù)塊可以為HC塊。第三部分 數(shù)據(jù)塊為臟塊,其中可以包括HD塊或⑶塊。
[0146] 對于熱數(shù)據(jù)塊而言,其進一步被分類為短期熱數(shù)據(jù)塊、長期熱數(shù)據(jù)塊。短期熱數(shù)據(jù) 塊可以為最近的有限時間窗口內(nèi)被訪問的熱數(shù)據(jù),長期熱數(shù)據(jù)塊可以是距離現(xiàn)在相對較遠 的有限時間窗口內(nèi)被訪問的熱數(shù)據(jù)。對于RAM和SSD而言,時間窗口長度最終表現(xiàn)為各自 容量的大小。
[0147] 第四部分數(shù)據(jù)塊和第五部分數(shù)據(jù)塊均是從RAM中淘汰的數(shù)據(jù)塊。RAM中保留的一 些數(shù)據(jù)塊可以屬于短期熱數(shù)據(jù)塊。第五部分數(shù)據(jù)塊可以屬于長期熱數(shù)據(jù)塊,而第四部分數(shù) 據(jù)塊可以冷數(shù)據(jù)塊??梢岳斫獾氖牵谖宀糠謹?shù)據(jù)塊實質(zhì)上為熱塊,其中可以包括HC塊或 HD塊。第四部分數(shù)據(jù)塊實質(zhì)上為冷塊,可以包括CC塊。
[0148] 本實施例中,通過五個隊列管理不同類型的數(shù)據(jù)塊,對RAM和SSD能夠更好地進行 協(xié)同管理。此外,可以理解的是,通過第一隊列、第二隊列和第三隊列與第四隊列和第五隊 列相互配合,使得RAM可以保留短期熱數(shù)據(jù)塊,SSD可以保留長期熱數(shù)據(jù)塊,而RAID中存儲 冷數(shù)據(jù)塊,這樣,可以提高命中率。
[0149] 此外,RAM容量遠比SSD容量小,因此RAM中可以保留短期熱數(shù)據(jù)塊,SSD中可以保 留長期熱數(shù)據(jù)塊,這種數(shù)據(jù)分布考慮到RAM和SSD各自的容量特點,因此可以數(shù)據(jù)異質(zhì)性分 布。這種數(shù)據(jù)分布能夠有效提升混合緩存性能。
[0150] 可選地,作為另一實施例,第二隊列的長度與應(yīng)用層的讀I/O請求比例正相關(guān),第 三隊列的長度與應(yīng)用層的寫I/O請求比例正相關(guān)。
[0151] 具體地,第二隊列的長度和第三隊列的長度可以是變化的。第二隊列的長度可以 隨著讀I/O請求比例的增加而增加,第三隊列的長度可以隨著寫I/O請求比例的增加而增 力口??梢姡斶^去一段時間讀I/O請求較多時,第二隊列可以記錄更多的HC塊的信息,也就 是RAM可以保留更多的HC塊。當過去一段時間寫I/O請求較多時,第三隊列可以記錄更多 的臟塊的信息,也就是RAM可以保留更多的臟塊。因此,本實施例中,第二隊列的長度和第 三隊列的長度可以動態(tài)變化,適應(yīng)讀I/O請求和寫I/O請求的比例變化,從而能夠進一步提 高命中率。
[0152] 可選地,作為另一實施例,第二隊列采用的策略、第三隊列采用的策略和第五隊列 采用的策略可以均與訪問頻率相關(guān)。
[0153] 如上所述,現(xiàn)有的SSD緩存算法和RAM緩存算法之間是相互獨立的。例如,TAC算 法考慮數(shù)據(jù)的溫度和隨機性,而LRU算法考慮數(shù)據(jù)塊的時間局部性。由于兩種算法建立在 不同的概念上,從而對SSD和RAM無法協(xié)同管理,混合緩存性能低。本實施例中,由于第二 隊列、第三隊列和第五隊列三者采用的策略均與訪問頻率相關(guān),因此通過相同的指標將RAM 的緩存算法和SSD的緩存算法融合,能夠更好地對SSD和RAM協(xié)同管理,提高混合緩存性 能。
[0154] 可選地,作為另一實施例,第二隊列采用LRU策略,第五隊列采用訪問頻率和多隊 列策略,第三隊列采用條帶頻率(Strip Frequency,SF)值和多隊列策略,SF值為條帶所占 空間與訪問頻率之間的比值。
[0155] 可見,當?shù)诙犃?、第三隊列和第五隊列互相配合時,均考慮了訪問頻率,因此,三 者的算法建立在相同的概念上,從而能夠更好地對SSD和RAM進行協(xié)同管理。
[0156] 可選地,作為另一實施例,第三隊列可以包括(n+1)個子隊列,第三隊列中的第i 子隊列中所記錄的所有數(shù)據(jù)塊對應(yīng)的SF值均為i,第i子隊列采用LRU策略,η為正整數(shù)且 η彡1,i為取值從0至η的整數(shù)。
[0157] 每個數(shù)據(jù)塊都有對應(yīng)的SF值。如果第三隊列采用SF值策略,那么根據(jù)SF值將該 數(shù)據(jù)塊的信息插入第三隊列的對應(yīng)位置,會在尋找位置過程中帶來很大的時間開銷。因此, 第三隊列可以包括多個子隊列。假設(shè)一個條帶(Stripe)中的條帶單元(Stripe Unit)的 數(shù)目為n,那么第三隊列可以包括(n+1)個子隊列。SF值的取值范圍可以是[0, η]。每個 子隊列管理的數(shù)據(jù)塊對應(yīng)的SF值均是相同的。每個子隊列可以采用LRU策略。
[0158] 這樣,對于第三隊列而言,會優(yōu)先淘汰占用空間大且訪問頻率低的數(shù)據(jù)塊的信息, 也就是說,會淘汰RAM中占用空間大且訪問頻率低的數(shù)據(jù)塊,這樣能夠更好地合并小寫I/O 請求,同時訪問頻率高的數(shù)據(jù)塊可以在RAM中保留更長的時間,從而提高命中率。而且,可 以理解的是,第三隊列采用的策略特點之一是盡可能緩存"頻繁的、小的寫I/O請求",從而 避免將這種寫I/O請求直接導向SSD或RAID。
[0159] 可選地,作為另一實施例,第一隊列采用FIFO策略。實質(zhì)上,第一隊列可以起到預 熱的作用。第一隊列管理訪問頻率較低的讀I/O請求產(chǎn)生的數(shù)據(jù)塊。當一個數(shù)據(jù)塊被第一 次讀I/O請求訪問時,該數(shù)據(jù)塊的信息可以插入第一隊列的尾部。如果該數(shù)據(jù)塊一直沒有 被再次訪問,可以將按照FIFO策略被淘汰。
[0160] 可選地,作為另一實施例,第四隊列采用FIFO策略。第四隊列的長度可以是固定 的。第四隊列管理從RAM中淘汰到RAID中的數(shù)據(jù)塊。這樣能夠在RAM實際容量一定的情 況下,等效地擴大其熱點統(tǒng)計的時間窗口,從而有利于挖掘10請求的時間局部性,提高命 中率。
[0161] 可選地,作為另一實施例,第一隊列的長度是固定的。
[0162] 抗緩存掃描是一種衡量緩存算法好壞的指標。大量的冷數(shù)據(jù)塊進入緩存時,會逐 個擠出已緩存的、經(jīng)常訪問的熱數(shù)據(jù),直到這種擠出效應(yīng)遍歷整個緩存空間,這種現(xiàn)象稱為 "緩存掃描",它嚴重影響緩存命中率。
[0163] 本實施例中,第一隊列管理訪問頻率較低的讀I/O請求產(chǎn)生的數(shù)據(jù)塊。第一隊列 的長度是固定的,因此第一隊列可以作為第二隊列的屏障,能夠防止讀請求掃描。
[0164] 此外,第三隊列中的第η子隊列管理SF值最高的數(shù)據(jù)塊。也就是說,當某個數(shù)據(jù) 塊被第一次寫I/O請求訪問時,該數(shù)據(jù)塊的信息會被插入第η子隊列。因此,第η子隊列也 可以起到預熱的作用。同時,第η子隊列可以作為第三隊列中其它子隊列的屏障,能夠防止 寫掃描。因此,本實施例能夠有效抵抗緩存掃描帶來的影響,從而能夠提高命中率。
[0165] 可選地,作為另一實施例,第五隊列可以包括至少一個子隊列。具體地,各個子隊 列可以分別與不同的訪問頻率范圍相對應(yīng)。也就是說,每個子隊列用于記錄其對應(yīng)的訪問 頻率范圍內(nèi)的數(shù)據(jù)塊的信息。每個子隊列可以采用LRU策略。此外,各個子隊列的活躍級 別可以按照對應(yīng)的訪問頻率確定。例如,對應(yīng)的訪問頻率越小,該子隊列的活躍級別越低。 當需要對第五隊列淘汰時,可以從活躍級別最低的子隊列開始淘汰。
[0166] 下面將描述基于上述描述的五個隊列的配置,RAM和SSD各自的準入策略(ΑΡ, Admission Policy)和淘汰策略(EP,Eviction Policy)。AP是緩存管理算法的一部分,是 針對存儲器件而言的,即決定具備何種特征的數(shù)據(jù)能被準許進入該器件。EP是緩存管理算 法的另一部分,也是針對存儲器件而言的,即當該存儲器已滿而又有新的數(shù)據(jù)要進入時,它 決定淘汰具備何種特征的舊數(shù)據(jù),來為新數(shù)據(jù)騰出存儲空間。
[0167] 下面首先描述當前1/0請求為讀請求時的混合緩存的管理過程。
[0168] 可選地,作為另一實施例,當前1/0請求可以為讀1/0請求。在步驟230中,如果 當前1/0請求命中第一隊列、第二隊列、第四隊列和第五隊列中之一,則將當前數(shù)據(jù)塊的信 息插入第二隊列;如果當前1/0請求命中第三隊列,則將當前數(shù)據(jù)塊的信息插入第三隊列; 如果當前1/0請求沒有命中第一隊列、第二隊列、第三隊列、第四隊列和第五隊列,則將當 前數(shù)據(jù)塊的信息插入第一隊列。
[0169] 第二隊列用于記錄讀1/0請求產(chǎn)生的訪問頻率較高的數(shù)據(jù)塊的信息。如果當前 1/0請求命中第一隊列、第二隊列、第四隊列或第五隊列,可以說明當前1/0請求針對的當 前數(shù)據(jù)塊是HC塊,那么可以將當前數(shù)據(jù)塊的信息插入第二隊列中。如果當前1/0請求命中 第三隊列,可以說明當前數(shù)據(jù)塊曾經(jīng)是臟塊,可以將當前數(shù)據(jù)塊的信息插入第三隊列。如果 當前1/0請求沒有命中第一隊列、第二隊列、第三隊列、第四隊列和第五隊列中任何一個隊 列,可以說明當前數(shù)據(jù)塊是第一次被讀訪問,可以將當前數(shù)據(jù)塊的信息插入第一隊列。可 見,通過將當前數(shù)據(jù)塊的信息插入相應(yīng)的隊列中,完成了對當前數(shù)據(jù)塊的分類。
[0170] 應(yīng)理解,本發(fā)明實施例中,"插入"隊列也可以表示在該隊列本身中改變該信息的 位置。
[0171] 可選地,作為另一實施例,如果當前I/O請求命中第一隊列,可以將當前數(shù)據(jù)塊的 信息插入第二隊列的頭部,并從第一隊列中刪除當前數(shù)據(jù)塊的信息。如果當前I/O請求命 中第二隊列,可以將當前數(shù)據(jù)塊的信息移動到第二隊列的頭部。
[0172] 具體地,由于第二隊列采用LRU策略。因此,可以將當前數(shù)據(jù)塊的信息插入第二隊 列的最近最常使用(Most Recently Used, MRU)端。
[0173] 可選地,作為另一實施例,將當前數(shù)據(jù)塊的信息插入第三隊列的具體過程可以如 下:將當前數(shù)據(jù)塊的信息插入第三隊列中的第j子隊列,j為當前數(shù)據(jù)塊對應(yīng)的SF值,j為 正整數(shù)且0彡j彡n-1。
[0174] 具體地,如果當前I/O請求命中第三隊列,可以計算當前數(shù)據(jù)塊對應(yīng)的SF值,假設(shè) 當前數(shù)據(jù)塊對應(yīng)的SF值為j。那么,可以將當前數(shù)據(jù)塊的信息插入第j子隊列的頭部。
[0175] 實際上,如果當前I/O請求命中第一隊列、第二隊列或第三隊列,說明當前I/O請 求命中RAM,說明當前數(shù)據(jù)塊存儲在RAM中。因此,可以將當前數(shù)據(jù)塊的信息插入相應(yīng)的隊 列,而不需要移動數(shù)據(jù)塊。
[0176] 如果當前I/O請求命中第四隊列,說明當前數(shù)據(jù)塊存儲在RAID中。如果當前I/O 請求命中第五隊列,說明當前數(shù)據(jù)塊存儲在SSD中。這種情況下,需要判斷RAM是否有足夠 的空閑空間來存儲當前數(shù)據(jù)塊。如果RAM有足夠的空閑空間,可以直接將當前數(shù)據(jù)塊的信 息插入RAM對應(yīng)的隊列,并將當前數(shù)據(jù)塊緩存至RAM中。如果RAM中沒有足夠的空間,就需 要對RAM中的數(shù)據(jù)塊進行淘汰,以便RAM有足夠的空間來緩存當前數(shù)據(jù)塊。具體而言,可以 對第二隊列或第三隊列執(zhí)行淘汰操作,并將相應(yīng)的數(shù)據(jù)塊從RAM中淘汰出去。
[0177] 可選地,作為另一實施例,在步驟230中,如果當前I/O請求命中第四隊列或第五 隊列,確定RAM中的空閑空間是否大于或等于當前數(shù)據(jù)塊的尺寸。在確定RAM中的空閑空 間大于或等于當前數(shù)據(jù)塊的尺寸的情況下,將當前數(shù)據(jù)塊的信息插入第二隊列。在確定RAM 中的空閑空間小于當前數(shù)據(jù)塊的尺寸的情況下,對第二隊列或第三隊列執(zhí)行淘汰操作,并 將當前數(shù)據(jù)塊的信息插入第二隊列。
[0178] 具體地,如果當前I/O請求命中第四隊列,可以將當前數(shù)據(jù)塊的信息插入第二隊 列的頭部,并從第四隊列中刪除當前數(shù)據(jù)塊的信息。如果當前I/O請求命中第五隊列,可以 將當前數(shù)據(jù)塊的信息插入第二隊列的頭部,并從第五隊列中刪除當前數(shù)據(jù)塊的信息。
[0179] 可選地,作為另一實施例,如果當前I/O請求沒有命中第一隊列、第二隊列、第三 隊列、第四隊列和第五隊列,在將當前數(shù)據(jù)塊的信息插入第一隊列之后,可以將第一數(shù)據(jù)塊 的信息插入第四隊列,其中第一數(shù)據(jù)塊的信息是從第一隊列淘汰的。
[0180] 第一隊列可以管理訪問頻率較低的數(shù)據(jù)塊。因此,從第一隊列擠出去的數(shù)據(jù)塊的 信息無法進入第五隊列,擠出去的數(shù)據(jù)塊并非是長期熱數(shù)據(jù)塊,因此第一隊列擠出去的數(shù) 據(jù)塊的信息可以插入第四隊列中。
[0181] 下面將描述當前I/O請求為寫I/O請求時的混合緩存的管理過程。
[0182] 可選地,作為另一實施例,當前I/O請求可以為寫I/O請求。在步驟230中,如果 當前I/O請求命中第一隊列、第三隊列、第二隊列、第四隊列和第五隊列中之一,則可以將 當前數(shù)據(jù)塊的信息插入第三隊列中的第k子隊列,k為正整數(shù)且0彡k彡n-1,k為當前數(shù) 據(jù)塊對應(yīng)的SF值;如果當前I/O請求沒有命中第一隊列、第二隊列、第三隊列、第四隊列和 第五隊列,則可以將當前數(shù)據(jù)塊的信息插入第三隊列中的第η子隊列。
[0183] 具體地,如果當前I/O請求沒有命中第一隊列、第二隊列、第三隊列、第四隊列和 第五隊列,可以說明當前數(shù)據(jù)塊是第一次被寫訪問,那么可以將當前數(shù)據(jù)塊的信息插入第η 子隊列。
[0184] 如果當前I/O請求命中第一隊列、第二隊列、第三隊列、第四隊列和第五隊列中任 一個,可以說明當前數(shù)據(jù)塊是HD塊,那么可以計算當前數(shù)據(jù)塊對應(yīng)的SF值。假設(shè)計算得到 的SF值為k,那么可以將當前數(shù)據(jù)塊的信息插入第k子隊列。
[0185] 如果當前I/O請求命中第一隊列、第二隊列或第三隊列,可以說明當前I/O請求要 更新的當前數(shù)據(jù)塊存儲在RAM中。這樣,可以將當前數(shù)據(jù)塊的信息插入相應(yīng)的隊列后,直接 對RAM中的數(shù)據(jù)塊進行更新。
[0186] 如果當前I/O請求命中第四隊列,可以說明當前I/O請求要更新的當前數(shù)據(jù)塊存 儲在RAID中。如果當前I/O請求命中第五隊列,可以說明當前I/O請求要更新的當前數(shù)據(jù) 塊存儲在SSD中。如果當前I/O請求沒有命中第一隊列至第五隊列,可以說明當前I/O請 求要更新的當前數(shù)據(jù)塊存儲在RAID中。這種情況下,為了在減少對SSD和RAID的寫操作, 可以先將當前數(shù)據(jù)塊寫入RAM中。但是,需要判斷RAM中是否有空閑的空間。如果RAM中 沒有空閑的空間,可以對RAM中的數(shù)據(jù)塊進行淘汰。具體地,可以對第二隊列或第三隊列執(zhí) 行淘汰操作,然后將淘汰的信息所指示的數(shù)據(jù)塊從RAM中淘汰出去。
[0187] 可選地,作為另一實施例,如果當前I/O請求命中第四隊列或第五隊列,確定RAM 中的空閑空間是否大于或等于當前數(shù)據(jù)塊的尺寸;在確定RAM中的空閑空間大于或等于當 前數(shù)據(jù)塊的尺寸的情況下,將當前數(shù)據(jù)塊的信息插入第k子隊列;在確定RAM中的空閑空間 小于當前數(shù)據(jù)塊的尺寸的情況下,對第二隊列或第三隊列執(zhí)行淘汰操作,并將當前數(shù)據(jù)塊 的信息插入第k子隊列。
[0188] 如果當前I/O請求沒有命中第一隊列、第二隊列、第三隊列、第四隊列和第五隊 列,確定RAM中的空閑空間是否大于或等于當前數(shù)據(jù)塊的尺寸;在確定RAM中的空閑空間大 于或等于當前數(shù)據(jù)塊的尺寸的情況下,將當前數(shù)據(jù)塊的信息插入第η子隊列;在確定RAM中 的空閑空間小于當前數(shù)據(jù)塊的尺寸的情況下,對第二隊列或第三隊列執(zhí)行淘汰操作,并將 當前數(shù)據(jù)塊的信息插入第η子隊列。
[0189] 可選地,作為另一實施例,對第二隊列或第三隊列執(zhí)行淘汰操作的具體過程可以 如下:如果第二隊列的長度小于或等于第一長度閾值,則可以對第三隊列執(zhí)行淘汰操作; 如果第三隊列的長度小于或等于第二長度閾值,則可以對第二隊列執(zhí)行淘汰操作;如果第 二隊列的長度大于第一長度閾值且第二隊列的長度大于或等于第四長度閾值,則可以對第 二隊列執(zhí)行淘汰操作;如果第二隊列的長度大于第一長度閾值、第二隊列的長度小于第四 長度閾值、且第三隊列中的第η子隊列的長度大于或等于第二長度閾值,則可以對第三隊 列執(zhí)行淘汰操作。
[0190] 具體地,第一長度閾值可以理解為第二隊列的長度下限。第二長度閾值可以理解 為第三隊列的長度下限,具體而言,第二長度閾值可以理解為第三隊列的第η子隊列的長 度下限。第三長度閾值可以理解為第二隊列的目標長度。第四長度閾值可以理解為第三隊 列的第η子隊列的長度上限。
[0191] 應(yīng)理解,通過為第二隊列設(shè)置長度下限和目標長度,即上述第一長度閾值和第三 長度閾值,可以規(guī)范第二隊列的長度。在通常情況下,第二隊列的長度和第三隊列的長度不 會為0。在某些極端情況下,比如在只有寫請求而沒有讀請求的情況下,第二隊列的長度可 能會為0。
[0192] 還應(yīng)理解,通過為第三隊列的第η子隊列設(shè)置長度下限,可以給新的臟塊更多的 在未來被再次命中的機會,不至于新的臟塊的信息剛進入第η子隊列就被淘汰。此外,通過 為第η子隊列設(shè)置長度上限,可以避免緩存掃描的影響被擴大。在通常情況下,第η子隊列 的長度不會為〇。在某些極端情況下,第η子隊列的長度可能會為0。
[0193] 第一長度閾值、第二長度閾值和第四長度閾值可以是預先設(shè)定的。第三長度閾值 可以是自適應(yīng)調(diào)整的,下面會具體描述調(diào)整方式。
[0194] 從上述淘汰條件來看,本發(fā)明實施例的淘汰策略的主要思想是優(yōu)先淘汰干凈塊, 臟塊有更多的機會保留在RAM中,這樣能夠減少對SSD的寫操作,從而能夠減少SSD的寫開 銷和寫損耗。例如,第二隊列的長度大于第一長度閾值、第二隊列的長度小于第三長度閾 值、且第三隊列中的第η子隊列的長度大于或等于第四長度閾值,則對第三隊列執(zhí)行淘汰 操作??梢?,對第三隊列執(zhí)行淘汰操作的條件較為苛刻,從而能夠優(yōu)先對第二隊列執(zhí)行淘汰 操作。
[0195] 同時,如果第二隊列的長度小于或等于第一長度閾值,則對第三隊列執(zhí)行淘汰操 作,這樣能夠保證第二隊列不會在〇和1之間跳變。
[0196] 可選地,作為另一實施例,如果第二隊列的長度小于或等于第一長度閾值,在第三 隊列中第η子隊列的長度大于第二長度閾值的情況下,則可以對第η子隊列執(zhí)行淘汰操作; 如果第二隊列的長度小于或等于第一長度閾值,在第三隊列中第η子隊列的長度小于或等 于第二長度閾值的情況下,則可以對第(η-1)子隊列執(zhí)行淘汰操作。
[0197] 具體地,第三隊列中的第η子隊列可以有長度下限,即第二長度閾值。當?shù)讦亲雨?列已經(jīng)達到長度下限或小于該下限時,可以對第η子隊列的下一級隊列執(zhí)行淘汰操作。這 樣可以保證第η子隊列具有一定的長度,不會被全部淘汰掉。從而能夠有效地防止寫掃描。
[0198] 可選地,作為另一實施例,如果第二隊列的長度大于第一長度閾值、第二隊列的長 度小于第三長度閾值、且第三隊列中的第η子隊列的長度大于或等于第四長度閾值,則對 第η子隊列執(zhí)行淘汰操作。
[0199] 可見,對第三隊列執(zhí)行淘汰操作的條件較為苛刻,從而能夠優(yōu)先對第二隊列執(zhí)行 淘汰操作。也就是說,可以優(yōu)先淘汰干凈塊,而臟塊有更多的機會保留在RAM中,這樣能夠 減少對SSD的寫操作,從而能夠減少SSD的寫開銷和寫損耗。
[0200] 可選地,作為另一實施例,第三長度閾值與第六隊列的命中次數(shù)正相關(guān),與第七隊 列的命中次數(shù)負相關(guān),第六隊列用于記錄從第二隊列淘汰的數(shù)據(jù)塊的元數(shù)據(jù),第七隊列用 于記錄從第三隊列淘汰的數(shù)據(jù)塊的元數(shù)據(jù)。
[0201] 第三長度閾值可以自適應(yīng)調(diào)整??梢詾榈谌L度閾值設(shè)定初始值。隨著訪問模式 的變化,第三長度閾值可以變化。第六隊列可以作為第二隊列的淘汰歷史隊列,即可以記錄 從第二隊列淘汰的數(shù)據(jù)塊的信息。第七隊列可以作為第三隊列的淘汰歷史隊列,可以記錄 第三隊列淘汰的數(shù)據(jù)塊的信息。當I/O請求每命中一次第六隊列,第三長度閾值可以增加, 例如,第三長度閾值可以加1。當I/O請求每命中一次第七隊列,第三長度閾值可以減小,例 如,第三長度閾值可以減1。因此,第三長度閾值可以理解為第二隊列的目標長度。
[0202] 正如前面所提到的,第二隊列的長度與應(yīng)用層的讀I/O請求比例正相關(guān),也可以 理解為應(yīng)用層的讀I/O請求命中第六隊列的次數(shù)正相關(guān)。
[0203] 應(yīng)理解,第二隊列可以采用LRU策略。因此對第二隊列執(zhí)行淘汰操作時,可以從第 二隊列的尾部進行淘汰。第三隊列的每個子隊列可以采用LRU策略,因此對子隊列執(zhí)行淘 汰操作時可以從該子隊列的尾部進行淘汰。
[0204] 可選地,作為另一實施例,如果第二數(shù)據(jù)塊的訪問頻率大于頻率閾值,則可以將第 二數(shù)據(jù)塊的信息插入第五隊列,第二數(shù)據(jù)塊的信息是從第二隊列或第三隊列淘汰的;如果 第二數(shù)據(jù)塊的訪問頻率小于或等于頻域閾值,則可以將第二數(shù)據(jù)塊的信息插入第四隊列。
[0205] 可見,從RAM淘汰出的長期熱數(shù)據(jù)塊才能進入SSD,能夠避免頻繁對SSD寫操作。 而且,RAM的淘汰策略與SSD的準入策略相結(jié)合,能夠?qū)AM和SSD進行協(xié)同管理。
[0206] 本發(fā)明實施例中,通過上述多個隊列,能夠?qū)AM和SSD進行協(xié)同管理,算法時間 復雜度為0(1),即常量級。可見,本發(fā)明實施例的方法具有較低的時間復雜度。
[0207] 可選地,作為另一實施例,在步驟240中,如果當前I/O請求為讀I/O請求,可以向 應(yīng)用層返回從RAM中讀取的當前數(shù)據(jù)塊;如果當前I/O請求為寫I/O請求,可以先讀取對應(yīng) 的數(shù)據(jù)塊,緩存在RAM中,其元信息由第三隊列記錄,并用寫請求所攜帶的應(yīng)用層數(shù)據(jù)更新 該數(shù)據(jù)塊。
[0208] 從上述描述可知,本發(fā)明實施例不與任何具體應(yīng)用程序或文件系統(tǒng)耦合,具有一 定的通用性。另外,本發(fā)明實施例的方法可以利用軟件實現(xiàn),也可以利用硬件實現(xiàn)。
[0209] 下面將結(jié)合具體的例子詳細描述本發(fā)明實施例。應(yīng)注意,這些例子僅是為了幫助 本領(lǐng)域技術(shù)人員更好地理解本發(fā)明實施例,而非限制本發(fā)明實施例的范圍。
[0210] 本發(fā)明實施例中,可以將五條隊列分別稱為第一隊列Q1、第二隊列Q2、第三隊列 Q3、第四隊列Q4和第五隊列Q5。
[0211] 圖4是根據(jù)本發(fā)明實施例的多條隊列管理數(shù)據(jù)塊的過程的示意圖。如圖4所示,Q1 管理RAM中的CC塊,Q2管理RAM中的HC塊,Q3管理RAM中的CD/HD塊。具體而言,Q1可 以記錄RAM中CC塊的信息,Q2可以記錄RAM中HC塊的信息,Q3可以記錄RAM中⑶/HD塊 的信息。應(yīng)理解,Ql、Q2和Q3三者管理的數(shù)據(jù)塊即為RAM中的全部數(shù)據(jù)塊,也就是說,Q1、 Q2和Q3三者管理的數(shù)據(jù)塊占據(jù)RAM的全部緩存空間。
[0212] Q5管理SSD中的HC/HD塊。SSD中的這些數(shù)據(jù)塊屬于長期熱數(shù)據(jù)塊,隨著時間推 移,部分數(shù)據(jù)塊會變?yōu)槔鋽?shù)據(jù)塊,從SSD淘汰出去,根據(jù)需要寫回RAID。RAID與RAM之間存 在CC/⑶塊的請求和淘汰過程。Q4管理從RAM淘汰到RAID中的CC/⑶塊,具體地Q4可以 記錄這些數(shù)據(jù)塊的元數(shù)據(jù),作為歷史記錄。此處所述的"管理"可以指記錄信息。
[0213] 圖5是根據(jù)本發(fā)明實施例的第一隊列的管理過程的示意圖。
[0214] Q1是FIFO隊列,長度固定,起到預熱的作用。Q1的長度可以是預先設(shè)定的。如圖 5所示,當一個數(shù)據(jù)塊被第一次讀訪問時,可以把該數(shù)據(jù)塊的信息插入Q1尾部。如果這個數(shù) 據(jù)塊一直沒有被再次訪問,則最終按照FIFO策略淘汰,并且把它的元數(shù)據(jù)記錄到Q4中。如 果該數(shù)據(jù)塊被再次訪問,則把它移到Q2或Q3。那種偶發(fā)的、大量的只有一次讀訪問的數(shù)據(jù) 塊,只會進入Q1并迅速被淘汰出去,從而能夠避免這種數(shù)據(jù)塊污染其它隊列。
[0215] 圖6是根據(jù)本發(fā)明實施例的第二隊列的管理過程的示意圖。
[0216] Q2是LRU隊列,長度可自適應(yīng)調(diào)節(jié),設(shè)有長度下限,例如長度下限可以為第一長度 閾值。
[0217] 如圖6所示,Q2管理的數(shù)據(jù)塊,來自Ql、Q4或Q5中被讀I/O請求命中的數(shù)據(jù)塊。 這些數(shù)據(jù)塊屬于短期熱數(shù)據(jù)塊。這些數(shù)據(jù)塊的信息進入Q2后,不會被CC塊的信息替換出 去,也就是說,這些數(shù)據(jù)塊不會被CC塊從RAM中替換出去,從而能夠保證高命中率。
[0218] 由于RAID和SSD處理小寫并沒有什么優(yōu)勢,所以在選擇淘汰時,優(yōu)先淘汰Q2管理 的干凈塊,使臟塊在RAM中緩存更長地時間,從而能夠有效地減少對SSD的寫操作。
[0219] Q2淘汰的數(shù)據(jù)塊的信息可以根據(jù)訪問頻率進入Q4或Q5。具體地,如果訪問頻率 大于頻率閾值,則判定該數(shù)據(jù)塊為長期熱數(shù)據(jù)塊,該數(shù)據(jù)塊的信息進入Q5隊列中;否則進 入Q4中。應(yīng)理解,進入Q4的可以是該數(shù)據(jù)塊的元數(shù)據(jù)。
[0220] 上述頻率閾值可以是預設(shè)的,也可以在運行過程中動態(tài)調(diào)整。
[0221] 圖7是根據(jù)本發(fā)明實施例的第二隊列的動態(tài)調(diào)整過程的示意圖。
[0222] 本發(fā)明實施例中,還可以定義第六隊列和第七隊列。此處以Q2'表示第六隊列,以 Q3'表示第七隊列。
[0223] 針對Q2,可以設(shè)置目標長度變量,即前述第三長度閾值。此處以T表不該變量。 Q2'是Q2的歷史淘汰隊列,記錄從Q2淘汰的數(shù)據(jù)塊的信息,并保持Q2'的長度與Q3長度 相等。Q3'是Q3的歷史淘汰隊列,可以記錄從Q3淘汰的數(shù)據(jù)塊的元數(shù)據(jù),并保持Q3'的長 度與Q2長度相等。
[0224] 如圖7所示,當I/O請求命中Q2'時,T可以加1 ;當I/O請求命中Q3'時,T可以 減1。
[0225] 圖8是根據(jù)本發(fā)明實施例的第三隊列的管理過程的示意圖。
[0226] Q3是特殊隊列,采用SF策略。針對該隊列,考慮了條帶所占空間大小和訪問頻率, 以SF值作為排序依據(jù)。SF值是條帶所在空間大小與訪問頻率的比值。在Q3的淘汰策略 中,優(yōu)先淘汰SF值高的結(jié)點,即那些占用空間多且訪問頻率少的臟塊的信息,這樣能更好 地合并小寫10,同時訪問頻率高的塊可以緩存更長的時間,保證高命中率。可以根據(jù)頻率閾 值判斷從Q3淘汰的數(shù)據(jù)塊的信息寫入的隊列。具體地,如果該數(shù)據(jù)塊的訪問頻率大于頻域 閾值,將該數(shù)據(jù)塊的信息寫入Q5,具體地將該數(shù)據(jù)塊的元數(shù)據(jù)寫入Q5,并將該數(shù)據(jù)塊寫入 SSD ;否則,將該數(shù)據(jù)塊的元數(shù)據(jù)寫入Q4,并將該數(shù)據(jù)塊寫回RAID。
[0227] 每個數(shù)據(jù)塊都有對應(yīng)的SF值,如果根據(jù)該值把其插入到Q3中的對應(yīng)位置,會在尋 找位置過程中帶來很大的時間開銷。因此可以將Q3化成多隊列形式進行管理。
[0228] 如圖8所示,假設(shè)一個條帶中的條帶單元的數(shù)目為n,SF值的范圍為[0, n],那么 Q3子隊列的數(shù)目為(n+1),如圖8所示的子隊列0、子隊列1、子隊列2、……子隊列(n_l) 和子隊列η。每個子隊列中記錄的所有數(shù)據(jù)塊對應(yīng)的SF值是相同的,并且每個隊列的編號 與SF值相同。即,子隊列0中記錄的所有數(shù)據(jù)塊對應(yīng)的SF值均為0,子隊列1中記錄的所 有數(shù)據(jù)塊對應(yīng)的SF值均為1,以此類推,子隊列η中記錄的所有數(shù)據(jù)塊對應(yīng)的SF值均為η。
[0229] 此處將Q3的各個子隊列表示為Q3x,其中X為取值從0至η的正整數(shù)。相應(yīng)地,子 隊列η可以表示為Q3n。為了避免寫I/O請求掃描緩存的問題,那些不在任何隊列的臟數(shù)據(jù) 塊在進入RAM時,只會進入子隊列Q3n,這樣不會造成熱的臟塊被替換出RAM。同時,為了給 冷的臟塊有預熱的機會,Q3n隊列可以有長度下限,即前述第二長度閾值。
[0230] 圖9是根據(jù)本發(fā)明實施例的第三隊列的一個例子的示意圖。
[0231] 在圖9中,假設(shè)η為4,即條帶的數(shù)目為4,相應(yīng)地,SF值的范圍為[0,4],Q3包括 5個子隊列,即如圖9所示的Q30、Q31、Q32、Q33和Q34。這5個子隊列的SF值分別為0、1、 2、3 和 4。
[0232] Q30中記錄的所有數(shù)據(jù)塊對應(yīng)的SF值均為0, Q31中記錄的所有數(shù)據(jù)塊對應(yīng)的SF 值均為1,Q32中記錄的所有數(shù)據(jù)塊對應(yīng)的SF值均為2,Q33中記錄的所有數(shù)據(jù)塊對應(yīng)的SF 值均為3, Q34中記錄的所有數(shù)據(jù)塊對應(yīng)的SF值均為4。
[0233] 在圖9中,為了描述方便,假設(shè)需要處理Q3中記錄的4個數(shù)據(jù)塊的信息,即數(shù)據(jù)塊 40、數(shù)據(jù)塊65、數(shù)據(jù)塊32和數(shù)據(jù)塊5。
[0234] 假設(shè)數(shù)據(jù)塊32占用4個條帶,訪問次數(shù)為1,那么數(shù)據(jù)塊32對應(yīng)的SF值為4。假 設(shè)數(shù)據(jù)塊5占用4個條帶,訪問次數(shù)為1,那么數(shù)據(jù)塊5對應(yīng)的SF值為4。假設(shè)數(shù)據(jù)塊40 占用2個條帶,訪問次數(shù)為2,那么數(shù)據(jù)塊40對應(yīng)的SF值為1。存儲各個數(shù)據(jù)塊的信息的 結(jié)點在相應(yīng)的子隊列的位置如圖9所示。
[0235] 假設(shè)數(shù)據(jù)塊40被再次訪問,并且占用3個條帶,那么數(shù)據(jù)塊40對應(yīng)的SF值仍為 1。 那么存儲數(shù)據(jù)塊40的信息的結(jié)點將移動到Q31的頭部。
[0236] 假設(shè)數(shù)據(jù)塊32被再次訪問,仍占用4個條帶,那么數(shù)據(jù)塊32對應(yīng)的SF值將減小 2, 即數(shù)據(jù)塊32當前對應(yīng)的SF值為2,那么存儲數(shù)據(jù)塊32的信息的結(jié)點將從Q34移動到Q32 的頭部。
[0237] 當需要對Q3執(zhí)行淘汰操作時,數(shù)據(jù)塊5的信息將被優(yōu)先淘汰。
[0238] 為了避免過去的熱數(shù)據(jù)長期駐留在RAM中,為Q3定義了老化策略。具體地,當一 定時間后,將除了 Q3n之外的其它子隊列中所有數(shù)據(jù)塊對應(yīng)的SF值加1,即把所有的數(shù)據(jù)塊 升級。圖10是根據(jù)本發(fā)明實施例的第三隊列的老化策略的例子的示意圖。
[0239] 在圖10中,假設(shè)η為4,即條帶的數(shù)目為4,相應(yīng)地,SF值的范圍為[0,4],Q3包括 5個子隊列,即如圖10所示的Q30、Q31、Q32、Q33和Q34。這5個子隊列的SF值分別為0、 1、2、3 和 4。
[0240] 除了 Q34之外,其它子隊列的數(shù)據(jù)塊對應(yīng)的SF值均加1。如圖10所示,原來在Q30 中的數(shù)據(jù)塊對應(yīng)的SF值加1后,這些數(shù)據(jù)塊的信息進入了 Q31中。原來在Q31中的數(shù)據(jù)塊 對應(yīng)的SF值加1后,這些數(shù)據(jù)塊的信息進入了 Q32中。原來在Q32中的數(shù)據(jù)塊對應(yīng)的SF 值加1后,這些數(shù)據(jù)塊的信息進入了 Q34中。
[0241] 還應(yīng)理解,老化策略并沒有對數(shù)據(jù)塊的訪問頻率進行改變。
[0242] 從上述可知,Q1的長度是固定的,Q2和Q3二者的長度是變化的,但Q2和Q3二者 的長度之和不變,等于總的RAM緩存空間減去Q1的長度。
[0243] 圖11是根據(jù)本發(fā)明實施例的第四隊列的管理過程的示意圖。
[0244] Q4是FIFO隊列,長度固定,其長度可以是預先設(shè)定的。
[0245] 由于RAM空間小,需要存放有效的數(shù)據(jù)塊,還需要存放大量映射表,因此RAM中不 可能保存RAID中所有數(shù)據(jù)塊及其元數(shù)據(jù)。Q4可以記錄那些近期被淘汰出RAM、但還不能進 入SSD的冷數(shù)據(jù)塊的元數(shù)據(jù)。當I/O請求命中Q4時,可以認為被命中的數(shù)據(jù)塊為短期熱數(shù) 據(jù),該數(shù)據(jù)塊的信息可以直接進入Q2或Q3。相應(yīng)地,該數(shù)據(jù)塊可以保存到RAM中。
[0246] 可見,由于Q4作為淘汰歷史隊列,因此不需要對RAID中所有的數(shù)據(jù)塊進行精確統(tǒng) 計,也能有效地識別熱點數(shù)據(jù)。
[0247] Q5管理SSD中的數(shù)據(jù)塊。Q5采用簡化的多隊列策略??梢愿鶕?jù)數(shù)據(jù)塊的訪問頻 率設(shè)定Q5中子隊列的數(shù)目。各個子隊列可以分別對應(yīng)不同的訪問頻率范圍。即每個子隊 列可以用于記錄該訪問頻率范圍內(nèi)的數(shù)據(jù)塊的信息。因此,子隊列的數(shù)目可以是自適應(yīng)調(diào) 整的。
[0248] 此外,各個子隊列的活躍級別可以按照對應(yīng)的訪問頻率確定。例如,對應(yīng)的訪問頻 率越小,該子隊列的活躍級別越低。當需要對Q5進行淘汰時,優(yōu)先從活躍級別最低的子隊 列開始淘汰。
[0249] 圖12是根據(jù)本發(fā)明實施例的第五隊列的一個例子的示意圖。
[0250] 在圖12中,假設(shè)Q5包括3個子隊列,即子隊列0、子隊列1和子隊列2。3個子隊 列可以分別對應(yīng)不同的訪問頻率范圍。例如,子隊列〇可以對應(yīng)訪問次數(shù)1至10,子隊列1 可以對應(yīng)訪問次數(shù)11至20,子隊列2可以對應(yīng)訪問次數(shù)21至30。當需要對Q5執(zhí)行淘汰 操作時,可以從子隊列〇開始淘汰。
[0251] 此外,從Q2和Q3淘汰的長期熱數(shù)據(jù)塊的信息,可以根據(jù)訪問頻率確定進入Q5相 應(yīng)的子隊列,同時該數(shù)據(jù)塊可以進入SSD。在SSD的空間滿了以后,需要對SSD中的數(shù)據(jù)塊 進行淘汰以釋放一定的空間。優(yōu)先從最低活躍級別的子隊列中淘汰最久未訪問的數(shù)據(jù)塊的 信息。當I/O請求命中Q5時,被命中的數(shù)據(jù)塊可以為短期熱數(shù)據(jù)塊,該數(shù)據(jù)塊的信息可以 插入Q2或Q3,相應(yīng)地將該數(shù)據(jù)塊保存在RAM中。此外,還可以在SSD中繼續(xù)保留該數(shù)據(jù)塊 的副本。
[0252] 此外,Q5可以采用定時老化策略。具體地,當Q5中的所有數(shù)據(jù)塊的平均訪問頻率 超過某一閾值后,可以將訪問頻率折半,重新計算活躍級別。
[0253] 上面詳細描述了 Q1至Q5的配置。下面將詳細描述針對不同的I/O請求管理混合 緩存的過程。
[0254] 圖13是根據(jù)本發(fā)明實施例的管理混合緩存的方法的過程的示意性流程圖。在圖 13中,當前I/O請求為讀I/O請求。
[0255] 1201,從應(yīng)用層接收讀I/O請求。
[0256] 1202,確定該讀I/O請求是否命中RAM。
[0257] 1203,如果命中RAM,則確定是否命中Q1。
[0258] 1204,如果命中Q1,則從Q1中刪除該讀I/O請求針對的當前數(shù)據(jù)塊的信息。
[0259] 1205,將當前數(shù)據(jù)塊的信息插入到Q2的頭部。
[0260] 1206,如果沒有命中Q1,則確定是否命中Q2。
[0261] 如果命中Q2,則執(zhí)行步驟1205。
[0262] 1207,如果沒有命中Q2,則確定命中Q3,并改變當前數(shù)據(jù)塊的信息在Q3中的位置。
[0263] 具體地,可以計算當前數(shù)據(jù)塊對應(yīng)的SF值,根據(jù)SF值將當前數(shù)據(jù)塊對應(yīng)的信息插 入Q3相應(yīng)的子隊列中。
[0264] 1208,如果沒有命中RAM,則確定是否命中Q4。
[0265] 1209,如果命中Q4,則從RAID中讀取當前數(shù)據(jù)塊,并從Q4中刪除當前數(shù)據(jù)塊的信 肩、。
[0266] 1210,確定RAM中是否有空閑空間來存儲當前數(shù)據(jù)塊。
[0267] 如果RAM中有足夠的空閑空間,則執(zhí)行步驟1205,并將當前數(shù)據(jù)塊存儲在RAM中。
[0268] 1211,如果RAM沒有足夠的空閑空間來存儲當前數(shù)據(jù)塊,則選擇Q2或Q3執(zhí)行淘汰 操作。
[0269] 在對Q2或Q3執(zhí)行淘汰操作后,執(zhí)行步驟1205,并將當前數(shù)據(jù)塊存儲在RAM中。
[0270] 1212,確定是否命中Q5。
[0271] 1213,如果命中Q5,則從SSD中讀取當前塊。
[0272] 然后可以執(zhí)行步驟1210、1211和1205。
[0273] 1214,如果沒有命中Q5,則從RAID讀取當前塊,并將當前塊的信息插入Q1的尾部。
[0274] 同時,將當前塊存儲在RAM中。
[0275] 1215,向應(yīng)用層返回讀取的當前數(shù)據(jù)塊。
[0276] 本發(fā)明實施例中,通過根據(jù)讀I/O請求的命中結(jié)果將讀I/O請求針對的當前數(shù)據(jù) 塊的信息插入第一隊列、第二隊列和第三隊列中之一。第一隊列、第二隊列和第三隊列用于 管理RAM中的數(shù)據(jù)塊,第四隊列用于管理從RAM淘汰到RAID中的數(shù)據(jù)塊,第五隊列用于管 理SSD中的數(shù)據(jù)塊,而SSD中的數(shù)據(jù)塊是從RAM中淘汰的數(shù)據(jù)塊,可見,對于I/O請求產(chǎn)生 的數(shù)據(jù)塊,首先由第一隊列、第二隊列或第三隊列進行管理,然后第一隊列、第二隊列、第三 隊列與第四隊列和第五隊列相互配合,為SSD篩選出準入的數(shù)據(jù)塊,因此通過五條隊列的 管理模式,將RAM和SSD相結(jié)合,而非彼此獨立,從而能夠?qū)崿F(xiàn)對RAM和SSD的協(xié)同管理,提 高混合緩存性能。
[0277] 圖14是根據(jù)本發(fā)明實施例的管理混合緩存的方法的過程的示意性流程圖。在圖 14中,當前I/O請求為寫I/O請求。
[0278] 1301,從應(yīng)用層接收寫I/O請求。
[0279] 1302,確定與I/O請求是否命中RAM。
[0280] 1303,如果命中RAM,確定是否命中Q1。
[0281] 1304,如果命中Q1,則從Q1中刪除寫I/O請求針對的當前數(shù)據(jù)塊的信息。
[0282] 1305,將當前數(shù)據(jù)塊的信息插入Q3的相應(yīng)位置,并將當前數(shù)據(jù)塊寫入RAM中。
[0283] 具體地,可以計算當前數(shù)據(jù)塊對應(yīng)的SF值,根據(jù)SF值將當前數(shù)據(jù)塊的信息插入Q3 相應(yīng)的子隊列中。
[0284] 1306,如果沒有命中Q1,則確定是否命中Q2。
[0285] 1307,如果命中Q2,則從Q2中刪除當前數(shù)據(jù)塊的信息。
[0286] 在步驟1307之后,執(zhí)行步驟1305。
[0287] 1308,如果沒有命中Q2,則確定命中Q3,改變當前數(shù)據(jù)塊的信息在Q3中的位置,并 在RAM中寫入當前數(shù)據(jù)塊。
[0288] 具體地,可以計算當前數(shù)據(jù)塊對應(yīng)的SF值,根據(jù)SF值改變當前數(shù)據(jù)塊的信息在Q3 中的位置。
[0289] 1309,如果沒有命中RAM,則確定RAM是否有空閑空間來存儲當前數(shù)據(jù)塊。
[0290] 1310,如果RAM中沒有足夠的空閑空間來存儲當前數(shù)據(jù)塊,則選擇Q2或Q3執(zhí)行淘 汰操作。
[0291] 在步驟1310之后可以執(zhí)行1311。
[0292] 如果RAM中有足夠的空閑空間來存儲當前數(shù)據(jù)塊,則可以執(zhí)行步驟1311。
[0293] 1311,確定是否命中Q4。
[0294] 1312,如果命中Q4,則從Q4中刪除當前數(shù)據(jù)塊的信息。
[0295] 在步驟1312之后,可以執(zhí)行步驟1305。
[0296] 1313,確定是否命中Q5。
[0297] 1314,如果命中Q5,從SSD中讀取當前數(shù)據(jù)塊。
[0298] 在步驟1314之后,執(zhí)行步驟1305。
[0299] 1315,如果沒有命中Q5,則在RAM中寫入當前數(shù)據(jù)塊,并將當前數(shù)據(jù)塊的信息插入 Q3的子隊列Q3n。
[0300] 1316,完成寫I/O請求,向應(yīng)用層返回完成響應(yīng)。
[0301] 本發(fā)明實施例中,通過根據(jù)寫I/O請求的命中結(jié)果將寫I/O請求針對的當前數(shù)據(jù) 塊的信息插入第一隊列、第二隊列和第三隊列中之一。第一隊列、第二隊列和第三隊列用于 管理RAM中的數(shù)據(jù)塊,第四隊列用于管理從RAM淘汰到RAID中的數(shù)據(jù)塊,第五隊列用于管 理SSD中的數(shù)據(jù)塊,而SSD中的數(shù)據(jù)塊是從RAM中淘汰的數(shù)據(jù)塊,可見,對于I/O請求產(chǎn)生 的數(shù)據(jù)塊,首先由第一隊列、第二隊列或第三隊列進行管理,然后第一隊列、第二隊列、第三 隊列與第四隊列和第五隊列相互配合,為SSD篩選出準入的數(shù)據(jù)塊,因此通過五條隊列的 管理模式,將RAM和SSD相結(jié)合,而非彼此獨立,從而能夠?qū)崿F(xiàn)對RAM和SSD的協(xié)同管理,提 高混合緩存性能。
[0302] 下面將詳細描述圖13中的步驟1211和圖14中的步驟1310的具體過程,即對Q2 或Q3執(zhí)行淘汰操作的具體過程。
[0303] 圖15是根據(jù)本發(fā)明實施例的第二隊列和第三隊列的淘汰過程的示意性流程圖。
[0304] 在圖15中,第一長度閾值可以為Q2的長度下限,以L1表示。第二長度閾值可以 為Q3n的長度下限,以L2表示。第三長度閾值可以為Q2的目標長度變量,與上述一致,以 T表示。第四長度閾值可以為Q3n的長度上限,以L3表示。此外,以F表示上述頻率閾值。
[0305] 1401,確定Q2長度是否小于或等于L1。
[0306] 1402,如果Q2長度小于或等于L1,確定Q3n長度是否大于L2。
[0307] 1403,如果Q3n長度大于L2,則對Q3n執(zhí)行淘汰操作。
[0308] 具體地,可以淘汰Q3n尾部的數(shù)據(jù)塊的信息。
[0309] 1404,確定是否在SSD中存在淘汰的數(shù)據(jù)塊副本。
[0310] 1405,如果在SSD中不存在淘汰的數(shù)據(jù)塊副本,則確定該淘汰的數(shù)據(jù)塊的訪問頻 率是否大于F。
[0311] 1406,如果該淘汰的數(shù)據(jù)塊的訪問頻率不大于F,則將該淘汰的數(shù)據(jù)塊寫回RAID 中,并將淘汰的數(shù)據(jù)塊的信息插入Q4中,并釋放淘汰的數(shù)據(jù)塊在RAM中占用的空間。
[0312] 1407,如果在SSD中存在淘汰的數(shù)據(jù)塊副本,則更新SSD中該數(shù)據(jù)塊的副本,然后 釋放淘汰的數(shù)據(jù)塊在RAM中占用的空間。
[0313] 1408,如果該淘汰的數(shù)據(jù)塊的訪問頻率大于F,則將淘汰的數(shù)據(jù)塊的信息插入Q5, 并將該淘汰的數(shù)據(jù)塊寫入SSD中,并釋放淘汰的數(shù)據(jù)塊在RAM中占用的空間。
[0314] 1409,如果Q3n長度不大于L2,則在Q3(n-1)中執(zhí)行淘汰操作。
[0315] 具體地,如果Q3n長度小于或等于L2,可以淘汰Q3(n-1)尾部的數(shù)據(jù)塊的信息。相 應(yīng)地,從RAM中淘汰該信息指示的數(shù)據(jù)塊。
[0316] 在步驟1409之后,執(zhí)行步驟1404至1408。
[0317] 1410,如果Q2長度大于L1,則確定Q2長度是否小于T。
[0318] 如果Q2長度不小于T,則執(zhí)行步驟1412。
[0319] 1411,如果Q2長度小于T,則確定Q3n長度是否大于L3。
[0320] 如果Q3n長度大于L3,則執(zhí)行步驟1403至1408。
[0321] 如果Q3n長度小于或等于L3,則執(zhí)行步驟1412。
[0322] 1412,在Q2中執(zhí)行淘汰操作。
[0323] 具體地,可以淘汰Q2的尾部的數(shù)據(jù)塊的信息。
[0324] 1413,確定是否在SSD中存在淘汰的數(shù)據(jù)塊副本。
[0325] 1414,如果在SSD中不存在淘汰的數(shù)據(jù)塊副本,則確定該淘汰的數(shù)據(jù)塊的訪問頻 率是否大于F。
[0326] 1415,如果該淘汰的數(shù)據(jù)塊的訪問頻率不大于F,則將淘汰的數(shù)據(jù)塊的信息插入 Q4,然后釋放淘汰的數(shù)據(jù)塊在RAM中占用的空間。
[0327] 應(yīng)理解,對于讀I/O請求產(chǎn)生的數(shù)據(jù)塊,無需寫回RAID中。
[0328] 1416,如果在SSD中存在淘汰的數(shù)據(jù)塊副本,則直接釋放淘汰的數(shù)據(jù)塊在RAM中占 用的空間。
[0329] 從上述可知,SSD的準入策略與RAM的淘汰策略相關(guān)。從RAM淘汰的長期熱數(shù)據(jù) 塊被SSD準入,而冷數(shù)據(jù)進入RAID。因此,SSD的準入策略依賴于RAM的淘汰策略,RAM為 SSD篩選長期熱數(shù)據(jù)塊,為RAID篩選冷數(shù)據(jù)塊。而且考慮到SSD在寫性能和寫損耗的特點, 在RAM的淘汰策略中優(yōu)先選擇干凈塊進行淘汰,從而能夠有效減少對SSD的寫操作次數(shù),減 少寫SSD的開銷和損耗。
[0330] 從上述的實施例可以理解的是,本發(fā)明實施例不與任何具體應(yīng)用程序或文件系統(tǒng) 耦合,也就是說,適用于任何具體應(yīng)用程序及文件系統(tǒng),具有一定的通用性。
[0331] 此外,本發(fā)明實施例可以適用于異質(zhì)混合緩存。
[0332] 具體而言,隊列Q1?Q5構(gòu)成協(xié)同的"預熱-篩選"的管理模型,綜合考慮了 RAM和 SSD的特性,能夠?qū)崿F(xiàn)數(shù)據(jù)異質(zhì)性分布、協(xié)同管理的目標。
[0333] Ql、Q2、Q3管理RAM中的數(shù)據(jù)塊,Q4管理從RAM淘汰到RAID中的冷數(shù)據(jù)塊,Q5管 理SSD中的數(shù)據(jù)塊。
[0334] 其中,隊列Q1和Q3n,用于管理新進入RAM的、冷的數(shù)據(jù)塊,當后續(xù)I/O請求再次 命中這些塊時,這些數(shù)據(jù)塊成為短期熱數(shù)據(jù)塊,其信息相應(yīng)地被轉(zhuǎn)移到Q2或Q3中除Q3n之 外的其它子隊列中。而沒有被再次命中的數(shù)據(jù)塊即為冷數(shù)據(jù),其信息就被從Q1或Q3n中淘 汰。具體地,這些數(shù)據(jù)塊的元數(shù)據(jù)進入Q4,這些數(shù)據(jù)塊進入RAID。
[0335] Q2和Q3中除Q3n之外的其它子隊列,用于管理短期熱數(shù)據(jù)塊。隨著時間的推移和 后續(xù)I/O請求的到達,其中部分數(shù)據(jù)塊變得更加"熱"而被繼續(xù)保留在RAM中,部分數(shù)據(jù)塊 則由于Q2、Q3采用的策略被"淘汰出"RAM,其中訪問頻率超過頻率閾值的數(shù)據(jù)塊,被確定為 長期熱數(shù)據(jù)塊,其信息進入Q5,根據(jù)需要將該數(shù)據(jù)塊寫入SSD。那些訪問頻率沒有超過頻率 閾值的數(shù)據(jù)塊,則被確定為冷數(shù)據(jù)塊,其元數(shù)據(jù)進入Q4,根據(jù)需要該數(shù)據(jù)塊寫回RAID。
[0336] Q5管理長期熱數(shù)據(jù)塊,隨著時間的推移,部分數(shù)據(jù)塊老化成為冷數(shù)據(jù)塊,從而被淘 汰進入RAID。
[0337] 可以看出,通過多隊列協(xié)同,所有I/O請求針對的數(shù)據(jù)塊,經(jīng)過多隊列管理形成如 下分類:冷數(shù)據(jù)塊、短期熱數(shù)據(jù)塊和長期熱數(shù)據(jù)塊。
[0338] 上述規(guī)律的核心可以理解為"所有數(shù)據(jù)塊_>Ql&Q3n預熱_>短期熱數(shù)據(jù)塊_>Q2&Q3 中除Q3n之外的其它子隊列篩選-> 長期熱數(shù)據(jù)"。從不同介質(zhì)緩存器件的角度來看,SSD的 準入策略與RAM的淘汰策略緊密相關(guān),這也是協(xié)同的體現(xiàn)。
[0339] 另外,本發(fā)明實施例能夠有效提高命中率。具體而言,通過多隊列協(xié)同為RAM和 SSD分別篩選出短期、長期熱數(shù)據(jù)塊,從而能夠提高命中率。
[0340] 此外,本發(fā)明實施例能夠抗緩存掃描。具體地,Q1可以作為Q2的屏障,防止讀掃 描。Q3n可以作為Q3中除Q3n之外的其它子隊列的屏障,防止寫掃描。
[0341] 此外,本發(fā)明實施例能夠自適應(yīng)讀寫請求的比例變化。具體地,Q2和Q3長度根據(jù) 讀寫比例的變化,從而做出適應(yīng)性自我調(diào)整。
[0342] 同時,本發(fā)明實施例對SSD更為友好。具體而言,SSD的準入策略與RAM的淘汰策 略相關(guān),從RAM淘汰的長期熱數(shù)據(jù)塊才能被準入SSD。其中臟的長期熱數(shù)據(jù)塊由Q3管理,淘 汰時由于需要寫回SSD,而干凈塊不必寫回SSD。因此為了避免造成頻繁地寫SSD操作,本 發(fā)明實施例中對臟數(shù)據(jù)塊特別處理。從上述也可知,主要體現(xiàn)在:
[0343] (1)Q3采用了 SF策略。該策略傾向于選擇"較冷的、較大的數(shù)據(jù)塊"進行淘汰。該 策略的特點之一是盡可能緩存"頻繁的、小的寫請求",從而能夠避免將這種請求直接導向 SSD 或者 RAID。
[0344] (2)自適應(yīng)下的干凈塊優(yōu)先淘汰策略。為了滿足自適應(yīng)、保證命中率,同時滿足干 凈塊優(yōu)先淘汰,本發(fā)明實施例中"當Q2長度小于T且Q3n長度大于L2時,則對Q3執(zhí)行淘汰 操作",使得淘汰Q3的條件更為苛刻,進而能夠優(yōu)先對Q2執(zhí)行淘汰操作。這種干凈塊優(yōu)先 淘汰策略,能夠給臟塊更多的被保留在RAM中的機會,從而有利于RAM盡可能緩存寫請求。
[0345] 另外,本發(fā)明實施例具有低時間復雜度。具體地而言,本發(fā)明實施例中多隊列協(xié)同 過程中,各個隊列的操作時間復雜度均為常量級。
[0346] 實施例三
[0347] 參見圖16,基于上述各實施例,本發(fā)明實施例提供了一種管理混合緩存的設(shè)備 300,其中,混合緩存包括隨機存儲器RAM和固態(tài)存儲器SSD,RAM和SSD共同作為由一個或 多個磁盤構(gòu)成的磁盤系統(tǒng)的緩存;
[0348] 該設(shè)備包括:
[0349] 生成單元301,用于生成第二隊列、第三隊列以及第五隊列,其中,第二隊列用于管 理RAM中熱的干凈數(shù)據(jù)塊,熱的干凈數(shù)據(jù)塊通過第二隊列被找到;第三隊列用于管理RAM中 臟數(shù)據(jù)塊,臟數(shù)據(jù)塊通過第三隊列被找到;第二隊列和第三隊列的長度之和不變;第五隊 列用于管理SSD中的數(shù)據(jù)塊;
[0350] 淘汰單元302,當有新數(shù)據(jù)塊需要由第二隊列或第三隊列管理,并且RAM的空閑空 間不足以存放新數(shù)據(jù)塊時,對生成單元生成的第二隊列或第三隊列執(zhí)行淘汰操作,其中第 二隊列的淘汰概率高于第三隊列的淘汰概率,第二隊列的長度隨著對第二隊列執(zhí)行的淘汰 操作動態(tài)變化,第三隊列的長度隨著對第三隊列執(zhí)行的淘汰操作動態(tài)變化;
[0351] 確定單元303,用于確定淘汰單元在對第二隊列或第二隊列進行淘汰操作時,從第 二隊列或第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次數(shù)閾值;
[0352] 寫入單元304,用于當確定單元確定淘汰的數(shù)據(jù)塊的訪問次數(shù)超過訪問次數(shù)閾值, 則利用第五隊列管理淘汰的數(shù)據(jù)塊,并將淘汰的數(shù)據(jù)塊寫入SSD,第五隊列用于管理SSD中 的數(shù)據(jù)塊。
[0353] 本發(fā)明實施例中,磁盤系統(tǒng)包括多個磁盤,磁盤系統(tǒng)為廉價冗余磁盤陣列RAID, RAID包括多個條帶,一個條帶對應(yīng)一個數(shù)據(jù)塊;
[0354] 第三隊列包括(n+1)個子隊列,第三隊列中的第i子隊列中所管理的所有數(shù)據(jù)塊 對應(yīng)的條帶頻率SF值均為i,SF值為條帶中已讀入RAM中的條帶單元的大小與條帶訪問次 數(shù)之間的比值,η為正整數(shù),i為取值從0至η的整數(shù);
[0355] (n+1)子隊列中的第η子隊列用于管理進入RAM的新的臟數(shù)據(jù)塊;(n+1)個子隊列 中除第η子隊列之外的其它子隊列分別用于管理RAM中熱的臟數(shù)據(jù)塊;
[0356] 淘汰單元具體用于:當有讀請求或?qū)懻埱笤L問到第三隊列管理的數(shù)據(jù)塊時,根據(jù) 該請求的特征更新該數(shù)據(jù)塊的SF值,并根據(jù)新的SF值將該數(shù)據(jù)塊移動到對應(yīng)的子隊列;在 對第三隊列執(zhí)行淘汰操作時,按照SF值從大到小的順序?qū)Γ╪+1)個子隊列執(zhí)行淘汰操作。
[0357] 本發(fā)明實施例中,淘汰單元還具體用于:
[0358] 如果第二隊列的長度小于或等于第一長度閾值,則對第三隊列執(zhí)行淘汰操作;
[0359] 如果第三隊列的長度小于或等于第二長度閾值,則對第二隊列執(zhí)行淘汰操作;
[0360] 如果第二隊列的長度大于第一長度閾值且第二隊列的長度大于或等于第三長度 閾值,則對第二隊列執(zhí)行淘汰操作;
[0361] 如果第二隊列的長度大于第一長度閾值、第二隊列的長度小于第三長度閾值、且 第η子隊列的長度大于或等于第四長度閾值,則對第三隊列執(zhí)行淘汰操作;
[0362] 其中,第一長度閾值用于表不第二隊列的最小長度的參考值;
[0363] 第二長度閾值用于表示第三隊列的最小長度的參考值;
[0364] 第三長度閾值與第一歷史隊列的命中次數(shù)正相關(guān),與第二歷史隊列的命中次數(shù)負 相關(guān),第一歷史隊列用于管理從第二隊列淘汰的數(shù)據(jù)塊,第二歷史隊列用于管理從第三隊 列淘汰的數(shù)據(jù)塊;
[0365] 第四長度閾值用于表示第η子隊列的最大長度的參考值。
[0366] 本發(fā)明實施例中,淘汰單元在用于"如果第二隊列的長度大于第一長度閾值、第二 隊列的長度小于第三長度閾值、且第η子隊列的長度大于或等于第四長度閾值,則對第三 隊列執(zhí)行淘汰操作"時,具體用于:
[0367] 如果第二隊列的長度大于第一長度閾值、第二隊列的長度小于第三長度閾值、且 第三隊列中的第η子隊列的長度大于或等于第四長度閾值,則對第η子隊列執(zhí)行淘汰操作。
[0368] 本發(fā)明實施例中,淘汰單元在用于"如果第二隊列的長度小于或等于第一長度閾 值,則對第三隊列執(zhí)行淘汰操作"時,具體用于:
[0369] 如果第二隊列的長度小于或等于第一長度閾值,在第三隊列中第η子隊列的長度 大于第二長度閾值的情況下,則對第η子隊列執(zhí)行淘汰操作;
[0370] 如果第二隊列的長度小于或等于第一長度閾值,在第η子隊列的長度小于或等于 第二長度閾值的情況下,則對第(η-I)子隊列執(zhí)行淘汰操作。
[0371] 本發(fā)明實施例中,生成單元還用于生成第一隊列以及第四隊列,第一隊列用于管 理進入RAM的新的干凈數(shù)據(jù)塊,第四隊列用于管理從RAM淘汰到RAID的數(shù)據(jù)塊,第四隊列 管理的數(shù)據(jù)塊的訪問次數(shù)小于或等于訪問次數(shù)閾值;
[0372] 當?shù)谝魂犃小⒌谒年犃谢虻谖尻犃兴芾淼臄?shù)據(jù)塊被應(yīng)用層的讀請求命中時,被 命中的數(shù)據(jù)塊轉(zhuǎn)為由第二隊列管理;
[0373] 當?shù)谝魂犃小⒌诙犃?、第四隊列或第五隊列所管理的?shù)據(jù)塊被應(yīng)用層的寫請求 命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由第三隊列中的第k子隊列管理,k為寫請求產(chǎn)生的數(shù)據(jù)塊對 應(yīng)的SF值,k為正整數(shù),且0彡k彡n-1。
[0374] 本發(fā)明實施例中,第一隊列的長度是固定的,第一隊列的長度是根據(jù)以下因素確 定的:進入RAM的新的干凈塊在RAM中的緩存時長,抗讀請求掃描緩存。
[0375] 本發(fā)明實施例中,在第五隊列中,將數(shù)據(jù)塊訪問次數(shù)作為價值因子之一,來衡量第 五隊列所管理的數(shù)據(jù)塊的價值;價值為將第五隊列所管理的數(shù)據(jù)塊從SSD淘汰到磁盤系統(tǒng) 的依據(jù)。
[0376] 由于本發(fā)明實施例為基于上述各實施例的裝置實施例,因此,本實施例也具有上 述各實施例所具有的各種有益效果,這里不再贅述。
[0377] 實施例四
[0378] 參見圖17,基于上述各實施例,本發(fā)明實施例提供了一種計算機系統(tǒng)40,包括 CPU41、存儲器42 ;其中,存儲器用于存儲供CPU運行所需的指令,CPU上電后通過讀取存儲 器中指令來運行上述實施例一及實施例二中介紹的方法,從而實現(xiàn)對混合緩存的管理。
[0379] 本實施例中的存儲器可以與RAM及SSD構(gòu)成的混合緩存以及磁盤系統(tǒng)共用相同的 物理介質(zhì),例如,一塊RAM中的一部分區(qū)域用于運行程序,另一部分用于做緩存使用;同理, 對于磁盤,也可以將一部分用于存儲程序本身,另一部分用于存儲數(shù)據(jù);這些技術(shù)都為本領(lǐng) 域技術(shù)人員所公知的技術(shù),這里不再贅述。
[0380] 此外,在另一實施例中,也可以基于其他與CPU類似的處理器件來運行程序,例 如,DSP、FPGA等器件,這里不再贅述。
[0381] 本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單 元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟 以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員 可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出 本發(fā)明的范圍。
[0382] 所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、 裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
[0383] 在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以 通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,單元的劃分, 僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以 結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論 的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或 通信連接,可以是電性,機械或其它的形式。
[0384] 作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的 部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò) 單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
[0385] 另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以 是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
[0386] 功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲 在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn) 有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機 軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計 算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例方法的全部或部分步驟。而前述 的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器 (RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0387] 以上,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉 本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在 本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以權(quán)利要求的保護范圍為準。
【權(quán)利要求】
1. 一種管理混合緩存的方法,所述混合緩存包括隨機存儲器RAM和固態(tài)存儲器SSD,所 述RAM和所述SSD共同作為由一個或多個磁盤構(gòu)成的磁盤系統(tǒng)的緩存; 其特征在于,所述方法包括: 生成第二隊列以及第三隊列,其中,所述第二隊列用于管理所述RAM中熱的干凈數(shù)據(jù) 塊,所述熱的干凈數(shù)據(jù)塊通過所述第二隊列被找到;所述第三隊列用于管理所述RAM中臟 數(shù)據(jù)塊,所述臟數(shù)據(jù)塊通過所述第三隊列被找到;所述第二隊列和所述第三隊列的長度之 和不變; 當新數(shù)據(jù)塊需要由所述第二隊列或所述第三隊列管理,并且所述RAM的空閑空間不足 以存放所述新數(shù)據(jù)塊時,對所述第二隊列或所述第三隊列執(zhí)行淘汰操作,其中所述第二隊 列的淘汰概率高于所述第三隊列的淘汰概率,所述第二隊列的長度隨著對所述第二隊列執(zhí) 行的淘汰操作動態(tài)變化,所述第三隊列的長度隨著對所述第三隊列執(zhí)行的淘汰操作動態(tài)變 化; 確定從所述第二隊列或所述第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次數(shù)閾 值; 如果所述淘汰的數(shù)據(jù)塊的訪問次數(shù)超過所述訪問次數(shù)閾值,即判定該數(shù)據(jù)塊為長期熱 數(shù)據(jù)塊,利用第五隊列管理所述淘汰的數(shù)據(jù)塊,并將所述淘汰的數(shù)據(jù)塊寫入所述SSD,所述 第五隊列用于管理所述SSD中的數(shù)據(jù)塊。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述磁盤系統(tǒng)包括多個磁盤,所述磁盤系 統(tǒng)為廉價冗余磁盤陣列RAID,所述RAID包括多個條帶,一個條帶對應(yīng)一個數(shù)據(jù)塊; 所述第三隊列包括(n+1)個子隊列,所述第三隊列中的第i子隊列中所管理的所有數(shù) 據(jù)塊對應(yīng)的條帶頻率SF值均為i,所述SF值為條帶中已讀入所述RAM中的條帶單元的大小 與所述條帶訪問次數(shù)之間的比值,η為正整數(shù),i為取值從0至η的整數(shù); 所述(n+1)子隊列中的第η子隊列用于管理進入所述RAM的新的臟數(shù)據(jù)塊;所述(n+1) 個子隊列中除所述第η子隊列之外的其它子隊列分別用于管理所述RAM中熱的臟數(shù)據(jù)塊; 當有讀請求或?qū)懻埱笤L問到所述第三隊列管理的數(shù)據(jù)塊時,根據(jù)該請求的特征更新該 數(shù)據(jù)塊的SF值,并根據(jù)新的SF值將該數(shù)據(jù)塊移動到對應(yīng)的子隊列; 在對所述第三隊列執(zhí)行淘汰操作時,按照SF值從大到小的順序?qū)λ觯╪+1)個子隊列 執(zhí)行淘汰操作。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述對所述第二隊列或所述第三隊列執(zhí) 行淘汰操作包括: 如果所述第二隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行淘汰操 作; 如果所述第三隊列的長度小于或等于第二長度閾值,則對所述第二隊列執(zhí)行淘汰操 作; 如果所述第二隊列的長度大于所述第一長度閾值且所述第二隊列的長度大于或等于 第三長度閾值,則對所述第二隊列執(zhí)行淘汰操作; 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述第三 長度閾值、且所述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí)行淘 汰操作; 其中,所述第一長度閾值用于表示所述第二隊列的最小長度的參考值; 所述第二長度閾值用于表示所述第三隊列的最小長度的參考值; 所述第三長度閾值與第一歷史隊列的命中次數(shù)正相關(guān),與所述第二歷史隊列的命中次 數(shù)負相關(guān),所述第一歷史隊列用于管理從所述第二隊列淘汰的數(shù)據(jù)塊,所述第二歷史隊列 用于管理從所述第三隊列淘汰的數(shù)據(jù)塊; 所述第四長度閾值用于表示所述第η子隊列的最大長度的參考值。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述如果所述第二隊列的長度大于所述 第一長度閾值、所述第二隊列的長度小于第三長度閾值、且所述第η子隊列的長度大于或 等于第四長度閾值,則對所述第三隊列執(zhí)行淘汰操作,包括 : 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述第三 長度閾值、且所述第三隊列中的第η子隊列的長度大于或等于所述第四長度閾值,則對所 述第η子隊列執(zhí)行淘汰操作。
5. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述如果所述第二隊列的長度小于或等 于第一長度閾值,則對所述第三隊列執(zhí)行淘汰操作,包括: 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第三隊列中第η子隊 列的長度大于所述第二長度閾值的情況下,則對所述第η子隊列執(zhí)行淘汰操作; 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第η子隊列的長度小 于或等于所述第二長度閾值的情況下,則對所述第(η-1)子隊列執(zhí)行淘汰操作。
6. 根據(jù)權(quán)利要求2至5中任一項所述的方法,其特征在于,當?shù)谝魂犃?、第四隊列或?述第五隊列所管理的數(shù)據(jù)塊被應(yīng)用層的讀請求命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第二隊 列管理,所述第一隊列用于管理進入所述RAM的新的干凈數(shù)據(jù)塊,所述第四隊列用于管理 從所述RAM淘汰到所述RAID的數(shù)據(jù)塊,所述第四隊列管理的數(shù)據(jù)塊的訪問次數(shù)小于或等于 所述訪問次數(shù)閾值; 當所述第一隊列、所述第二隊列、所述第四隊列或所述第五隊列所管理的數(shù)據(jù)塊被應(yīng) 用層的寫請求命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第三隊列中的第k子隊列管理,k為所述 寫請求產(chǎn)生的數(shù)據(jù)塊對應(yīng)的SF值,k為正整數(shù),且0彡k彡η-1。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述第一隊列的長度是固定的,所述第一 隊列的長度是根據(jù)以下因素確定的:進入所述RAM的新的干凈塊在所述RAM中的預熱時長, 抗讀請求掃描緩存。
8. 根據(jù)權(quán)利要求1至7中任一項所述的方法,其特征在于,在所述第五隊列中,將數(shù)據(jù) 塊訪問次數(shù)作為價值因子之一,來衡量所述第五隊列所管理的數(shù)據(jù)塊的價值;所述價值為 將所述第五隊列所管理的數(shù)據(jù)塊從所述SSD淘汰到所述磁盤系統(tǒng)的依據(jù)。
9. 一種管理混合緩存的設(shè)備,所述混合緩存包括隨機存儲器RAM和固態(tài)存儲器SSD,所 述RAM和所述SSD共同作為由一個或多個磁盤構(gòu)成的磁盤系統(tǒng)的緩存; 其特征在于,所述設(shè)備包括: 生成單元,用于生成第二隊列、第三隊列以及第五隊列,其中,所述第二隊列用于管理 所述RAM中熱的干凈數(shù)據(jù)塊,所述熱的干凈數(shù)據(jù)塊通過所述第二隊列被找到;所述第三隊 列用于管理所述RAM中臟數(shù)據(jù)塊,所述臟數(shù)據(jù)塊通過所述第三隊列被找到;所述第二隊列 和所述第三隊列的長度之和不變;所述第五隊列用于管理所述SSD中的數(shù)據(jù)塊; 淘汰單元,當有新數(shù)據(jù)塊需要由所述第二隊列或所述第三隊列管理,并且所述RAM的 空閑空間不足以存放所述新數(shù)據(jù)塊時,對所述生成單元生成的所述第二隊列或所述第三隊 列執(zhí)行淘汰操作,其中所述第二隊列的淘汰概率高于所述第三隊列的淘汰概率,所述第二 隊列的長度隨著對所述第二隊列執(zhí)行的淘汰操作動態(tài)變化,所述第三隊列的長度隨著對所 述第三隊列執(zhí)行的淘汰操作動態(tài)變化; 確定單元,用于確定所述淘汰單元在對所述第二隊列或第二隊列進行淘汰操作時,從 所述第二隊列或所述第三隊列淘汰的數(shù)據(jù)塊的訪問次數(shù)是否超過訪問次數(shù)閾值; 寫入單元,用于當所述確定單元確定淘汰的數(shù)據(jù)塊的訪問次數(shù)超過所述訪問次數(shù)閾 值,則利用所述第五隊列管理所述淘汰的數(shù)據(jù)塊,并將所述淘汰的數(shù)據(jù)塊寫入所述SSD,所 述第五隊列用于管理所述SSD中的數(shù)據(jù)塊。
10. 根據(jù)權(quán)利要求9所述的設(shè)備,其特征在于,所述磁盤系統(tǒng)包括多個磁盤,所述磁盤 系統(tǒng)為廉價冗余磁盤陣列RAID,所述RAID包括多個條帶,一個條帶對應(yīng)一個數(shù)據(jù)塊; 所述第三隊列包括(n+1)個子隊列,所述第三隊列中的第i子隊列中所管理的所有數(shù) 據(jù)塊對應(yīng)的條帶頻率SF值均為i,所述SF值為條帶中已讀入所述RAM中的條帶單元的大小 與所述條帶訪問次數(shù)之間的比值,η為正整數(shù),i為取值從0至η的整數(shù); 所述(n+1)子隊列中的第η子隊列用于管理進入所述RAM的新的臟數(shù)據(jù)塊;所述(n+1) 個子隊列中除所述第η子隊列之外的其它子隊列分別用于管理所述RAM中熱的臟數(shù)據(jù)塊; 所述淘汰單元具體用于:當有讀請求或?qū)懻埱笤L問到所述第三隊列管理的數(shù)據(jù)塊時, 根據(jù)該請求的特征更新該數(shù)據(jù)塊的SF值,并根據(jù)新的SF值將該數(shù)據(jù)塊移動到對應(yīng)的子隊 列;在對所述第三隊列執(zhí)行淘汰操作時,按照SF值從大到小的順序?qū)λ觯╪+1)個子隊列 執(zhí)行淘汰操作。
11. 根據(jù)權(quán)利要求10所述的設(shè)備,其特征在于,所述淘汰單元具體用于:如果所述第二 隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行淘汰操作; 如果所述第三隊列的長度小于或等于第二長度閾值,則對所述第二隊列執(zhí)行淘汰操 作; 如果所述第二隊列的長度大于所述第一長度閾值且所述第二隊列的長度大于或等于 第三長度閾值,則對所述第二隊列執(zhí)行淘汰操作; 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述第三 長度閾值、且所述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí)行淘 汰操作; 其中,所述第一長度閾值用于表示所述第二隊列的最小長度的參考值; 所述第二長度閾值用于表示所述第三隊列的最小長度的參考值; 所述第三長度閾值與第一歷史隊列的命中次數(shù)正相關(guān),與所述第二歷史隊列的命中次 數(shù)負相關(guān),所述第一歷史隊列用于管理從所述第二隊列淘汰的數(shù)據(jù)塊,所述第二歷史隊列 用于管理從所述第三隊列淘汰的數(shù)據(jù)塊; 所述第四長度閾值用于表示所述第η子隊列的最大長度的參考值。
12. 根據(jù)權(quán)利要求11所述的設(shè)備,其特征在于,所述淘汰單元在用于: 所述如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于第三 長度閾值、且所述第η子隊列的長度大于或等于第四長度閾值,則對所述第三隊列執(zhí)行淘 汰操作時,具體用于: 如果所述第二隊列的長度大于所述第一長度閾值、所述第二隊列的長度小于所述第三 長度閾值、且所述第三隊列中的第η子隊列的長度大于或等于所述第四長度閾值,則對所 述第η子隊列執(zhí)行淘汰操作。
13. 根據(jù)權(quán)利要求11所述的設(shè)備,其特征在于,所述淘汰單元在用于: 所述如果所述第二隊列的長度小于或等于第一長度閾值,則對所述第三隊列執(zhí)行淘汰 操作時,具體用于: 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第三隊列中第η子隊 列的長度大于所述第二長度閾值的情況下,則對所述第η子隊列執(zhí)行淘汰操作; 如果所述第二隊列的長度小于或等于所述第一長度閾值,在所述第η子隊列的長度小 于或等于所述第二長度閾值的情況下,則對所述第(η-1)子隊列執(zhí)行淘汰操作。
14. 根據(jù)權(quán)利要求10-13任一所述的設(shè)備,其特征在于,所述生成單元還用于生成第一 隊列以及第四隊列,所述第一隊列用于管理進入所述RAM的新的干凈數(shù)據(jù)塊,所述第四隊 列用于管理從所述RAM淘汰到所述RAID的數(shù)據(jù)塊,所述第四隊列管理的數(shù)據(jù)塊的訪問次數(shù) 小于或等于所述訪問次數(shù)閾值; 當?shù)谝魂犃小⒌谒年犃谢蛩龅谖尻犃兴芾淼臄?shù)據(jù)塊被應(yīng)用層的讀請求命中時,被 命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第二隊列管理; 當所述第一隊列、所述第二隊列、所述第四隊列或所述第五隊列所管理的數(shù)據(jù)塊被應(yīng) 用層的寫請求命中時,被命中的數(shù)據(jù)塊轉(zhuǎn)為由所述第三隊列中的第k子隊列管理,k為所述 寫請求產(chǎn)生的數(shù)據(jù)塊對應(yīng)的SF值,k為正整數(shù),且0彡k彡η-1。
15. 根據(jù)權(quán)利要求14所述的設(shè)備,其特征在于,所述第一隊列的長度是固定的,所述第 一隊列的長度是根據(jù)以下因素確定的:進入所述RAM的新的干凈塊在所述RAM中的緩存時 長,抗讀請求掃描緩存。
16. 根據(jù)權(quán)利要求9至15任一所述的設(shè)備,其特征在于,在所述第五隊列中,將數(shù)據(jù)塊 訪問次數(shù)作為價值因子之一,來衡量所述第五隊列所管理的數(shù)據(jù)塊的價值;所述價值為將 所述第五隊列所管理的數(shù)據(jù)塊從所述SSD淘汰到所述磁盤系統(tǒng)的依據(jù)。
【文檔編號】G06F12/08GK104090852SQ201410315209
【公開日】2014年10月8日 申請日期:2014年7月3日 優(yōu)先權(quán)日:2014年7月3日
【發(fā)明者】萬繼光, 馬曉慧, 程龍 申請人:華為技術(shù)有限公司