專利名稱:一種使用高速非易失介質(zhì)做緩存的管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及磁盤緩存管理技術(shù),具體來說,涉及將慢速磁盤的數(shù)據(jù)緩存在高速非易失介質(zhì)中的一種管理策略。
背景技術(shù):
磁盤緩存分為讀緩存和寫緩存。讀緩存是指,操作系統(tǒng)為已讀取的文件數(shù)據(jù),在內(nèi)存較空閑的情況下留在內(nèi)存空間中,當(dāng)下次軟件或用戶再次讀取同一文件時(shí)就不必重新從磁盤上讀取,從而提高速率。寫緩存實(shí)際上就是將要寫入磁盤的數(shù)據(jù)先保存于系統(tǒng)為寫緩存分配的內(nèi)存空間中,當(dāng)保存到內(nèi)存池中的數(shù)據(jù)達(dá)到一個(gè)程度時(shí),便將數(shù)據(jù)保存到硬盤中。 這樣可以減少實(shí)際的磁盤操作,有效的保護(hù)磁盤免于重復(fù)的讀寫操作而導(dǎo)致的損壞,也能減少寫入所需的時(shí)間。根據(jù)寫入方式的不同,有寫通式和回寫式兩種。寫通式在讀硬盤數(shù)據(jù)時(shí),系統(tǒng)先檢查請(qǐng)求指令,看看所要的數(shù)據(jù)是否在緩存中,在的話就由緩存送出響應(yīng)的數(shù)據(jù),這個(gè)過程稱為命中。這樣系統(tǒng)就不必訪問硬盤中的數(shù)據(jù),由于SDRAM的速率比磁介質(zhì)快很多,因此也就加快了數(shù)據(jù)傳輸?shù)乃俾省;貙懯骄褪窃趯懭胗脖P數(shù)據(jù)時(shí)也在緩存中找,找到就由緩存就數(shù)據(jù)寫入盤中,多數(shù)硬盤都是采用的回寫式緩存,這樣就大大提高了性能。然而,采用如內(nèi)存這樣的易失性設(shè)備,在系統(tǒng)崩潰或者掉電以后,緩存在高速設(shè)備上的數(shù)據(jù)將會(huì)丟失,這對(duì)類似于數(shù)據(jù)庫(kù)這樣的對(duì)數(shù)據(jù)安全性要求很高的應(yīng)用程序來說是不可忍受的。
發(fā)明內(nèi)容
本發(fā)明使用高速非易失介質(zhì)替代易失性高速設(shè)備來緩存慢速的磁盤數(shù)據(jù),即使在系統(tǒng)崩潰或者掉電的情況下,緩存的數(shù)據(jù)也不會(huì)丟失,通過約定的格式在重啟后可以將緩存的數(shù)據(jù)讀出。一種使用高速非易失介質(zhì)做緩存的管理方法,使用固態(tài)硬盤做為緩存設(shè)備,每個(gè)緩存設(shè)備可以被多個(gè)磁盤共享,每個(gè)磁盤只能使用一個(gè)緩存設(shè)備;所述緩存設(shè)備劃分 region結(jié)構(gòu),緩存設(shè)備與磁盤之間采用組映射相連;緩存設(shè)備劃分為兩部分,前面部分存儲(chǔ)內(nèi)存中的region數(shù)據(jù)結(jié)構(gòu),后面部分為緩存。優(yōu)選的,所述固態(tài)硬盤可以組成raid磁盤陣列擴(kuò)大緩存容量及提高性能。優(yōu)選的,所述region大小為64KB 1MB,且為2的冪,所述region在設(shè)備運(yùn)行后不能被更改。優(yōu)選的,所述緩存設(shè)備與磁盤之間采用組映射相連時(shí),默認(rèn)每組16個(gè)region,可以通過宏更改優(yōu)選的,所述緩存設(shè)備在讀操作時(shí),根據(jù)bio里記錄的地址信息找到對(duì)應(yīng)的 region數(shù)據(jù)結(jié)構(gòu),然后通過region數(shù)據(jù)結(jié)構(gòu)查看是否數(shù)據(jù)緩存在固態(tài)硬盤中,如果是,則直接從固態(tài)硬盤讀出;否則,從磁盤讀出并緩存到固態(tài)硬盤中。優(yōu)選的,所述緩存設(shè)備在寫操作時(shí),根據(jù)bio里記錄的地址信息找到對(duì)應(yīng)的region數(shù)據(jù)結(jié)構(gòu),如果有空閑的固態(tài)硬盤空間,則直接將數(shù)據(jù)寫往固態(tài)硬盤;否則,寫往傳統(tǒng)硬盤;如果寫往固態(tài)硬盤則同時(shí)更新對(duì)應(yīng)的region數(shù)據(jù)結(jié)構(gòu)元數(shù)據(jù)信息到固態(tài)硬盤。優(yōu)選的,所述緩存設(shè)備在系統(tǒng)崩潰后掉電的情況下,當(dāng)系統(tǒng)故障恢復(fù)后,會(huì)掃描存放在固態(tài)硬盤內(nèi)的元數(shù)據(jù)信息,并根據(jù)這些信息恢復(fù)之前的所有環(huán)境,獨(dú)處緩存在固態(tài)硬盤中的臟數(shù)據(jù)。本發(fā)明采取將元數(shù)據(jù)實(shí)時(shí)寫入固態(tài)硬盤的策略來解決這個(gè)問題,在臟數(shù)據(jù)寫進(jìn)固態(tài)硬盤的同時(shí),管理這些數(shù)據(jù)的元數(shù)據(jù)也被同步到固態(tài)硬盤的指定位置,只要重啟時(shí)讀出這些元數(shù)據(jù)即可將所有緩存在固態(tài)硬盤而沒有寫入傳統(tǒng)磁盤的數(shù)據(jù)讀出,從而所有的數(shù)據(jù)在系統(tǒng)崩潰和掉電的情況下也能保證不丟失。
圖1是本發(fā)明的整體結(jié)構(gòu)示意2是本發(fā)明的映射關(guān)系示意圖
具體實(shí)施例方式本發(fā)明利用Linux的Device Mapper機(jī)制來管理多個(gè)塊設(shè)備,以其中的高速設(shè)備作為低速設(shè)備的緩存來建立一個(gè)兩級(jí)存儲(chǔ)系統(tǒng),以較低的成本獲得較高的存儲(chǔ)性能,整體結(jié)構(gòu)如圖1所示。本發(fā)明將所管理的設(shè)備分為緩存設(shè)備和磁盤設(shè)備,其中緩存設(shè)備使用性能較高的固態(tài)硬盤,實(shí)際使用中可用多塊固態(tài)硬盤組成RAID以提高緩存的性能。緩存設(shè)備和磁盤設(shè)備都是對(duì)用戶不可見的,但是本發(fā)明會(huì)向用戶提供與磁盤設(shè)備個(gè)數(shù)相同、特性相同的偽設(shè)備。本發(fā)明可以管理多個(gè)緩存設(shè)備和磁盤設(shè)備,緩存設(shè)備與磁盤設(shè)備是一對(duì)多的關(guān)系,即一個(gè)緩存設(shè)備可以被多個(gè)磁盤設(shè)備共享,但是任何一個(gè)磁盤設(shè)備只可使用一個(gè)緩存設(shè)備。至于設(shè)備,具體則對(duì)應(yīng)于磁盤分區(qū),即Linux下的塊設(shè)備文件/dev/sdal等。之所以選擇固態(tài)硬盤而不是直接使用內(nèi)存等更高速的設(shè)備,是因?yàn)楣虘B(tài)硬盤上的數(shù)據(jù)在系統(tǒng)崩潰或掉電后不會(huì)丟失,而且固態(tài)硬盤的容量更大,可以緩存更多的數(shù)據(jù)。但是,雖然緩存的數(shù)據(jù)可以保存在固態(tài)硬盤中,但是對(duì)這些數(shù)據(jù)的管理元數(shù)據(jù)卻必須采取一定的措施才能獲得,否則雖然數(shù)據(jù)存在但是我們卻無法分析這些數(shù)據(jù)的真實(shí)含義。本發(fā)明對(duì)磁盤作緩存,本身的思路比較直觀,類似于處理器cache,將緩存設(shè)備按固定大小劃分為許多region,一般地,region的大小為64K 1M,且為2的冪,一旦運(yùn)行不可再動(dòng)態(tài)更改。region是緩存設(shè)備管理的基本單位,可類比處理器中的cache line。每個(gè) region維護(hù)相應(yīng)的狀態(tài)、必要的鎖、tag等信息。region相對(duì)于文件系統(tǒng)的請(qǐng)求是比較大的,文件系統(tǒng)10的最小單位一般是512字節(jié)(稱之為sector),因此文件系統(tǒng)的一次10更多可能是只覆蓋了某個(gè)region的部分區(qū)域,鑒于此,每個(gè)region還需要維護(hù)若干位圖,用來標(biāo)記其中各個(gè)sector的狀態(tài)。緩存設(shè)備與磁盤設(shè)備的映射采用組相聯(lián),默認(rèn)一組16個(gè) region,可對(duì)相關(guān)宏進(jìn)行調(diào)整。管理數(shù)據(jù)映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)(struct region)位于內(nèi)存中,而內(nèi)存是易失性設(shè)備,在系統(tǒng)崩潰或掉電后將會(huì)丟失這些數(shù)據(jù)結(jié)構(gòu)。雖然固態(tài)硬盤上的數(shù)據(jù)實(shí)際上并沒有丟失,但是因?yàn)楣芾磉@些數(shù)據(jù)的struct region丟失,所以實(shí)際上數(shù)據(jù)也就丟失了。為了解決這個(gè)問題,本發(fā)明采用如圖2所示的結(jié)構(gòu)。固態(tài)硬盤分為兩部分,前一部分保存內(nèi)存中的struct region數(shù)據(jù)結(jié)構(gòu),后一部分才是實(shí)際緩存的數(shù)據(jù)。這樣,當(dāng)系統(tǒng)崩潰或掉電后可以通過讀取存放在固態(tài)硬盤前一部分的struct region來找到存放在后一部分的數(shù)據(jù), 并重建整個(gè)文件系統(tǒng)環(huán)境,從而保證緩存的數(shù)據(jù)不丟失。實(shí)際應(yīng)用時(shí)不必將任何對(duì)struct region的修改都同步到固態(tài)硬盤,這樣開銷較大??梢詢H在數(shù)據(jù)發(fā)生改變時(shí)再修改struct region,特別是要記錄那些只緩存在固態(tài)硬盤而沒有在傳統(tǒng)磁盤的數(shù)據(jù)的變化情況。讀操作。根據(jù)bio里記錄的地址信息找到對(duì)應(yīng)的struct region,然后通過struct region查看是否數(shù)據(jù)緩存在固態(tài)硬盤中,如果是,則直接從固態(tài)硬盤讀出;否則,從磁盤讀出并緩存到固態(tài)硬盤中。寫操作。根據(jù)bio里記錄的地址信息找到對(duì)應(yīng)的struct region,如果有空閑的固態(tài)硬盤空間,則直接將數(shù)據(jù)寫往固態(tài)硬盤;否則,寫往傳統(tǒng)硬盤。如果寫往固態(tài)硬盤則同時(shí)更新對(duì)應(yīng)的struct region元數(shù)據(jù)信息到固態(tài)硬盤。恢復(fù)操作。在系統(tǒng)崩潰后掉電的情況下,當(dāng)系統(tǒng)故障恢復(fù)后,本發(fā)明會(huì)掃描存放在固態(tài)硬盤內(nèi)的元數(shù)據(jù)信息,并根據(jù)這些信息恢復(fù)之前的所有環(huán)境,此時(shí)緩存在固態(tài)硬盤中的臟數(shù)據(jù)都可以完整地讀出。
權(quán)利要求
1.一種使用高速非易失介質(zhì)做緩存的管理方法,其特征在于使用固態(tài)硬盤做為緩存設(shè)備,每個(gè)緩存設(shè)備可以被多個(gè)磁盤共享,每個(gè)磁盤只能使用一個(gè)緩存設(shè)備;所述緩存設(shè)備劃分region結(jié)構(gòu),緩存設(shè)備與磁盤之間采用組映射相連;緩存設(shè)備劃分為兩部分,前面部分存儲(chǔ)內(nèi)存中的region數(shù)據(jù)結(jié)構(gòu),后面部分為緩存。
2.如權(quán)利要求1所述的方法,其特征在于所述固態(tài)硬盤可以組成raid磁盤陣列擴(kuò)大緩存容量及提高性能。
3.如權(quán)利要求1所述的方法,其特征在于所述region大小為64KB 1MB,且為2的冪,所述region在設(shè)備運(yùn)行后不能被更改。
4.如權(quán)利要求1所述的方法,其特征在于所述緩存設(shè)備與磁盤之間采用組映射相連時(shí),默認(rèn)每組16個(gè)region,可以通過宏更改。
5.如權(quán)利要求1所述的方法,其特征在于所述緩存設(shè)備在讀操作時(shí),根據(jù)bio里記錄的地址信息找到對(duì)應(yīng)的region數(shù)據(jù)結(jié)構(gòu),然后通過region數(shù)據(jù)結(jié)構(gòu)查看是否數(shù)據(jù)緩存在固態(tài)硬盤中,如果是,則直接從固態(tài)硬盤讀出;否則,從磁盤讀出并緩存到固態(tài)硬盤中。
6.如權(quán)利要求1所述的方法,其特征在于所述緩存設(shè)備在寫操作時(shí),根據(jù)bio里記錄的地址信息找到對(duì)應(yīng)的region數(shù)據(jù)結(jié)構(gòu),如果有空閑的固態(tài)硬盤空間,則直接將數(shù)據(jù)寫往固態(tài)硬盤;否則,寫往傳統(tǒng)硬盤;如果寫往固態(tài)硬盤則同時(shí)更新對(duì)應(yīng)的region數(shù)據(jù)結(jié)構(gòu)元數(shù)據(jù)信息到固態(tài)硬盤。
7.如權(quán)利要求1所述的方法,其特征在于所述緩存設(shè)備在系統(tǒng)崩潰后掉電的情況下, 當(dāng)系統(tǒng)故障恢復(fù)后,會(huì)掃描存放在固態(tài)硬盤內(nèi)的元數(shù)據(jù)信息,并根據(jù)這些信息恢復(fù)之前的所有環(huán)境,獨(dú)處緩存在固態(tài)硬盤中的臟數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種使用高速非易失介質(zhì)做緩存的管理方法,使用固態(tài)硬盤做為緩存設(shè)備,每個(gè)緩存設(shè)備可以被多個(gè)磁盤共享,每個(gè)磁盤只能使用一個(gè)緩存設(shè)備;所述緩存設(shè)備劃分region結(jié)構(gòu),緩存設(shè)備與磁盤之間采用組映射相連;緩存設(shè)備劃分為兩部分,前面部分存儲(chǔ)內(nèi)存中的region數(shù)據(jù)結(jié)構(gòu),后面部分為緩存。本發(fā)明采取將元數(shù)據(jù)實(shí)時(shí)寫入固態(tài)硬盤的策略來解決這個(gè)問題,在臟數(shù)據(jù)寫進(jìn)固態(tài)硬盤的同時(shí),管理這些數(shù)據(jù)的元數(shù)據(jù)也被同步到固態(tài)硬盤的指定位置,只要重啟時(shí)讀出這些元數(shù)據(jù)即可將所有緩存在固態(tài)硬盤而沒有寫入傳統(tǒng)磁盤的數(shù)據(jù)讀出,從而所有的數(shù)據(jù)在系統(tǒng)崩潰和掉電的情況下也能保證不丟失。
文檔編號(hào)G06F12/08GK102521147SQ20111036431
公開日2012年6月27日 申請(qǐng)日期2011年11月17日 優(yōu)先權(quán)日2011年11月17日
發(fā)明者劉新春, 袁清波, 許建衛(wèi), 邵宗有 申請(qǐng)人:曙光信息產(chǎn)業(yè)(北京)有限公司