本發(fā)明涉發(fā)明存儲(chǔ)技術(shù),特別涉及于存儲(chǔ)領(lǐng)域技術(shù)的日志領(lǐng)域。
背景技術(shù):
緩存(cache)是一種為了解決高、低速設(shè)備之間速度不匹配而采用的一項(xiàng)重要技術(shù),廣泛應(yīng)用于各種領(lǐng)域如存儲(chǔ)系統(tǒng)中,可以減少應(yīng)用響應(yīng)時(shí)間、提升效率。
在存儲(chǔ)系統(tǒng)中,為了提升存儲(chǔ)系統(tǒng)的性能,通常在處理設(shè)備和硬盤之間增加一個(gè)緩存層(也稱為回寫緩存,write-back cache)。緩存層可以提高系統(tǒng)讀寫性能,所以有時(shí)候也把緩存層稱為性能層。
緩存使用的介質(zhì)例如是固態(tài)硬盤(solid state disk,SSD),其其讀寫性能優(yōu)于持久化存儲(chǔ)介質(zhì)(例如硬盤)。相對(duì)于硬盤,可以更快速處理來自主機(jī)應(yīng)用程序的寫請(qǐng)求。緩存的存儲(chǔ)容量有限,因此當(dāng)空閑空間不足時(shí),需要根據(jù)淘汰算法把一部分緩存介質(zhì)數(shù)據(jù)淘汰到硬盤中,以便騰出空間為后續(xù)的寫請(qǐng)求使用。這部分從緩存下發(fā)到硬盤的數(shù)據(jù)稱為臟數(shù)據(jù)。
為了盡快的讓緩存擁有足夠的空閑空間,在空閑空間不足時(shí)需要盡快把臟數(shù)據(jù)淘汰到硬盤中去。否則會(huì)造成寫請(qǐng)求難以被及時(shí)處理。
存儲(chǔ)領(lǐng)域中,緩存中臟數(shù)據(jù)通常是以分條作為粒度下發(fā)到硬盤。分條是邏輯概念,類似于一個(gè)裝數(shù)據(jù)的容器。如果下發(fā)的數(shù)據(jù)不足一個(gè)分條,意味著分條中僅有部分位置有效數(shù)據(jù),分條中存在空閑位置。參見圖1中的分條,其利用率只有50%。這種沒有被有效數(shù)據(jù)“裝滿”的分條,和被有效數(shù)據(jù)“裝滿”的分條一樣,都會(huì)占用硬盤中一個(gè)完整分條的存儲(chǔ)空間,而且會(huì)產(chǎn)生一組元數(shù)據(jù)。因此,如果分條中有效數(shù)據(jù)和空閑位置的比例越大。可以節(jié)約越多的硬盤存儲(chǔ)空間,以及減少元數(shù)據(jù)的數(shù)量。如果分條完全“裝滿”有效數(shù)據(jù)后再下發(fā),可以最大化的利用硬盤存儲(chǔ)空間,以及產(chǎn)生最少的元數(shù)據(jù)。
由此可見,臟數(shù)據(jù)的淘汰方式存在兩個(gè)矛盾的需求:從盡快獲取更多空閑緩存空間這個(gè)需求考慮,臟數(shù)據(jù)需要盡快淘汰到硬盤,最好是一旦空閑空間不足,立刻執(zhí)行淘汰操作;而從提高硬盤利用率和減少元數(shù)據(jù)這個(gè)需求考慮,需要盡量湊滿分條后再把臟數(shù)據(jù)淘汰到硬盤,最好是把臟數(shù)據(jù)湊滿完整的分條后再執(zhí)行淘汰操作。如何在二者中尋求一個(gè)平衡,是業(yè)界需要解決的問題。
現(xiàn)有技術(shù)中并沒有很好的解決這個(gè)問題。每秒讀寫次數(shù)(IOPS)抖動(dòng)過大,以及硬盤存儲(chǔ)空間利用不足的情況時(shí)有發(fā)生。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種緩存數(shù)據(jù)處理方法、裝置和存儲(chǔ)控制器,可以緩解IOPS的嚴(yán)重波動(dòng),使存儲(chǔ)系統(tǒng)的性能越穩(wěn)定。
本發(fā)明第一方面,本發(fā)明提供一種緩存數(shù)據(jù)處理方法,該方法包括:獲取數(shù)據(jù)的壓縮比D、重刪比C、以及平均分條填充率I、緩存中目標(biāo)分條大小S、以及所述目標(biāo)分條中有效數(shù)據(jù)大小W;按照公式獲取淘汰數(shù)據(jù)量N,在Tmin≤N≤Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條,把所述目標(biāo)分條的數(shù)據(jù)淘汰給存儲(chǔ)介質(zhì),其中當(dāng)Tmin是預(yù)設(shè)的第一閾值,Tmax是預(yù)設(shè)的第二閾值。在另外一種可選方式中,在N>Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條。在另外一種可選方式中,在N<Tmin的情況下,把所述目標(biāo)分條的數(shù)據(jù)淘汰給所述存儲(chǔ)介質(zhì)。這三種可選方式都是可選的,執(zhí)行其中任意一個(gè)即可形成一個(gè)完整的流程?;谠摲椒?,在對(duì)緩存沒有明顯影響的情況下,分條容納盡量多的數(shù)據(jù)后再淘汰到存儲(chǔ)介質(zhì)中。在盡早獲得空閑的緩存空間以及提高磁盤利用率這兩個(gè)互相矛盾的需求之間獲得平衡。使得緩存數(shù)據(jù)更平滑的淘汰給存儲(chǔ)介質(zhì),減少了IOPS嚴(yán)重波動(dòng)的情況,使存儲(chǔ)系統(tǒng)更加穩(wěn)定。
在第一方面的第一種可能實(shí)現(xiàn)方式中,其中,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條之后,進(jìn)一步包括:在所述目標(biāo)分條被后續(xù)數(shù)據(jù)寫滿以后,把所述目標(biāo)分條淘汰到所述存儲(chǔ)介質(zhì)。該可能實(shí)現(xiàn)方式提出了N>Tm的情況下,淘汰數(shù)據(jù)的方案。
在第一方面的第二種可能實(shí)現(xiàn)方式中,根據(jù)權(quán)利要求1所述的緩存數(shù)據(jù)淘汰方法,所述D、C和I是統(tǒng)計(jì)值,其初始值均為1。
在第一方面的第三種可能實(shí)現(xiàn)方式中,其中S用從緩存下發(fā)數(shù)據(jù)到存儲(chǔ)介質(zhì)的最小單位(或者最小單位的整數(shù)倍)的數(shù)量進(jìn)行描述,例如用緩存頁的數(shù)量描述。
本發(fā)明第二方面,提供一種緩存數(shù)據(jù)處理裝置,該裝置包括:獲取模塊,可以用于獲取數(shù)據(jù)的壓縮比D、重刪比C以及平均分條填充率I,還可以用于獲取緩存中目標(biāo)分條大小S、所述目標(biāo)分條中有效數(shù)據(jù)大小W;計(jì)算模塊,用于按照公式計(jì)算從淘汰數(shù)據(jù)量N;數(shù)據(jù)處理模塊,用于在Tmin≤N≤Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條,把所述目標(biāo)分條的數(shù)據(jù)淘汰給存儲(chǔ)介質(zhì),其中當(dāng)Tmin是預(yù)設(shè)的第一閾值,Tmax是預(yù)設(shè)的第二閾值。在另外一種可選方式中,數(shù)據(jù)處理模塊用于在N>Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條。在另外一種可選方式中,在N<Tmin的情況下,數(shù)據(jù)處理模塊用于把所述目標(biāo)分條的數(shù)據(jù)淘汰給所述存儲(chǔ)介質(zhì)。這三種可選方式都是可選的,執(zhí)行其中任意一個(gè)即可形成一個(gè)完整的流程?;谠摼彺鏀?shù)據(jù)處理裝置,在對(duì)緩存沒有明顯影響的情況下,分條容納盡量多的數(shù)據(jù)后再淘汰到存儲(chǔ)介質(zhì)中。在盡早獲得空閑的緩存空間以及提高磁盤利用率這兩個(gè)互相矛盾的需求之間獲得平衡。使得緩存數(shù)據(jù)更平滑的淘汰給存儲(chǔ)介質(zhì),減少了IOPS嚴(yán)重波動(dòng)的情況,使存儲(chǔ)系統(tǒng)更加穩(wěn)定。
本發(fā)明第二方面的第一種可能實(shí)現(xiàn)方式,所述處理模塊還用于:在大小為N的數(shù)據(jù)寫入所述目標(biāo)分條之后,如果所述目標(biāo)分條被后續(xù)數(shù)據(jù)寫滿以后,把所述目標(biāo)分條淘汰到所述存儲(chǔ)介質(zhì)。該可能實(shí)現(xiàn)方式提出了N>Tm的情況下,淘汰數(shù)據(jù)的方案。
本發(fā)明第二方面的第二種可能實(shí)現(xiàn)方式,所述D、C和I是統(tǒng)計(jì)值,其初始值均為1。
本發(fā)明第二方面的第三種可能實(shí)現(xiàn)方式,S用從緩存下發(fā)數(shù)據(jù)到存儲(chǔ)介質(zhì)的最小單位(或者最小單位的整數(shù)倍)的數(shù)量進(jìn)行描述,例如用緩存頁的數(shù)量描述。
本發(fā)明第三方面提供一種存儲(chǔ)控制器,所述存儲(chǔ)控制器包括處理器和緩存,緩存用于暫存數(shù)據(jù),可選的還可以包括存儲(chǔ)淘汰數(shù)據(jù)的存儲(chǔ)介質(zhì)(例如硬盤或者固態(tài)硬盤)。所述處理器通過運(yùn)行程序執(zhí)行下面的步驟:獲取數(shù)據(jù)的壓縮比D、重刪比C、以及平均分條填充率I,還用于獲取緩存中目標(biāo)分條大小S、所述目標(biāo)分條中有效數(shù)據(jù)大小W;按照公式獲取淘汰數(shù)據(jù)量N;在Tmin≤N≤Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條,把所述目標(biāo)分條的數(shù)據(jù)淘汰給存儲(chǔ)介質(zhì),其中當(dāng)Tmin是預(yù)設(shè)的第一閾值,Tmax是預(yù)設(shè)的第二閾值。在另外一種可選方式中,在N>Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條。在另外一種可選方式中,在N<Tmin的情況下,把所述目標(biāo)分條的數(shù)據(jù)淘汰給所述存儲(chǔ)介質(zhì)。這三種可選方式都是可選的,執(zhí)行其中任意一個(gè)即可形成一個(gè)完整的流程。基于該存儲(chǔ)控制器,在對(duì)緩存沒有明顯影響的情況下,分條容納盡量多的數(shù)據(jù)后再淘汰到存儲(chǔ)介質(zhì)中。在盡早獲得空閑的緩存空間以及提高磁盤利用率這兩個(gè)互相矛盾的需求之間獲得平衡。
本發(fā)明第三方面的第一種可能實(shí)現(xiàn)方式,所述處理器還用于執(zhí)行:在大小為N的數(shù)據(jù)寫入所述目標(biāo)分條之后,如果所述目標(biāo)分條被后續(xù)數(shù)據(jù)寫滿以后,把所述目標(biāo)分條淘汰到所述存儲(chǔ)介質(zhì)。該可能實(shí)現(xiàn)方式提出了N>Tm的情況下,淘汰數(shù)據(jù)的方案。
本發(fā)明第三方面的第二種可能實(shí)現(xiàn)方式,所述D、C和I是統(tǒng)計(jì)值,其初始值均為1。
本發(fā)明第三方面的第三種可能實(shí)現(xiàn)方式,S用從緩存下發(fā)數(shù)據(jù)到存儲(chǔ)介質(zhì)的最小單位(或者最小單位的整數(shù)倍)的數(shù)量進(jìn)行描述,例如用緩存頁的數(shù)量描述。
本發(fā)明第四方面,還提供一種存儲(chǔ)系統(tǒng),包括上述的存儲(chǔ)控制器和存儲(chǔ)介質(zhì)(例如硬盤、固態(tài)硬盤),存儲(chǔ)介質(zhì)用于存儲(chǔ)被淘汰的數(shù)據(jù)。
本發(fā)明第五方面,還提供一種存儲(chǔ)系統(tǒng),包括上述的數(shù)據(jù)處理裝置和存儲(chǔ)介質(zhì)(例如硬盤、固態(tài)硬盤),存儲(chǔ)介質(zhì)用于存儲(chǔ)被淘汰的數(shù)據(jù)。
附圖說明
圖1是分條使用情況示意圖;
圖2是本發(fā)明存儲(chǔ)系統(tǒng)實(shí)施例結(jié)構(gòu)圖;
圖3是本發(fā)明緩存數(shù)據(jù)處理方法一種實(shí)施例流程圖;
圖4是一種緩存數(shù)據(jù)處理裝置實(shí)施例拓?fù)鋱D。
具體實(shí)施方式
本申請(qǐng)方案可以適用于存儲(chǔ)設(shè)備。存儲(chǔ)設(shè)備例如是存儲(chǔ)控制器。存儲(chǔ)控制器和存儲(chǔ)介質(zhì)(例如硬盤、固態(tài)硬盤等)相對(duì)獨(dú)立,它們共同組成存儲(chǔ)系統(tǒng)。除非特別說明,后續(xù)實(shí)施例以這種情況為例介紹本發(fā)明實(shí)施例方案,存儲(chǔ)介質(zhì)以硬盤進(jìn)行舉例。
需要說明的是,存儲(chǔ)設(shè)備還可以是既有運(yùn)算管理能力又有存儲(chǔ)介質(zhì)的存儲(chǔ)設(shè)備,例如服務(wù)器。服務(wù)器中擁有運(yùn)算管理能力的那部分相當(dāng)于存儲(chǔ)控制器。存儲(chǔ)控制器和存儲(chǔ)設(shè)備內(nèi)部的存儲(chǔ)介質(zhì)通信,或者和存儲(chǔ)設(shè)備外部的存儲(chǔ)介質(zhì)通信。由于原理類似,因此不做詳述。
參見圖2是本發(fā)明存儲(chǔ)系統(tǒng)實(shí)施例結(jié)構(gòu)圖。主機(jī)11和存儲(chǔ)系統(tǒng)12通信,存儲(chǔ)系統(tǒng)包括存儲(chǔ)控制器12和存儲(chǔ)介質(zhì)13。存儲(chǔ)控制器12中有處理器121,緩存122,還可以有內(nèi)存123。內(nèi)存123可以為處理器121運(yùn)行程序提供存儲(chǔ)空間,通過運(yùn)行程序,處理器可以執(zhí)行本發(fā)明提供的緩存數(shù)據(jù)處理方法實(shí)施例。內(nèi)存123和緩存122可以集成在一起,也可以分開。在圖中存儲(chǔ)控制器12和財(cái)產(chǎn)介質(zhì)13是獨(dú)立的。在其他實(shí)施例中,存儲(chǔ)控制器12中也可以集成存儲(chǔ)介質(zhì)13,例如通用服務(wù)器。
緩存可以供主機(jī)11讀寫。由于緩存空間有限,因此在緩存空間變小時(shí),需要把緩存中數(shù)據(jù)遷移到存儲(chǔ)介質(zhì)13中。具體而言是以分條為單位,把位于緩存121的分條的有效數(shù)據(jù)遷移到存儲(chǔ)介質(zhì)13中,這種遷移也稱為下盤,下盤的越早,緩存能越早的騰出來空隙空間。
在塊(block)存儲(chǔ)技術(shù)中,把緩存數(shù)據(jù)下盤是以分條作為粒度的,分條是邏輯單位,每個(gè)分條(stripe)由多個(gè)條帶(strip)組成。在把數(shù)據(jù)從緩存下盤時(shí),每個(gè)/每組硬盤存儲(chǔ)所述分條的一個(gè)條帶。以分條作為粒度把把緩存遷移到硬盤的過程中,并不意味著整個(gè)分條都是有效數(shù)據(jù),可能分條的一部分是沒有有效數(shù)據(jù)的,例如只有部分條帶是有效數(shù)據(jù),其余條帶無有效數(shù)據(jù)。
一方面,是盡早下盤可以讓緩存盡早獲取空閑存儲(chǔ)空間;另一方面,分條下盤后,分條中的有效數(shù)據(jù)和無效數(shù)據(jù)都會(huì)占用磁盤空間,如果分條尚未容納盡量多的有效數(shù)據(jù)就下盤,會(huì)造成硬盤的利用率不高,因此從提高磁盤利用率的角度考慮,最好是不要盡早下盤,而是湊滿分條再下盤。應(yīng)用本發(fā)明實(shí)施例按照的算法,可以在這兩個(gè)矛盾的需求之間做出更好的平衡。
參見附圖3,是本發(fā)明緩存數(shù)據(jù)處理方法一種實(shí)施例流程圖,可以由存儲(chǔ)控制器執(zhí)行。
21,從內(nèi)存中獲取數(shù)據(jù)的重刪比C,數(shù)據(jù)的壓縮比D、以及平均分條填充率I。
重刪比C、壓縮比D和平均分?jǐn)偺畛渎蔍都是對(duì)歷史數(shù)據(jù)的統(tǒng)計(jì)值。初始化的時(shí)候,都是1;但是隨著系統(tǒng)的運(yùn)行,由于不斷有新分條被重刪、壓縮、填充處理,這3個(gè)值會(huì)動(dòng)態(tài)變化的。這些數(shù)據(jù)被統(tǒng)計(jì)后可以存儲(chǔ)在內(nèi)存中,也可以存儲(chǔ)在其他介質(zhì)。
對(duì)緩存中的各個(gè)分條而言,在被下盤前,可以對(duì)分條內(nèi)的有效數(shù)據(jù)進(jìn)行重復(fù)數(shù)據(jù)刪除。對(duì)于分條中的每個(gè)塊,如果硬盤中已經(jīng)存在相同的塊,說明這個(gè)塊和硬盤現(xiàn)有的塊重復(fù),這個(gè)塊可以不用下盤。這樣可以減少下盤的數(shù)據(jù)量以及節(jié)約磁盤的存儲(chǔ)空間。重刪比C是統(tǒng)計(jì)過去一段時(shí)間內(nèi),緩存中分條重刪前和重刪后的數(shù)據(jù)量的比值。統(tǒng)計(jì)的分條范圍可以是緩存中所有分條;也可以是一部分分條,例如下盤后的數(shù)據(jù)屬于特定LUN的分條。重刪比C最小值為1(在重復(fù)數(shù)據(jù)刪除過程中,沒有數(shù)據(jù)塊因?yàn)橹貜?fù)被被刪除,或者不執(zhí)行重刪)。在分條下盤前對(duì)分條數(shù)據(jù)進(jìn)行重刪,可以節(jié)約磁盤空間。
對(duì)緩存中的各個(gè)分條而言,在被下盤前,除了進(jìn)行重復(fù)數(shù)據(jù)刪除,還可以對(duì)分條內(nèi)的有效數(shù)據(jù)進(jìn)行壓縮。壓縮可以在重復(fù)數(shù)據(jù)刪除操作之后執(zhí)行。壓縮比D是統(tǒng)計(jì)過去一段時(shí)間內(nèi),緩存中的分條壓縮前和壓縮后的數(shù)據(jù)量的比值。理論上,壓縮比D的最小值是1(執(zhí)行了壓縮操作,但是沒有數(shù)據(jù)被壓縮成功;或者沒有執(zhí)行壓縮操作)。在分條下盤前對(duì)分條數(shù)據(jù)進(jìn)行壓縮,可以節(jié)約磁盤空間。統(tǒng)計(jì)的分條范圍可以是緩存中所有分條;也可以是一部分分條,例如下盤后的數(shù)據(jù)屬于特定LUN的分條。
平均分條填充率I,是統(tǒng)計(jì)過去一段時(shí)間內(nèi),緩存中各分條有效數(shù)據(jù)占分條總長(zhǎng)度的比值的平均值。其中,計(jì)算平均分條填充率I時(shí),統(tǒng)計(jì)的有效數(shù)據(jù)可以是執(zhí)行完壓縮操作和重刪操作之后的有效數(shù)據(jù)。統(tǒng)計(jì)的分條范圍可以是緩存中所有分條;也可以是一部分分條,例如下盤后的數(shù)據(jù)屬于特定LUN的分條。
需要說明的是,本發(fā)明實(shí)施例描述了內(nèi)存和緩存這兩個(gè)概念。緩本發(fā)明實(shí)施例中的內(nèi)存(memory)例如是RAM,可以暫時(shí)存放CPU中的運(yùn)算數(shù)據(jù),為計(jì)算機(jī)運(yùn)行程序提供空間。存可以是內(nèi)存的一部分,也可以和內(nèi)存是在物理上分開。緩存(cache)在本發(fā)明實(shí)施例中可以用于暫時(shí)存放分條;緩存可以同樣是RAM,也可以是固態(tài)硬盤SSD等其他介質(zhì)。
22,獲取內(nèi)存中目標(biāo)分條大小S、所述目標(biāo)分條中有效數(shù)據(jù)大小W。
目標(biāo)分條大小S可以用目標(biāo)分條的長(zhǎng)度進(jìn)行描述,單位例如是字節(jié)(Byte)。也可以用單位長(zhǎng)度的數(shù)量描述,比如用目標(biāo)分條占用的緩存頁(cache page)的數(shù)量來描述。
類似的,目標(biāo)分條中有效數(shù)據(jù)大小W可以用目標(biāo)分條的長(zhǎng)度進(jìn)行描述,單位是字節(jié)(Byte);也可以用單位長(zhǎng)度的數(shù)量描述。目標(biāo)分條中有效數(shù)據(jù)大小W的描述方式和目標(biāo)分條大小S的描述方式保持一致。
按照公式N=(S*D*C-W)/I,獲取淘汰數(shù)據(jù)量N,按照N的取值范圍執(zhí)行下述操作中的一個(gè):
23,按照公式獲取淘汰數(shù)據(jù)量N。
其中,壓縮比C、重刪比D是可選的。如果沒有壓縮,則沒有壓縮比C;如果沒有重刪,則沒有重刪比D。
在首次對(duì)緩存中的的數(shù)據(jù)使用本實(shí)施例進(jìn)行處理時(shí),由于歷史上沒有分條被處理,因此可以缺省為D=1,C=1,I=1。
顯然,N的單位和S、W保持一致。當(dāng)S的單位是字節(jié)時(shí),N的單位也是字節(jié)。N的實(shí)際取值可以是下盤的最小單位的整數(shù)倍,并且與(S*D*C-W)/I的差值小于一個(gè)最小單位。例如下盤的最小單位是10字節(jié),(S*D*C-W)/I的計(jì)算結(jié)果是54字節(jié),那么一種可選方式是N的值是50字節(jié);另外一種可選方式是N的值是60字節(jié)。
當(dāng)S由緩存頁的數(shù)量描述時(shí),N也是緩存頁的數(shù)量。此時(shí),如果(S*D*C-W)/I的計(jì)算結(jié)果是小數(shù),N的實(shí)際取值可以是(S*D*C-W)/I進(jìn)行取整后的值,一種可選方式是向下取整例如(S*D*C-W)/I的計(jì)算結(jié)果是10.3個(gè)緩存頁,那么N的取值可以是10個(gè)緩存頁。在另外一種實(shí)施方式中,也可以是向上取整,10.3個(gè)緩存頁取整為11個(gè)緩存頁。
24,按照淘汰數(shù)據(jù)量N的值,執(zhí)行相應(yīng)的操作。
(1)在Tmin≤N≤Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條,然后把所述目標(biāo)分條的數(shù)據(jù)淘汰到持久化存儲(chǔ)介質(zhì)(SSD、硬盤等)。在把大小為N的數(shù)據(jù)寫入所述目標(biāo)分條后,目標(biāo)分條的當(dāng)前數(shù)據(jù)=大小為N的數(shù)據(jù)+目標(biāo)分條原有數(shù)據(jù)。
其中Tmin是預(yù)設(shè)的第一閾值,TmaX是預(yù)設(shè)的第二閾值。Tmin和Tmax。的單位和N一致。Tmin和Tmax在不同的場(chǎng)景下,可以需求的不同,可以有不同的設(shè)置,因此不做限定。例如Tmin的取值可以為分條長(zhǎng)度*C*D的10%,而Tmax的取值可以為分條長(zhǎng)度*C*D的80%。
(2)在N>Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條。和(1)的區(qū)別是,可以暫時(shí)不對(duì)目標(biāo)分條執(zhí)行下盤操作。在后續(xù)有新的數(shù)據(jù)被寫入這個(gè)分條,使得分條被寫滿后再把這個(gè)分條淘汰到持久化存儲(chǔ)介質(zhì)存儲(chǔ)介質(zhì)。
(3)在N<Tmin的情況下,把所述目標(biāo)分條的數(shù)據(jù)淘汰到持久化存儲(chǔ)介質(zhì)。和(1)的區(qū)別是,不把大小為N的數(shù)據(jù)的數(shù)據(jù)寫入目標(biāo)分條,直接對(duì)目標(biāo)分條進(jìn)行下盤。
需要說明的是,上述(1)和(2)都涉及把緩存的數(shù)據(jù)寫入目標(biāo)分條。這種寫操作邏輯上的,可以理解為把不屬于目標(biāo)分條的數(shù)據(jù)歸屬于目標(biāo)分條。寫操作執(zhí)行完以后,被寫的數(shù)據(jù)在物理上仍然位于緩存中。但是在邏輯層面,把大小為N的數(shù)據(jù)寫入目標(biāo)分條,是把位于緩存層的數(shù)據(jù)寫入了存儲(chǔ)池(storage pool)層。緩存層用于為主機(jī)提供讀寫,主要和主機(jī)進(jìn)行交互;而存儲(chǔ)池是用于暫存準(zhǔn)備寫入硬盤的數(shù)據(jù),主要和硬盤進(jìn)行交互,因此這是兩個(gè)不同的功能層。
為了方便理解,下面以一個(gè)具體的示例對(duì)上述實(shí)施例進(jìn)行介紹。
例如:從內(nèi)存中獲取:當(dāng)前的重刪率為2,當(dāng)前的壓縮率為4,當(dāng)前的統(tǒng)計(jì)的分條平均填充率I=0.9。緩存頁的大小為4KB,分條大小為8MB,即S=(8MB/4KB)=2K,當(dāng)前分條已經(jīng)寫入了15K個(gè)緩存頁,假設(shè)Tmin=128,Tmax=4K。
根據(jù)公式(S*D*C-W)/I=(2K*2*4-15K)/0.9≈1137.8。向下取整為N=1137。
符合第(2)種情形Tmin<N<Tmax。因此,按照本發(fā)明實(shí)施例,將1137個(gè)緩存頁的數(shù)據(jù)寫入當(dāng)前分條,然后把當(dāng)前分條中的所有數(shù)據(jù)發(fā)送到硬盤中去。發(fā)送完成后,釋放目標(biāo)分條在緩存中占用的存儲(chǔ)空間。在這個(gè)示例中,之所以使用緩存頁的數(shù)量作為S,是考慮到把緩存中的數(shù)據(jù)下發(fā)到硬盤中時(shí),以緩存頁作為粒度是一種常見的做法。在其他實(shí)施例中可以有其他方案,例如以分條大小除以緩存頁的倍數(shù)作為S。在另外的實(shí)施例中,可能沒有緩存頁的概念,以分條大小下盤的最小粒度或者最小粒度的整數(shù)倍即可?;蛘咧苯右苑謼l大小作為S,在算出來N的值以后,再換算成緩存頁的數(shù)量。
參見圖4,本發(fā)明還提供一種緩存數(shù)據(jù)處理裝置實(shí)施例。緩存數(shù)據(jù)處理裝置3是硬件或者程序虛擬裝置,可以執(zhí)行上述方法。緩存數(shù)據(jù)處理裝置3包括:參數(shù)獲取模塊,和參數(shù)獲取模塊連接的計(jì)算模塊32,和計(jì)算模塊32連接的數(shù)據(jù)處理模塊33。
所述參數(shù)獲取模塊,用于獲取數(shù)據(jù)的壓縮比D、重刪比C、以及平均分條填充率I,還用于獲取緩存中目標(biāo)分條大小S、所述目標(biāo)分條中有效數(shù)據(jù)大小W。
所述計(jì)算模塊32,用于按照公式獲取淘汰數(shù)據(jù)量N。
所述數(shù)據(jù)處理模塊33,用于根據(jù)N的取值執(zhí)行下述操作中的一個(gè):在Tmin≤N≤Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條,把所述目標(biāo)分條的數(shù)據(jù)淘汰給存儲(chǔ)介質(zhì),其中當(dāng)Tmin是預(yù)設(shè)的第一閾值,Tmax是預(yù)設(shè)的第二閾值;在N>Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條;在N<Tmin的情況下,把所述目標(biāo)分條的數(shù)據(jù)淘汰給所述存儲(chǔ)介質(zhì)。
下面對(duì)各模塊功能進(jìn)行具體介紹。
參數(shù)獲取模塊,用于從內(nèi)存中獲取數(shù)據(jù)的重刪比C,數(shù)據(jù)的壓縮比D、以及平均分條填充率I。
重刪比C、壓縮比D和平均分?jǐn)偺畛渎蔍都是對(duì)歷史數(shù)據(jù)的統(tǒng)計(jì)值。初始化的時(shí)候,都是1;但是隨著系統(tǒng)的運(yùn)行,由于不斷有新分條被重刪、壓縮、填充處理,這3個(gè)值會(huì)動(dòng)態(tài)變化的。這些數(shù)據(jù)被統(tǒng)計(jì)后可以存儲(chǔ)在內(nèi)存中,也可以存儲(chǔ)在其他介質(zhì)。
對(duì)緩存中的各個(gè)分條而言,在被下盤前,可以對(duì)分條內(nèi)的有效數(shù)據(jù)進(jìn)行重復(fù)數(shù)據(jù)刪除。對(duì)于分條中的每個(gè)塊,如果硬盤中已經(jīng)存在相同的塊,說明這個(gè)塊和硬盤現(xiàn)有的塊重復(fù),這個(gè)塊可以不用下盤。這樣可以減少下盤的數(shù)據(jù)量以及節(jié)約磁盤的存儲(chǔ)空間。重刪比C是統(tǒng)計(jì)過去一段時(shí)間內(nèi),緩存中分條重刪前和重刪后的數(shù)據(jù)量的比值。統(tǒng)計(jì)的分條范圍可以是緩存中所有分條;也可以是一部分分條,例如下盤后的數(shù)據(jù)屬于特定LUN的分條。重刪比C最小值為1(在重復(fù)數(shù)據(jù)刪除過程中,沒有數(shù)據(jù)塊因?yàn)橹貜?fù)被被刪除,或者不執(zhí)行重刪)。在分條下盤前對(duì)分條數(shù)據(jù)進(jìn)行重刪,可以節(jié)約磁盤空間。
對(duì)緩存中的各個(gè)分條而言,在被下盤前,除了進(jìn)行重復(fù)數(shù)據(jù)刪除,還可以對(duì)分條內(nèi)的有效數(shù)據(jù)進(jìn)行壓縮。壓縮可以在重復(fù)數(shù)據(jù)刪除操作之后執(zhí)行。壓縮比D是統(tǒng)計(jì)過去一段時(shí)間內(nèi),緩存中的分條壓縮前和壓縮后的數(shù)據(jù)量的比值。理論上,壓縮比D的最小值是1(執(zhí)行了壓縮操作,但是沒有數(shù)據(jù)被壓縮成功;或者沒有執(zhí)行壓縮操作)。在分條下盤前對(duì)分條數(shù)據(jù)進(jìn)行壓縮,可以節(jié)約磁盤空間。統(tǒng)計(jì)的分條范圍可以是緩存中所有分條;也可以是一部分分條,例如下盤后的數(shù)據(jù)屬于特定LUN的分條。
平均分條填充率I,是統(tǒng)計(jì)過去一段時(shí)間內(nèi),緩存中各分條有效數(shù)據(jù)占分條總長(zhǎng)度的比值的平均值。其中,計(jì)算平均分條填充率I時(shí),統(tǒng)計(jì)的有效數(shù)據(jù)可以是執(zhí)行完壓縮操作和重刪操作之后的有效數(shù)據(jù)。統(tǒng)計(jì)的分條范圍可以是緩存中所有分條;也可以是一部分分條,例如下盤后的數(shù)據(jù)屬于特定LUN的分條。
需要說明的是,本發(fā)明實(shí)施例描述了內(nèi)存和緩存這兩個(gè)概念。緩本發(fā)明實(shí)施例中的內(nèi)存(memory)例如是RAM,可以暫時(shí)存放CPU中的運(yùn)算數(shù)據(jù),為計(jì)算機(jī)運(yùn)行程序提供空間。存可以是內(nèi)存的一部分,也可以和內(nèi)存是在物理上分開。緩存(cache)在本發(fā)明實(shí)施例中可以用于暫時(shí)存放分條;緩存可以同樣是RAM,也可以是固態(tài)硬盤SSD等其他介質(zhì)。
參數(shù)獲取模塊,用于獲取內(nèi)存中目標(biāo)分條大小S、所述目標(biāo)分條中有效數(shù)據(jù)大小W。
目標(biāo)分條大小S可以用目標(biāo)分條的長(zhǎng)度進(jìn)行描述,單位例如是字節(jié)(Byte)。也可以用單位長(zhǎng)度的數(shù)量描述,比如用目標(biāo)分條占用的緩存頁(cache page)的數(shù)量來描述。
類似的,目標(biāo)分條中有效數(shù)據(jù)大小W可以用目標(biāo)分條的長(zhǎng)度進(jìn)行描述,單位是字節(jié)(Byte);也可以用單位長(zhǎng)度的數(shù)量描述。目標(biāo)分條中有效數(shù)據(jù)大小W的描述方式和目標(biāo)分條大小S的描述方式保持一致。
按照公式N=(S*D*C-W)/I,獲取淘汰數(shù)據(jù)量N,按照N的取值范圍執(zhí)行下述操作中的一個(gè):
計(jì)算模塊32,用于按照公式獲取淘汰數(shù)據(jù)量N。
其中,壓縮比C、重刪比D是可選的。如果沒有壓縮,則沒有壓縮比C;如果沒有重刪,則沒有重刪比D。
在首次對(duì)緩存中的的數(shù)據(jù)使用本實(shí)施例進(jìn)行處理時(shí),由于歷史上沒有分條被處理,因此可以缺省為D=1,C=1,I=1。
顯然,N的單位和S、W保持一致。當(dāng)S的單位是字節(jié)時(shí),N的單位也是字節(jié)。N的實(shí)際取值可以是下盤的最小單位的整數(shù)倍,并且與
(S*D*C-W)/I的差值小于一個(gè)最小單位。例如下盤的最小單位是10字節(jié),(S*D*C-W)/I的計(jì)算結(jié)果是54字節(jié),那么一種可選方式是N的值是50字節(jié);另外一種可選方式是N的值是60字節(jié)。
當(dāng)S由緩存頁的數(shù)量描述時(shí),N也是緩存頁的數(shù)量。此時(shí),如果(S*D*C-W)/I的計(jì)算結(jié)果是小數(shù),N的實(shí)際取值可以是(S*D*C-W)/I進(jìn)行取整后的值,一種可選方式是向下取整例如(S*D*C-W)/I的計(jì)算結(jié)果是10.3個(gè)緩存頁,那么N的取值可以是10個(gè)緩存頁。在另外一種實(shí)施方式中,也可以是向上取整,10.3個(gè)緩存頁取整為11個(gè)緩存頁。
34,按照淘汰數(shù)據(jù)量N的值,執(zhí)行相應(yīng)的操作。
(1)在Tmin≤N≤TmaX的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條,然后把所述目標(biāo)分條的數(shù)據(jù)淘汰到持久化存儲(chǔ)介質(zhì)(SSD、硬盤等)。在把大小為N的數(shù)據(jù)寫入所述目標(biāo)分條后,目標(biāo)分條的當(dāng)前數(shù)據(jù)=大小為N的數(shù)據(jù)+目標(biāo)分條原有數(shù)據(jù)。
其中Tmin是預(yù)設(shè)的第一閾值,Tmax是預(yù)設(shè)的第二閾值。Tmin和Tmax。的單位和N一致。Tmin和Tmax在不同的場(chǎng)景下,可以需求的不同,可以有不同的設(shè)置,因此不做限定。例如Tmin的取值可以為分條長(zhǎng)度*C*D的10%,而Tmax的取值可以為分條長(zhǎng)度*C*D的80%。
(2)在N>Tmax的情況下,將大小為N的數(shù)據(jù)寫入所述目標(biāo)分條。和(1)的區(qū)別是,可以暫時(shí)不對(duì)目標(biāo)分條執(zhí)行下盤操作。在后續(xù)有新的數(shù)據(jù)被寫入這個(gè)分條,使得分條被寫滿后再把這個(gè)分條淘汰到持久化存儲(chǔ)介質(zhì)存儲(chǔ)介質(zhì)。
(3)在N<Tmin的情況下,把所述目標(biāo)分條的數(shù)據(jù)淘汰到持久化存儲(chǔ)介質(zhì)。和(1)的區(qū)別是,不把大小為N的數(shù)據(jù)的數(shù)據(jù)寫入目標(biāo)分條,直接對(duì)目標(biāo)分條進(jìn)行下盤。
需要說明的是,上述(1)和(2)都涉及把緩存的數(shù)據(jù)寫入分條。這種寫操作邏輯上的,把不屬于目標(biāo)分條的數(shù)據(jù)歸屬于目標(biāo)分條。寫操作執(zhí)行完以后,被寫的數(shù)據(jù)在物理上仍然位于緩存中。但是在邏輯層面,這是把緩存層的數(shù)據(jù)寫入了存儲(chǔ)池(storage pool)。緩存層用于為主機(jī)提供讀寫,主要和主機(jī)進(jìn)行交互;而存儲(chǔ)池是用于暫存準(zhǔn)備寫入硬盤的數(shù)據(jù),主要和硬盤進(jìn)行交互,因此這是兩個(gè)不同的功能層。步驟31、32和33是由緩存池層執(zhí)行的。
為了方便理解,下面以一個(gè)具體的示例對(duì)上述實(shí)施例進(jìn)行介紹。
例如:從內(nèi)存中獲?。寒?dāng)前的重刪率為2,當(dāng)前的壓縮率為4,當(dāng)前的統(tǒng)計(jì)的分條平均填充率I=0.9。緩存頁的大小為4KB,分條大小為8MB,即S=(8MB/4KB)=2K,當(dāng)前分條已經(jīng)寫入了15K個(gè)緩存頁,假設(shè)Tmin=128,Tmax=4K。
根據(jù)公式(S*D*C-W)/I=(2K*2*4-15K)/0.9≈1137.8。向下取整為N=1137。
符合第(2)種情形Tmin<N<Tmax。因此,按照本發(fā)明實(shí)施例,將1137個(gè)緩存頁的數(shù)據(jù)寫入當(dāng)前分條,然后把當(dāng)前分條中的所有數(shù)據(jù)發(fā)送到硬盤中去。發(fā)送完成后,釋放目標(biāo)分條在緩存中占用的存儲(chǔ)空間。在這個(gè)示例中,之所以使用緩存頁的數(shù)量作為S,是考慮到把緩存中的數(shù)據(jù)下發(fā)到硬盤中時(shí),以緩存頁作為粒度是一種常見的做法。在其他實(shí)施例中可以有其他方案,例如以分條大小除以緩存頁的倍數(shù)作為S。在另外的實(shí)施例中,可能沒有緩存頁的概念,以分條大小下盤的最小粒度或者最小粒度的整數(shù)倍即可?;蛘咧苯右苑謼l大小作為S,在算出來N的值以后,再換算成緩存頁的數(shù)量。
結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,基于本發(fā)明的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。