SSD Cache填充方法及裝置制造方法
【專利摘要】本發(fā)明提供一種SSD?Cache填充方法及裝置,應(yīng)用于存儲(chǔ)設(shè)備上,該方法包括:將SSD?Cache劃分成若干不同大小的塊Block;根據(jù)待填充數(shù)據(jù)塊大小,選擇與所述待填充數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,所述待填充數(shù)據(jù)塊大小小于或者等于所述Block大小。本發(fā)明根據(jù)業(yè)務(wù)命令大小選擇需要填充的Block大小,盡量減少磁盤的回讀次數(shù),提高SSD?Cache的填充速度。
【專利說明】SSD Cache填充方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲(chǔ)【技術(shù)領(lǐng)域】,尤其涉及一種SSD Cache填充方法及裝置。
【背景技術(shù)】
[0002]目前通用的存儲(chǔ)產(chǎn)品中,使用SSD (Solid State Disk,固態(tài)硬盤)硬盤作為系統(tǒng)的二級(jí)讀緩存,來提高陣列的隨機(jī)讀性能,通常將此處的SSD硬盤叫做SSD Cache (高速緩沖存儲(chǔ)器)。由于存儲(chǔ)設(shè)備自身的讀緩存通常都比較小,一般只有幾百M(fèi)B到IGB之間,而SSDCache的空間已經(jīng)達(dá)到了 1TB,因此,如果將數(shù)據(jù)提前讀出并填充到SSD Cache,那么,數(shù)據(jù)被訪問時(shí),直接從SSD Cache讀取,可以明顯縮短響應(yīng)時(shí)間,提高讀取性能。
[0003]現(xiàn)有技術(shù)方案如圖1所示,當(dāng)數(shù)據(jù)進(jìn)入讀緩存并且讀緩存用盡后,開始填充SSDCache,這提高了 SSD Cache的填充門檻。如圖2所示,在填充SSD Cache時(shí),SSD Cache的Block(塊,Cache的最小分配單位)大小通常設(shè)置為同讀緩存的Block大小一致。數(shù)據(jù)從磁盤寫入讀緩存,再從讀緩存填充到SSD Cache中(圖中實(shí)線為填充方向示意)。由于上層業(yè)務(wù)讀取的數(shù)據(jù)塊大小不等,所以讀緩存的Block中經(jīng)常存在空洞(即讀緩存的某些Block實(shí)際填充大小小于N),而填充SSD Cache時(shí)則要求數(shù)據(jù)大小必須為N才能填充成功。因此,在將數(shù)據(jù)從讀緩存填充到SSD Cache時(shí),對(duì)于小于N的數(shù)據(jù),需要從磁盤回讀(圖中虛線為回讀方向示意),將不足的部分?jǐn)?shù)據(jù)補(bǔ)齊,然后填充到SSD Cache。由于SSD Cache的Block大小固定且相同,而業(yè)務(wù)命令大小不等,必然導(dǎo)致填充SSD Cache時(shí)的回讀次數(shù)增加,增加了磁盤的隨機(jī)命令數(shù),影響業(yè)務(wù)性能和填充速度。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種SSD Cache填充方法,應(yīng)用于存儲(chǔ)設(shè)備上,該方法包括:
[0005]將SSD Cache劃分成若干不同大小的塊Block ;
[0006]根據(jù)待填充數(shù)據(jù)塊大小,選擇與所述待填充數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,所述待填充數(shù)據(jù)塊大小小于或者等于所述Block大小。
[0007]本發(fā)明還提供了一種SSD Cache填充裝置,應(yīng)用于存儲(chǔ)設(shè)備上,該裝置包括:
[0008]Block配置單兀,用于將SSD Cache劃分成若干不同大小的塊Block ;
[0009]Block填充單元,用于根據(jù)待填充數(shù)據(jù)塊大小,選擇與所述待填充數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,所述待填充數(shù)據(jù)塊大小小于或者等于所述Block大小。
[0010]本發(fā)明根據(jù)業(yè)務(wù)命令大小選擇需要填充的Block大小,盡量減少磁盤的回讀次數(shù),提高SSD Cache的填充速度。同時(shí),根據(jù)業(yè)務(wù)命令大小的分布趨勢(shì),動(dòng)態(tài)調(diào)整SSD Cache的不同Block的分配空間,進(jìn)一步降低了對(duì)磁盤的隨機(jī)命令請(qǐng)求,提高了 SSD Cache的填充速度,達(dá)到提高隨機(jī)讀取性能的目的。
【專利附圖】
【附圖說明】
[0011]圖1是現(xiàn)有技術(shù)中SSD Cache啟動(dòng)示意圖。
[0012]圖2是現(xiàn)有技術(shù)中SSD Cache填充示意圖。
[0013]圖3是本發(fā)明一種實(shí)施方式中SSD Cache填充裝置的邏輯結(jié)構(gòu)及其基礎(chǔ)硬件環(huán)境的示意圖。
[0014]圖4是本發(fā)明一種實(shí)施方式中SSD Cache填充方法的流程圖。
[0015]圖5是本發(fā)明一種實(shí)施方式中SSD Cache啟動(dòng)不意圖。
[0016]圖6是本發(fā)明一種實(shí)施方式中SSD Cache首次填充不意圖。
[0017]圖7是本發(fā)明一種實(shí)施方式中SSD Cache 二次填充示意圖。
[0018]圖8是本發(fā)明一種實(shí)施方式中SSD Cache動(dòng)態(tài)分配空間不意圖。
【具體實(shí)施方式】
[0019]以下結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
[0020]本發(fā)明提供一種虛擬化環(huán)境下SSD Cache填充裝置,以下以軟件在計(jì)算機(jī)中實(shí)現(xiàn)為例進(jìn)行說明,但是本發(fā)明并不排除諸如硬件或者邏輯器件等其他實(shí)現(xiàn)方式。如圖3所示,該裝置運(yùn)行的計(jì)算機(jī)硬件環(huán)境包括CPU、內(nèi)存、非易失性存儲(chǔ)器以及其他硬件。該裝置作為計(jì)算機(jī)上一個(gè)邏輯層面的虛擬裝置,其通過計(jì)算機(jī)上的CPU來運(yùn)行。該裝置包括Block配置單元和Block填充單元。請(qǐng)參考圖4,該裝置的使用和運(yùn)行過程包括以下步驟:
[0021]步驟101,Block配置單元將SSD Cache劃分成若干不同大小的塊Block ;
[0022]步驟102,Block填充單元根據(jù)待填充數(shù)據(jù)塊大小,選擇與所述待填充數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,所述待填充數(shù)據(jù)塊大小小于或者等于所述Block大小。
[0023]本發(fā)明通過將SSD Cache劃分為多個(gè)不同大小的Block,再根據(jù)上層業(yè)務(wù)命令選擇與其大小最接近的Block進(jìn)行填充,以減少對(duì)磁盤的隨機(jī)命令請(qǐng)求,提高了 SSD Cache的填充速度,達(dá)到提高隨機(jī)讀取性能的目的。具體實(shí)施過程如下。
[0024]如圖5所示,在上層業(yè)務(wù)發(fā)送讀請(qǐng)求時(shí),若需從磁盤讀取數(shù)據(jù),則將該數(shù)據(jù)寫入讀緩存的同時(shí),啟動(dòng)SSD Cache的填充進(jìn)程,將數(shù)據(jù)填充到SSD Cache中。由于讀緩存的容量有限,讀緩存中始終保存的是上層業(yè)務(wù)需要用到的最新數(shù)據(jù),而數(shù)據(jù)在寫入讀緩存的同時(shí),都會(huì)寫入到SSD Cache中,這里可理解為對(duì)讀緩存中數(shù)據(jù)的備份,由于SSD Cache的容量相對(duì)比較大,因此,保存了最近上層業(yè)務(wù)用到的數(shù)據(jù)(保存的數(shù)量取決于SSD Cache的容量),其中,包括當(dāng)前讀緩存中的數(shù)據(jù)。當(dāng)上層業(yè)務(wù)需要讀取最近使用過的數(shù)據(jù),而該數(shù)據(jù)不在讀緩存中時(shí),向SSD Cache中查找,若SSD Cache有該數(shù)據(jù),則從SSD Cache中直接讀取。從上述過程可知,寫入讀緩存的數(shù)據(jù)必將寫入SSD Cache中,而且SSD Cache寫入速度比讀緩存要慢,因此,本發(fā)明將對(duì)SSD Cache的填充過程提前,只要開始寫入讀緩存就啟動(dòng)SSD Cache填充進(jìn)程,避免了現(xiàn)有技術(shù)中必須在讀緩存用盡后才能啟動(dòng)SSD Cache,并且需要從讀緩存中將數(shù)據(jù)填充到SSD Cache中的問題,節(jié)約了時(shí)間,在一定程度上提高了填充速度。
[0025]由于SSD Cache數(shù)據(jù)填充必須滿足待填充數(shù)據(jù)塊大小與Block大小一致的條件,因此,本發(fā)明通過將SSD 0&(*6劃分成不同大小的趴001^(例如,41(、81(、161(、321(和641(),增加待填充數(shù)據(jù)塊與Block匹配的機(jī)率,進(jìn)而減少從磁盤回讀數(shù)據(jù)的次數(shù),提高填充速度。
[0026]在對(duì)SSD Cache進(jìn)行數(shù)據(jù)填充時(shí),根據(jù)待填充數(shù)據(jù)塊大小選擇與該數(shù)據(jù)塊大小最接近的Block進(jìn)行填充。結(jié)合圖6介紹SSD Cache數(shù)據(jù)填充過程。本實(shí)施例中,SSD Cache劃分的Block大小分別為4K、8K、16K、32K和64Κ。對(duì)于大于64K(SSD Cache中劃分的最大Block)的數(shù)據(jù)塊,將該數(shù)據(jù)塊按照64K進(jìn)行分割,選擇多個(gè)64K Block進(jìn)行填充,當(dāng)最后一個(gè)Block填充不滿時(shí),從磁盤回讀;對(duì)于小于64K的數(shù)據(jù)塊,則依次判斷與其數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,例如:數(shù)據(jù)塊大小小于等于4K,則將該數(shù)據(jù)塊填充到4K大小的Block中;數(shù)據(jù)塊大小大于4K小于等于8K,則將該數(shù)據(jù)塊填充到8K大小的Block中;以此類推,找到與每一個(gè)數(shù)據(jù)塊大小對(duì)應(yīng)的最匹配的Block進(jìn)行填充。在填充過程中,若數(shù)據(jù)塊大小等于Block大小,則無需從磁盤回讀數(shù)據(jù);若數(shù)據(jù)塊大小小于Block大小,則Block中剩余空間需從磁盤中回讀數(shù)據(jù)進(jìn)行填充。例如:數(shù)據(jù)塊大小為12K,則將該數(shù)據(jù)塊填充到16K大小的Block中,剩余4K空間從磁盤回讀數(shù)據(jù)進(jìn)行填充。
[0027]在具體實(shí)現(xiàn)過程中,可通過設(shè)置回讀標(biāo)識(shí)位記錄對(duì)應(yīng)Block是否需要回讀,每一個(gè)二進(jìn)制位bit代表一個(gè)Block。bit等于O,表示對(duì)應(yīng)Block未填充或已填充不回讀;bit等于1,表示對(duì)應(yīng)Block已填充待回讀。假設(shè)使用一個(gè)ITB的SSD Cache,按照極限情況計(jì)算,假設(shè)8K大小的Block占據(jù)了整個(gè)SSD Cache空間,并且全部需要回讀,則回讀標(biāo)識(shí)位占用內(nèi)存大小為:((1*1024*1024*1024)/8)/(8*1024*1024) = 16MB,所以,在 SSD Cache 初始化時(shí),需預(yù)先劃定16MB的空間給回讀標(biāo)識(shí)位,這些標(biāo)志位并不會(huì)明顯占用很大內(nèi)存空間。
[0028]上述過程為SSD Cache被首次填充的處理過程,同讀緩存一樣,SSD Cache也存在二次填充的情況,畢竟SSD Cache空間有限,總會(huì)被用盡,或者讀取的數(shù)據(jù)塊命中現(xiàn)有的Block空間,需要進(jìn)行二次填充。如圖7所示,假設(shè)上層業(yè)務(wù)讀取的數(shù)據(jù)大小為20K,其中一部分?jǐn)?shù)據(jù)已存在于16K的Block空間中,這時(shí)需要把16K的Block空間釋放出來,將20K數(shù)據(jù)寫入32K的Block中,并記錄該32K的Block需要回讀,從磁盤中回讀12K數(shù)據(jù)填充到32K 的 Block 中。如果 SSD Cache 中的 32K 的 Block 已用完,則使用 LRU(Least RecentlyUsed,近期最少使用算法)進(jìn)行替換,將最近不用的數(shù)據(jù)塊從Block中移出,填充新的數(shù)據(jù)塊。
[0029]為了進(jìn)一步提高填充速度,本發(fā)明可根據(jù)SSD Cache中不同大小Block的使用情況,動(dòng)態(tài)分配存儲(chǔ)空間。例如,初始化時(shí),默認(rèn)按照平均分配的原則,為4K、8K、16K、32K和64Κ的Block分配相同的空間容量。假設(shè)SSD Cache的存儲(chǔ)空間總?cè)萘繛镼,則每種Block大小的容量均為Q/5。設(shè)置一個(gè)定時(shí)器,每隔一定時(shí)間(比如Is)進(jìn)行一次填充Block個(gè)數(shù)的統(tǒng)計(jì)。假設(shè)當(dāng)前到達(dá)統(tǒng)計(jì)時(shí)間點(diǎn),統(tǒng)計(jì)4K、8K、16K、32K和64Κ的Block填充個(gè)數(shù)分別為DX、EX、FX、GX、HX,現(xiàn)以 8KBlock 為例,計(jì)算 8K Block 的填充比率為 Zx = Ex/(Dx+Ex+Fx+Gx+Hx),即當(dāng)前8K Block填充個(gè)數(shù)占所有Block填充個(gè)數(shù)的百分比。由于上層應(yīng)用在不斷變化,其讀取的數(shù)據(jù)長(zhǎng)度也會(huì)不同,導(dǎo)致每一個(gè)統(tǒng)計(jì)時(shí)刻的Block填充比率不同。本發(fā)明通過對(duì)m次的Block填充比率取平均值,作為計(jì)算當(dāng)前Block存儲(chǔ)空間的依據(jù)。假設(shè)8K Block m次的統(tǒng)計(jì)結(jié)果分別為:m次統(tǒng)計(jì)中有nl次得到的填充比率為Z1,有n2次得到的填充比率為Z2,……,有ni次得到的填充比率為Zi,其中m= (nl+n2+…+ni),則實(shí)際填充比率4 =(Zfnl+Z#!^+....+Zwni)/m。根據(jù)該填充比率重新為8K大小的Block分配存儲(chǔ)空間,存儲(chǔ)空間容量為Qy = Q*Zy。同理,計(jì)算4K、16K、32K和64Κ的Block填充比率,從而計(jì)算出對(duì)應(yīng)的存儲(chǔ)空間??梢?,當(dāng)某一種上層業(yè)務(wù)命令增多時(shí),占用對(duì)應(yīng)Block的數(shù)量也會(huì)增多,則統(tǒng)計(jì)的填充比率增加,從而為該類業(yè)務(wù)命令分配更多的Block空間。
[0030]在上述填充比率統(tǒng)計(jì)過程中,可能存在某一種Block始終未被使用或極少使用的情況,也要為其保留一定比例(例如1% )的空間備用。
[0031]具體的分配策略如圖8所示。假設(shè)某一時(shí)刻統(tǒng)計(jì)的各Block的填充比率為:4K為30%,8Κ為30%,16Κ為30%,32Κ為5%,64Κ為5% ; 10秒鐘后統(tǒng)計(jì)的填充比率為:4Κ為40%,8Κ為50%,16Κ為10%,32Κ為0%,64Κ為0%,則應(yīng)增加4Κ和8Κ Block的空間,減少16K、32K和64K Block的存儲(chǔ)空間。在此段時(shí)間內(nèi),雖然32K和64K Block未被使用,但仍需預(yù)留一部分空間(例如,各1%),在剩余空間中為41(、81(和16K按比例分配。同時(shí),在減少某種Block的空間之前,需檢查該Block的空間是否已被全部填充,若某種Block空間已被用完,則按照LRU方式提取需要釋放的空間,將里面的數(shù)據(jù)置為無效,然后再重新劃給需要多分配空間的Block。
[0032]本發(fā)明根據(jù)業(yè)務(wù)命令大小選擇需要填充的Block大小,盡量減少磁盤的回讀次數(shù),提高SSD Cache的填充速度。同時(shí),根據(jù)業(yè)務(wù)命令大小的分布趨勢(shì),動(dòng)態(tài)調(diào)整SSD Cache的不同Block的分配空間,進(jìn)一步降低了對(duì)磁盤的隨機(jī)命令請(qǐng)求,提高了 SSD Cache的填充速度,達(dá)到提高隨機(jī)讀取性能的目的。
[0033]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種SSD Cache填充方法,應(yīng)用于存儲(chǔ)設(shè)備上,其特征在于,該方法包括: 將SSD Cache劃分成若干不同大小的塊Block ; 根據(jù)待填充數(shù)據(jù)塊大小,選擇與所述待填充數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,所述待填充數(shù)據(jù)塊大小小于或者等于所述Block大小。
2.如權(quán)利要求1所述的方法,其特征在于: 為所述不同大小的Block動(dòng)態(tài)分配存儲(chǔ)空間。
3.如權(quán)利要求2所述的方法,其特征在于: 每一種類型Block的存儲(chǔ)空間計(jì)算方法相同,具體為:
Qy = Q*Zy
其中, Q為SSD Cache的存儲(chǔ)空間總?cè)萘浚? Zy為m次Block填充個(gè)數(shù)百分比的平均值; Qy為分配的Block存儲(chǔ)空間容量; 所述大小相同的Block為同一類型Block ; 所述Block填充個(gè)數(shù)百分比為預(yù)設(shè)時(shí)間段內(nèi)當(dāng)前類型Block的填充個(gè)數(shù)占所有類型Block填充個(gè)數(shù)的百分比。
4.如權(quán)利要求3所述的方法,其特征在于: 當(dāng)某類型Block計(jì)算得到的Qy為O時(shí),將預(yù)設(shè)大小的空間容量分配給該類型的Block。
5.如權(quán)利要求1所述的方法,其特征在于:在進(jìn)行Block填充之前,還包括: 在接收到上層業(yè)務(wù)的讀請(qǐng)求,將磁盤中數(shù)據(jù)寫入讀緩存時(shí),啟動(dòng)SSD Cache填充。
6.一種SSD Cache填充裝置,應(yīng)用于存儲(chǔ)設(shè)備上,其特征在于,該裝置包括: Block配置單元,用于將SSD Cache劃分成若干不同大小的塊Block ; Block填充單元,用于根據(jù)待填充數(shù)據(jù)塊大小,選擇與所述待填充數(shù)據(jù)塊大小最接近的Block進(jìn)行填充,所述待填充數(shù)據(jù)塊大小小于或者等于所述Block大小。
7.如權(quán)利要求6所述的裝置,其特征在于: 所述Block配置單元進(jìn)一步用于為所述不同大小的Block動(dòng)態(tài)分配存儲(chǔ)空間。
8.如權(quán)利要求7所述的裝置,其特征在于: 每一種類型Block的存儲(chǔ)空間計(jì)算方法相同,具體為:
Qy = Q*Zy
其中, Q為SSD Cache的存儲(chǔ)空間總?cè)萘浚? Zy為m次Block填充個(gè)數(shù)百分比的平均值; Qy為分配的Block存儲(chǔ)空間容量; 所述大小相同的Block為同一類型Block ; 所述Block填充個(gè)數(shù)百分比為預(yù)設(shè)時(shí)間段內(nèi)當(dāng)前類型Block的填充個(gè)數(shù)占所有類型Block填充個(gè)數(shù)的百分比。
9.如權(quán)利要求8所述的裝置,其特征在于: 當(dāng)某類型Block計(jì)算得到的Qy為O時(shí),將預(yù)設(shè)大小的空間容量分配給該類型的Block。
10.如權(quán)利要求6所述的裝置,其特征在于,在所述Block填充單元之前,還包括: 填充啟動(dòng)單元,用于在接收到上層業(yè)務(wù)的讀請(qǐng)求,將磁盤中數(shù)據(jù)寫入讀緩存時(shí),啟動(dòng)SSD Cache 填充。
【文檔編號(hào)】G06F3/06GK104133642SQ201410367728
【公開日】2014年11月5日 申請(qǐng)日期:2014年7月29日 優(yōu)先權(quán)日:2014年7月29日
【發(fā)明者】吳會(huì)堂, 石巖, 姚婷 申請(qǐng)人:浙江宇視科技有限公司