專利名稱:一種基于Region的磁盤外置cache管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及磁盤讀寫優(yōu)化領(lǐng)域,具體涉及一種通過外置高速緩存的方式提高磁盤 IO性能的方法。
背景技術(shù):
自從磁盤被IBM發(fā)明以來一直是電腦主要的存儲(chǔ)媒介之一,由一個(gè)或者多個(gè)鋁制 或者玻璃制的碟片組成,這些碟片外覆蓋有鐵磁性材料。絕大多數(shù)磁盤都是固定磁盤,被永 久性地密封固定在磁盤驅(qū)動(dòng)器中。機(jī)械磁盤以其大容量、低價(jià)格等優(yōu)勢(shì)一直在計(jì)算機(jī)系統(tǒng) 中占有一席之地,但是其內(nèi)部的機(jī)械部件卻限制了速度的進(jìn)一步提升,特別是對(duì)于不連續(xù) 的IO數(shù)據(jù)訪問,性能更是遠(yuǎn)遠(yuǎn)跟不上內(nèi)存的發(fā)展。所以,磁盤的訪問速度一直是IO密集型 應(yīng)用程序的瓶頸。為了提高磁盤的讀寫性能,磁盤廠商在磁盤內(nèi)部加入了緩存(Cache memory), Cache是硬盤控制器上的一塊內(nèi)存芯片,具有極快的存取速度,它是硬盤內(nèi)部存儲(chǔ)和外界接 口之間的緩沖器。由于硬盤的內(nèi)部數(shù)據(jù)傳輸速度和外界介面?zhèn)鬏斔俣炔煌彺嬖谄渲衅?到一個(gè)緩沖的作用。緩存的大小與速度是直接關(guān)系到硬盤的傳輸速度的重要因素,能夠大 幅度地提高硬盤整體性能。當(dāng)硬盤存取零碎數(shù)據(jù)時(shí)需要不斷地在硬盤與內(nèi)存之間交換數(shù) 據(jù),有大緩存,則可以將那些零碎數(shù)據(jù)暫存在緩存中,減小外系統(tǒng)的負(fù)荷,也提高了數(shù)據(jù)的 傳輸速度。硬盤的緩存主要起三種作用一是預(yù)讀取。當(dāng)硬盤受到CPU指令控制開始讀取 數(shù)據(jù)時(shí),硬盤上的控制芯片會(huì)控制磁頭把正在讀取的簇的下一個(gè)或者幾個(gè)簇中的數(shù)據(jù)讀到 緩存中(由于硬盤上數(shù)據(jù)存儲(chǔ)時(shí)是比較連續(xù)的,所以讀取命中率較高),當(dāng)需要讀取下一個(gè) 或者幾個(gè)簇中的數(shù)據(jù)的時(shí)候,硬盤則不需要再次讀取數(shù)據(jù),直接把緩存中的數(shù)據(jù)傳輸?shù)絻?nèi) 存中就可以了,由于緩存的速度遠(yuǎn)遠(yuǎn)高于磁頭讀寫的速度,所以能夠達(dá)到明顯改善性能的 目的;二是對(duì)寫入動(dòng)作進(jìn)行緩存。當(dāng)硬盤接到寫入數(shù)據(jù)的指令之后,并不會(huì)馬上將數(shù)據(jù)寫入 到盤片上,而是先暫時(shí)存儲(chǔ)在緩存里,然后發(fā)送一個(gè)“數(shù)據(jù)已寫入”的信號(hào)給系統(tǒng),這時(shí)系統(tǒng) 就會(huì)認(rèn)為數(shù)據(jù)已經(jīng)寫入,并繼續(xù)執(zhí)行下面的工作,而硬盤則在空閑(不進(jìn)行讀取或?qū)懭氲?時(shí)候)時(shí)再將緩存中的數(shù)據(jù)寫入到盤片上。雖然對(duì)于寫入數(shù)據(jù)的性能有一定提升,但也不 可避免地帶來了安全隱患——如果數(shù)據(jù)還在緩存里的時(shí)候突然掉電,那么這些數(shù)據(jù)就會(huì)丟 失。對(duì)于這個(gè)問題,硬盤廠商們自然也有解決辦法掉電時(shí),磁頭會(huì)借助慣性將緩存中的數(shù) 據(jù)寫入零磁道以外的暫存區(qū)域,等到下次啟動(dòng)時(shí)再將這些數(shù)據(jù)寫入目的地;第三個(gè)作用就 是臨時(shí)存儲(chǔ)最近訪問過的數(shù)據(jù)。有時(shí)候,某些數(shù)據(jù)是會(huì)經(jīng)常需要訪問的,硬盤內(nèi)部的緩存會(huì) 將讀取比較頻繁的一些數(shù)據(jù)存儲(chǔ)在緩存中,再次讀取時(shí)就可以直接從緩存中直接傳輸。緩存容量的大小不同品牌、不同型號(hào)的產(chǎn)品各不相同,早期的硬盤緩存基本都很 小,只有幾百KB,已無法滿足用戶的需求。2MB和8MB緩存是現(xiàn)今主流硬盤所采用,而在服 務(wù)器或特殊應(yīng)用領(lǐng)域中還有緩存容量更大的產(chǎn)品,甚至達(dá)到了 16MB、64MB等。大容量的緩 存雖然可以在硬盤進(jìn)行讀寫工作狀態(tài)下,讓更多的數(shù)據(jù)存儲(chǔ)在緩存中,以提高硬盤的訪問 速度,但并不意味著緩存越大就越出眾。緩存的應(yīng)用存在一個(gè)算法的問題,即便緩存容量很3大,而沒有一個(gè)高效率的算法,那將導(dǎo)致應(yīng)用中緩存數(shù)據(jù)的命中率偏低,無法有效發(fā)揮出大 容量緩存的優(yōu)勢(shì)。算法是和緩存容量相輔相成,大容量的緩存需要更為有效率的算法,否則 性能會(huì)大大折扣,從技術(shù)角度上說,高容量緩存的算法是直接影響到硬盤性能發(fā)揮的重要 因素,更大容量緩存是未來硬盤發(fā)展的必然趨勢(shì)。受限于磁盤的硬件結(jié)構(gòu),其上的緩存容量不可能特別大,所以如果將磁盤Cache 從磁盤內(nèi)部移動(dòng)到外部將很容易解決容量的問題。因?yàn)椴皇芸臻g的限制,外置磁盤Cache 可以達(dá)到幾個(gè)GB,甚至幾十GB的大小,使用如此大容量的緩存將會(huì)大大提高整個(gè)系統(tǒng)的IO 性能。但是,如何管理外置磁盤Cache與磁盤之間的數(shù)據(jù)交換是一個(gè)必須解決的問題。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提出一種基于Region的外置磁盤Cache管理策略。一種基于Region的磁盤外置cache管理方法,將外置緩存設(shè)備按固定大小劃分為 若干Region,每個(gè)Region維護(hù)相應(yīng)的狀態(tài)、鎖、tag和若干位圖;其中,讀操作流程為A、若用戶不允許使用緩存,則直接重定向至磁盤設(shè)備,讀完直接返回;B、若用戶允許緩存,則要么從緩存設(shè)備讀數(shù)據(jù),要么從磁盤設(shè)備讀數(shù)據(jù)并將數(shù)據(jù) 緩存到磁盤外置Cache ;C、若用戶另外設(shè)置了預(yù)取命令,則除了重定向至磁盤讀取用戶需要的數(shù)據(jù)外,還 要嘗試預(yù)取整個(gè)Region,首先通過當(dāng)前數(shù)據(jù)包含的最后一個(gè)塊在Region中的位置,確定要 緩存當(dāng)前Region,還是相鄰的下一個(gè)Region ;若數(shù)據(jù)在Region比較靠前的位置,則預(yù)取本 Region,若數(shù)據(jù)在Region比較靠后的位置,則預(yù)取緊鄰的下一個(gè)Region ;寫操作的流程為D、若用戶不允許使用緩存,則直接重定向至磁盤設(shè)備;E、若用戶僅允許對(duì)讀操作進(jìn)行緩存,此時(shí)對(duì)應(yīng)的Region中可能存在讀緩存的數(shù) 據(jù),需要將其無效掉,設(shè)置狀態(tài)為INVAL,然后重定向至磁盤設(shè)備;F、若用戶允許對(duì)寫操作進(jìn)行緩存,但是此操作的方式為write through方式,則直 接將數(shù)據(jù)寫至磁盤;G、若用戶允許對(duì)寫操作進(jìn)行緩存,且操作方式不是write through,則分配一個(gè)空 閑Region塊,并將數(shù)據(jù)寫入磁盤外置Cache,同時(shí)Region的狀態(tài)變?yōu)镈IRTY。本發(fā)明的一種優(yōu)選技術(shù)方案在于多數(shù)情況下,寫操作都是無條件地將Itegion狀態(tài) 改為DIRTY,并開始寫入磁盤外置Cache的相應(yīng)空間,并且在結(jié)束的時(shí)候不需要改變狀態(tài)。本發(fā)明的另一優(yōu)選技術(shù)方案在于磁盤地址空間與cache地址空間采用組相連映 射。本發(fā)明在用戶與外置Cache直接傳送的是一個(gè)個(gè)的bI0,而在外置Cache與磁盤之 間除了可以以bIO為單位傳送外,還可以直接傳送整個(gè)Region,由于整個(gè)Region在物理磁 盤是連續(xù)的,可以極大提高10效率。
圖1基于Region的外置磁盤Cache管理的體系結(jié)構(gòu)
圖2磁盤地址與Cache地址映射關(guān)系圖3地址變換過程
具體實(shí)施例方式本發(fā)明將緩存設(shè)備按固定大小劃分為許多Region,一般地,Region的大小為64K 到1M,且為2的冪次方,在系統(tǒng)運(yùn)行前確定,一旦運(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)IO的最小單位 一般是512字節(jié)(稱之為sector),因此文件系統(tǒng)的一次10操作更多可能是只覆蓋了某個(gè) Region的部分區(qū)域,鑒于此,每個(gè)Region還需要維護(hù)若干位圖,用來標(biāo)記其中各個(gè)sector 的狀態(tài)。基于Region的外置磁盤Cache管理的體系結(jié)構(gòu)如圖1所示,用戶向操作系統(tǒng)發(fā)出 的讀寫請(qǐng)求最終轉(zhuǎn)化為一個(gè)一個(gè)的bIO被外置磁盤Cache管理模塊捕獲,每一個(gè)bIO都是 一段連續(xù)的磁盤空間數(shù)據(jù),在沒有外置Cache時(shí),這些請(qǐng)求直接從磁盤空間讀入;在加入磁 盤Cache層后,需要首先檢查是否在此處有備份,為了方便管理,整個(gè)模塊以多個(gè)bIO組織 成一個(gè)Region的形式管理。在實(shí)現(xiàn)過程中,可以通過操作系統(tǒng)的Device Mapper技術(shù)將高速的存儲(chǔ)設(shè)備作為 磁盤的Cache,邏輯上所有高速存儲(chǔ)設(shè)備和磁盤都被劃分為若干個(gè)Region,因?yàn)楦咚俅鎯?chǔ) 設(shè)備的容量要小于磁盤,所以作為Cache的高速存儲(chǔ)設(shè)備只能存一部分的磁盤Region。用 戶發(fā)出的10請(qǐng)求僅包含磁盤塊的地址信息,為了使用磁盤外置Cache必須找到一種合適 的地址映射方式,它應(yīng)該可以快速地從用戶提供的磁盤地址信息迅速找到對(duì)應(yīng)的磁盤外置 Cache地址,本發(fā)明的地址映射方法如圖2所示。磁盤的地址空間數(shù)倍于外置Cache的地址空間,兩者之間采用組相連的方式一一 映射,每組包含16個(gè)Region,磁盤中的一個(gè)組唯一地對(duì)應(yīng)于磁盤外置Cache的一個(gè)組,但 是組內(nèi)不是一一對(duì)應(yīng)的關(guān)系,任何一個(gè)磁盤組內(nèi)的Region可以對(duì)應(yīng)于相應(yīng)組的任何一個(gè) Region,這樣既可以快速地找到對(duì)應(yīng)的地址,也減少了地址沖突,充分利用了所有的磁盤 Cache.圖中區(qū)0和區(qū)1都分別對(duì)應(yīng)于整個(gè)磁盤外置Cache,區(qū)的個(gè)數(shù)是磁盤地址空間的大 小與Cache地址空間的大小的商。這樣,給出一個(gè)磁盤塊地址,其對(duì)應(yīng)的磁盤外置Cache塊 的地址的求解方式如圖3所示。磁盤地址的組織方式是區(qū)號(hào)、組號(hào)、組內(nèi)Region號(hào)和塊號(hào), 而磁盤外置Cache地址的組織方式是組號(hào)、組內(nèi)Region號(hào)和塊號(hào)。通過磁盤的組號(hào)可以 查看之前保存的塊表,里面含有已經(jīng)建立映射的兩種地址的對(duì)應(yīng)信息區(qū)號(hào)和組內(nèi)Region 號(hào),如果查表得到的這兩者的信息與已知的磁盤地址的兩者的信息一致,那么即表示地址 命中,可以查表得到其對(duì)應(yīng)的Cache地址的組內(nèi)Region號(hào)。此時(shí),磁盤地址的組號(hào)、Cache 組內(nèi)Region號(hào)和磁盤地址的塊號(hào)組成了磁盤外置Cache的完整地址信息。在定位好磁盤外置Cache的位置信息后,即可以對(duì)數(shù)據(jù)進(jìn)行讀取操作,其中讀操 作的詳細(xì)流程為1)如果用戶不允許使用緩存,那么直接重定向至磁盤設(shè)備,讀完直接返回即可,不 需要做進(jìn)一步的動(dòng)作;2)如果用戶允許緩存,那么這時(shí)要么從緩存設(shè)備讀數(shù)據(jù),要么從磁盤設(shè)備讀數(shù)據(jù) 并將數(shù)據(jù)緩存到磁盤外置Cache ;
3)如果用戶另外設(shè)置了預(yù)取命令,那么除了重定向至磁盤讀取用戶需要的數(shù)據(jù) 外,還要嘗試預(yù)取整個(gè)Region,首先通過當(dāng)前數(shù)據(jù)包含的最后一個(gè)塊在Region中的位置, 確定要緩存當(dāng)前Region,還是相鄰的下一個(gè)Region。如果數(shù)據(jù)在Region比較靠前的位置, 那么預(yù)取本Region是合適的,因?yàn)榻酉聛砜赡芫托枰綬egion后面的數(shù)據(jù);但是,如果數(shù) 據(jù)在Region比較靠后的位置,那么預(yù)取緊鄰的下一個(gè)Region則是比較合適的選擇。大多數(shù)情況下,寫操作都是無條件地將Region狀態(tài)改為DIRTY,并開始寫入磁盤 外置Cache的相應(yīng)空間,并且在結(jié)束的時(shí)候不需要改變狀態(tài),其操作過程為1)如果用戶不允許使用緩存,那么直接重定向至磁盤設(shè)備;2)如果用戶僅允許對(duì)讀操作進(jìn)行緩存,此時(shí)對(duì)應(yīng)的Region中可能存在讀緩存的 數(shù)據(jù),需要將其無效掉,設(shè)置狀態(tài)為INVAL,然后重定向至磁盤設(shè)備;3)如果用戶允許對(duì)寫操作進(jìn)行緩存,但是此操作的方式為write through方式, 那么直接將數(shù)據(jù)寫至磁盤;4)如果用戶允許對(duì)寫操作進(jìn)行緩存,且操作方式不是write through,那么,分配 一個(gè)空閑Region塊,并將數(shù)據(jù)寫入磁盤外置Cache,同時(shí)Region的狀態(tài)變?yōu)镈IRTY。
權(quán)利要求
1.一種基于Region的磁盤外置cache管理方法,其特征在于將外置緩存設(shè)備按固定 大小劃分為若干Region,每個(gè)Region維護(hù)相應(yīng)的狀態(tài)、鎖、tag和若干位圖;其中,讀操作流程為A、若用戶不允許使用緩存,則直接重定向至磁盤設(shè)備,讀完直接返回;B、若用戶允許緩存,則要么從緩存設(shè)備讀數(shù)據(jù),要么從磁盤設(shè)備讀數(shù)據(jù)并將數(shù)據(jù)緩存 到磁盤外置Cache ;C、若用戶另外設(shè)置了預(yù)取命令,則除了重定向至磁盤讀取用戶需要的數(shù)據(jù)外,還要嘗 試預(yù)取整個(gè)Region,首先通過當(dāng)前數(shù)據(jù)包含的最后一個(gè)塊在Region中的位置,確定要緩 存當(dāng)前Region,還是相鄰的下一個(gè)Region ;若數(shù)據(jù)在Region比較靠前的位置,則預(yù)取本 Region,若數(shù)據(jù)在Region比較靠后的位置,則預(yù)取緊鄰的下一個(gè)Region ;寫操作的流程為D、若用戶不允許使用緩存,則直接重定向至磁盤設(shè)備;E、若用戶僅允許對(duì)讀操作進(jìn)行緩存,此時(shí)對(duì)應(yīng)的Region中可能存在讀緩存的數(shù)據(jù),需 要將其無效掉,設(shè)置狀態(tài)為INVAL,然后重定向至磁盤設(shè)備;F、若用戶允許對(duì)寫操作進(jìn)行緩存,但是此操作的方式為writethrough方式,則直接將 數(shù)據(jù)寫至磁盤;G、若用戶允許對(duì)寫操作進(jìn)行緩存,且操作方式不是writethrough,則分配一個(gè)空閑 Region塊,并將數(shù)據(jù)寫入磁盤外置Cache,同時(shí)Region的狀態(tài)變?yōu)镈IRTY。
2.如權(quán)利要求1所述一種基于Region的磁盤外置cache管理方法,其特征在于多數(shù) 情況下,寫操作都是無條件地將Region狀態(tài)改為DIRTY,并開始寫入磁盤外置Cache的相應(yīng) 空間,并且在結(jié)束的時(shí)候不需要改變狀態(tài)。
3.如權(quán)利要求1所述一種基于Region的磁盤外置cache管理方法,其特征在于磁盤 地址空間與cache地址空間采用組相連映射。
全文摘要
本發(fā)明提供了一種基于Region的磁盤外置cache管理方法,將外置緩存設(shè)備按固定大小劃分為若干Region,每個(gè)Region維護(hù)相應(yīng)的狀態(tài)、鎖、tag和若干位圖;包括讀操作和寫操作。本發(fā)明在用戶與外置Cache直接傳送的是一個(gè)個(gè)的bio,而在外置Cache與磁盤之間除了可以以bio為單位傳送外,還可以直接傳送整個(gè)Region,由于整個(gè)Region在物理磁盤是連續(xù)的,可以極大提高IO效率。
文檔編號(hào)G06F3/06GK102043593SQ20101059856
公開日2011年5月4日 申請(qǐng)日期2010年12月17日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者楊杰, 袁清波, 邵宗有 申請(qǐng)人:天津曙光計(jì)算機(jī)產(chǎn)業(yè)有限公司