亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

磁盤陣列緩存的管理方法

文檔序號:6630539閱讀:412來源:國知局
專利名稱:磁盤陣列緩存的管理方法
技術(shù)領(lǐng)域
本發(fā)明涉及存儲管理技術(shù),尤指針對讀請求和寫請求的磁盤陣列緩存的管理方法。
背景技術(shù)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和計算機的普及應(yīng)用,數(shù)據(jù)存儲量日益增多,人們對存儲系統(tǒng)的要求越來越高,這種要求尤其體現(xiàn)在關(guān)鍵事務(wù)的存儲應(yīng)用上。廉價冗余磁盤(RAID,Redundant Array of Independent Disks)采用分條和冗余的方法提高了存儲系統(tǒng)的容量、速度和可靠性,已成為高性能數(shù)據(jù)存儲的首選結(jié)構(gòu)。
RAID系統(tǒng)通常包括控制器、磁盤陣列緩存和由多個磁盤構(gòu)成的下一級存儲器。所述磁盤陣列緩存用來臨時存放主機訪問的數(shù)據(jù)塊,使主機對RAID系統(tǒng)的數(shù)據(jù)訪問大多數(shù)通過緩存進行,以提高主機對RAID系統(tǒng)的數(shù)據(jù)訪問速度。緩存的容量遠比磁盤的容量小,一般不超過磁盤容量的1%,故緩存中保存的數(shù)據(jù)是磁盤中數(shù)據(jù)內(nèi)容的子集。
為了使主機的數(shù)據(jù)訪問具有高緩存命中率,即主機在緩存中就能查找到待訪問數(shù)據(jù)塊,必須使用一定算法來更新緩存中的數(shù)據(jù)內(nèi)容。上述更新數(shù)據(jù)的算法根據(jù)數(shù)據(jù)訪問的局部性原理進行設(shè)置,局部性原理包括兩個方面其一、空間局部性,即如果一個數(shù)據(jù)塊被訪問到,與該數(shù)據(jù)塊位于同一分條的數(shù)據(jù)塊可能很快被訪問到?,F(xiàn)有技術(shù)中,這種空間局部性通過磁盤預(yù)取算法體現(xiàn)。其二、時間局部性,即如果一個數(shù)據(jù)塊被訪問到,該數(shù)據(jù)塊很可能會被再次訪問,所以在淘汰緩存中的數(shù)據(jù)塊時可以采用最近最少使用(LRU,Least Recently Used)算法或類似算法,盡可能地將未來最長時間內(nèi)不會被主機訪問到的數(shù)據(jù)塊清除,以提高整個RAID系統(tǒng)的性能。
主機對RAID系統(tǒng)的訪問包括讀數(shù)據(jù)塊操作和寫數(shù)據(jù)塊操作。在現(xiàn)有的緩存管理方法中,主機讀請求的處理流程如圖1,包括以下步驟步驟101、主機讀請求到達RAID系統(tǒng)后,判斷緩存中是否存在讀請求數(shù)據(jù)塊,如果存在則執(zhí)行步驟102,否則執(zhí)行步驟103。
所述讀請求數(shù)據(jù)塊是指主機的讀請求指令要求獲得的數(shù)據(jù)塊。
步驟102、從緩存中取出讀請求數(shù)據(jù)塊返回給主機,并修改該數(shù)據(jù)塊的訪問記錄,本次讀數(shù)據(jù)塊操作完成。
步驟103、啟動磁盤讀操作,從磁盤取出讀請求數(shù)據(jù)塊返回給主機。
步驟104、判斷緩存中是否存在空閑區(qū)域,如果存在則執(zhí)行步驟107,否則執(zhí)行步驟105。
步驟105、根據(jù)LRU算法選擇緩存中的數(shù)據(jù)塊進行淘汰,并判斷待淘汰數(shù)據(jù)塊的類型,如果待淘汰數(shù)據(jù)塊為讀數(shù)據(jù)塊則執(zhí)行步驟107;如果待淘汰數(shù)據(jù)塊為寫數(shù)據(jù)塊,則執(zhí)行步驟106。
所述讀數(shù)據(jù)塊是指根據(jù)主機讀請求從磁盤中取出,被保存在緩存中的數(shù)據(jù)塊。所述寫數(shù)據(jù)塊是指根據(jù)主機寫請求從主機或RAID系統(tǒng)外部發(fā)送過來,被保存在緩存中的數(shù)據(jù)塊。
步驟106、啟動磁盤寫操作,將待淘汰數(shù)據(jù)塊寫入磁盤。
所述磁盤寫操作包括從磁盤中讀取同分條內(nèi)的其它數(shù)據(jù)塊,進行該分條數(shù)據(jù)的冗余計算以及多個數(shù)據(jù)塊的寫入等。
步驟107、RAID系統(tǒng)在緩存中保存步驟101所述的讀請求數(shù)據(jù)塊,并根據(jù)預(yù)取策略判斷磁盤中是否還有后續(xù)數(shù)據(jù)塊需要讀取,如果是則執(zhí)行步驟108,否則本次讀數(shù)據(jù)塊操作完成。
在磁盤中,數(shù)據(jù)信息按照分條單元進行保存,多個分條單元構(gòu)成一個分條,故所述同分條數(shù)據(jù)塊是指位于同一個分條內(nèi)的數(shù)據(jù)塊。
步驟108、啟動磁盤讀操作從磁盤獲取步驟107所述的由預(yù)取策略確定的后續(xù)數(shù)據(jù)塊,并返回執(zhí)行步驟104。
現(xiàn)有技術(shù)中,主機對RAID系統(tǒng)的寫操作可以采用兩種方式實現(xiàn),分別是直寫方式(write through)和回寫方式(write back)。
直寫方式是指根據(jù)主機寫請求將數(shù)據(jù)塊寫到磁盤時,也將該數(shù)據(jù)塊寫入緩存。只有在主機將數(shù)據(jù)塊寫到磁盤后,直寫方式的主機寫操作才結(jié)束。采用直寫方式時,主機寫請求的處理流程如圖2所示,包括以下步驟步驟201、主機寫請求到達時,判斷緩存中是否存在寫請求數(shù)據(jù)塊,如果存在則執(zhí)行步驟204,否則執(zhí)行步驟202。
步驟202、判斷緩存中是否存在空閑區(qū)域,如果有則執(zhí)行步驟204,如果沒有則執(zhí)行步驟203。
步驟203、根據(jù)LRU算法選擇緩存中的數(shù)據(jù)塊進行淘汰。
步驟204、在緩存中保存寫請求數(shù)據(jù)塊,并啟動磁盤寫操作將寫請求數(shù)據(jù)塊寫入磁盤,本次寫數(shù)據(jù)塊操作完成。
該步驟中,所述寫請求數(shù)據(jù)塊保存在步驟202所述空閑區(qū)域中,或者保存在根據(jù)LRU算法選中淘汰的數(shù)據(jù)塊中,覆蓋數(shù)據(jù)塊中原先保存的內(nèi)容。
如果統(tǒng)一采用直寫方式,每個寫請求數(shù)據(jù)塊在寫入緩存的同時也寫入磁盤,故淘汰數(shù)據(jù)塊時,讀數(shù)據(jù)塊和寫數(shù)據(jù)塊都可以簡單地丟棄。但是直寫方式時主機寫操作的平均服務(wù)時間較長,故這種方式不常采用。
回寫方式是指根據(jù)主機寫請求將數(shù)據(jù)塊寫到磁盤陣列緩存后,主機寫操作就結(jié)束。數(shù)據(jù)塊由緩存寫到磁盤的過程由磁盤來完成,不包含在主機寫操作過程中。采用回寫方式時,主機寫請求的處理流程如圖3所示,包括以下步驟步驟301、主機寫請求到達時,判斷緩存中是否存在寫請求數(shù)據(jù)塊,如果存在則執(zhí)行步驟305,否則執(zhí)行步驟302。
步驟302、判斷緩存中是否存在空閑區(qū)域,如果有則執(zhí)行步驟305,如果沒有則執(zhí)行步驟303。
步驟303、根據(jù)LRU算法選擇緩存中的數(shù)據(jù)塊進行淘汰,并判斷待淘汰數(shù)據(jù)塊的類型,如果待淘汰數(shù)據(jù)塊為讀數(shù)據(jù)塊則執(zhí)行步驟305;如果待淘汰數(shù)據(jù)塊為寫數(shù)據(jù)塊,則執(zhí)行步驟304。
步驟304、啟動磁盤寫操作,將待淘汰數(shù)據(jù)塊寫入磁盤。
步驟305、在緩存中保存寫請求數(shù)據(jù)塊,本次寫數(shù)據(jù)塊操作完成。
從圖2和圖3的說明看出,采用直寫方式完成主機寫請求的平均服務(wù)時間遠大于回寫方式,所以主機寫操作通常采用回寫方式來實現(xiàn)。
在上述主機讀/寫操作中,磁盤陣列緩存中有兩種類型的主機訪問數(shù)據(jù)塊,分別是讀數(shù)據(jù)塊和寫數(shù)據(jù)塊。其中,讀數(shù)據(jù)塊是經(jīng)過主機讀操作保存在緩存中的數(shù)據(jù),寫數(shù)據(jù)塊是經(jīng)過主機寫操作保存在緩存中的數(shù)據(jù)。當緩存中存滿數(shù)據(jù)需要對數(shù)據(jù)塊進行淘汰時,通常使用LRU算法不加區(qū)分地從讀數(shù)據(jù)塊和寫數(shù)據(jù)塊中選出待淘汰數(shù)據(jù)塊,這種方法存在以下缺點(一)如果待淘汰數(shù)據(jù)塊是讀數(shù)據(jù)塊,則可以直接丟棄。但是,如果待淘汰數(shù)據(jù)塊是還未寫入磁盤的寫數(shù)據(jù)塊,需要在執(zhí)行讀/寫操作過程中,啟動磁盤寫操作將待淘汰數(shù)據(jù)塊寫入磁盤,這將延長該讀/寫請求的服務(wù)時間。
對于不同的冗余等級,磁盤寫操作需要讀寫磁盤的次數(shù)也不相同,比如RAID 5中,寫一個分條單元到磁盤需要進行多次磁盤讀寫和新的冗余信息計算,所花費的時間比單純執(zhí)行淘汰數(shù)據(jù)塊的操作要高幾個甚至幾十個數(shù)量級。
(二)將緩存中待淘汰數(shù)據(jù)塊寫入磁盤時,沒有考慮磁盤通道的忙閑情況,從而增加主機寫操作的平均服務(wù)時間,降低了RAID系統(tǒng)的吞吐率。
(三)將待淘汰數(shù)據(jù)塊寫入磁盤時,僅根據(jù)主機對數(shù)據(jù)塊的訪問情況進行選擇,沒有考慮RAID系統(tǒng)中數(shù)據(jù)塊的分條情況,因此增加了磁盤通道和磁盤的壓力,降低了整個RAID系統(tǒng)的性能。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種針對讀請求的磁盤陣列緩存的管理方法,來降低處理主機讀請求的平均服務(wù)時間,提高RAID系統(tǒng)的性能。
本發(fā)明的又一目的在于提供一種針對寫請求的磁盤陣列緩存的管理方法,來降低處理主機寫請求的平均服務(wù)時間,提高RAID系統(tǒng)的性能。
為達到上述目的,本發(fā)明的技術(shù)方案具體是這樣實現(xiàn)的一種針對讀請求的磁盤陣列緩存的管理方法,其特征在于,主機讀請求到達磁盤陣列緩存時,該方法包括以下步驟a1、判斷讀請求數(shù)據(jù)是否保存在磁盤陣列緩存中,如果是則從磁盤陣列緩存中獲取讀請求數(shù)據(jù)返回給主機,否則從磁盤獲取讀請求數(shù)據(jù)返回給主機,并執(zhí)行步驟b1;b1、判斷磁盤陣列緩存中是否存在空閑區(qū)域,如果存在則在空閑區(qū)域保存讀請求數(shù)據(jù),否則執(zhí)行步驟c1;c1、選取磁盤陣列緩存中的讀數(shù)據(jù)塊,將所述讀請求數(shù)據(jù)保存在被選中的讀數(shù)據(jù)塊中。
進一步地,預(yù)先在磁盤陣列緩存中設(shè)置主機讀隊列,所述主機讀隊列包含有磁盤陣列緩存中讀數(shù)據(jù)塊的標識信息,則步驟c1所述選取讀數(shù)據(jù)塊的方法為從主機讀隊列中選出需淘汰的讀數(shù)據(jù)塊的標識信息,并在磁盤陣列緩存中查找到所述標識信息對應(yīng)的讀數(shù)據(jù)塊。
進一步地,所述主機讀隊列還包含有讀數(shù)據(jù)塊的訪問時間,所述訪問時間與對應(yīng)數(shù)據(jù)塊的標識信息綁定,則所述選出需淘汰的讀數(shù)據(jù)塊的方法為確定主機讀隊列中所記錄的距離當前時間最遠的訪問時間,選擇所述訪問時間對應(yīng)的讀數(shù)據(jù)塊。
較佳地,所述確定訪問時間的方法為利用最近最少使用算法選擇距離當前時間最遠的訪問時間。
較佳地,所述標識信息是緩存地址。
步驟c1后進一步包括根據(jù)預(yù)取算法判斷磁盤中是否存在后續(xù)數(shù)據(jù)塊需要讀取,如果存在則返回執(zhí)行步驟b1,否則主機讀數(shù)據(jù)塊過程結(jié)束。
較佳地,所述后續(xù)數(shù)據(jù)塊為讀請求數(shù)據(jù)在磁盤上的同磁道數(shù)據(jù)塊。
一種針對寫請求的磁盤陣列緩存的管理方法,其特征在于,主機寫請求到達磁盤陣列緩存時,該方法包括以下步驟a2、判斷寫請求數(shù)據(jù)是否已經(jīng)保存在磁盤陣列緩存中,如果是則用當前寫請求數(shù)據(jù)更新相應(yīng)位置處的寫請求數(shù)據(jù),否則執(zhí)行步驟b2;b2、判斷磁盤陣列緩存中是否存在空閑區(qū)域,如果存在則在空閑區(qū)域保存所述寫請求數(shù)據(jù),否則執(zhí)行步驟c2;c2、選取磁盤陣列緩存中的讀數(shù)據(jù)塊,將寫請求數(shù)據(jù)保存在被選中的讀數(shù)據(jù)塊中。
進一步地,預(yù)先在磁盤陣列緩存中設(shè)置主機讀隊列,所述主機讀隊列包含有磁盤陣列緩存中讀數(shù)據(jù)塊的標識信息,則步驟c2所述選取讀數(shù)據(jù)塊的方法為從主機讀隊列中選出需淘汰的讀數(shù)據(jù)塊的標識信息,并在磁盤陣列緩存中查找到所述標識信息對應(yīng)的讀數(shù)據(jù)塊。
進一步地,所述主機讀隊列還包含有讀數(shù)據(jù)塊的訪問時間,所述訪問時間與對應(yīng)數(shù)據(jù)塊的標識信息綁定,則所述選出需淘汰的讀數(shù)據(jù)塊的方法為確定主機讀隊列中所記錄的距離當前時間最遠的訪問時間,選擇所述訪問時間對應(yīng)的讀數(shù)據(jù)塊。
較佳地,所述確定訪問時間的方法為利用最近最少使用算法選擇距離當前時間最遠的訪問時間。
較佳地,所述標識信息是緩存地址。
進一步地,預(yù)先在磁盤陣列緩存中設(shè)置主機寫隊列,用于記錄磁盤陣列緩存中寫數(shù)據(jù)塊的標識信息,則步驟a2所述的方法為a21、判斷寫請求數(shù)據(jù)對應(yīng)的標識信息是否保存在主機讀隊列中,如果是則在標識信息對應(yīng)的數(shù)據(jù)塊中保存所述寫請求數(shù)據(jù),并將該標識信息加入到主機寫隊列,否則執(zhí)行步驟a22;a22、判斷寫請求數(shù)據(jù)對應(yīng)的標識信息是否保存在主機寫隊列中,如果是則在標識信息對應(yīng)的數(shù)據(jù)塊中保存所述寫請求數(shù)據(jù),否則執(zhí)行步驟b2。
進一步地,步驟b2所述在空閑區(qū)域保存所述寫請求數(shù)據(jù)后進一步包括將寫請求數(shù)據(jù)的標識信息加入到主機寫隊列;
步驟c2所述保存所述寫請求數(shù)據(jù)后進一步包括將寫請求數(shù)據(jù)的標識信息加入到主機寫隊列。
將標識信息加入到主機寫隊列時,該方法進一步包括d1、查找主機寫隊列中是否包含寫請求數(shù)據(jù)的同分條數(shù)據(jù)塊的標識信息,如果包含則將寫請求數(shù)據(jù)及其同分條數(shù)據(jù)塊一次寫入磁盤,否則執(zhí)行步驟d2;d2、判斷主機寫隊列長度是否超過預(yù)設(shè)長度,如果是則執(zhí)行步驟d3,否則寫入磁盤的操作過程結(jié)束;d3、選擇一個主機寫隊列中記錄的標識信息對應(yīng)的寫數(shù)據(jù)塊,并查找所述寫數(shù)據(jù)塊記錄在主機寫隊列中的同分條數(shù)據(jù)塊,將上述數(shù)據(jù)塊一次寫入磁盤,寫入磁盤的操作過程結(jié)束。
步驟d1所述將數(shù)據(jù)一次寫入磁盤后進一步包括將寫請求數(shù)據(jù)所在數(shù)據(jù)塊的標識信息及其同分條數(shù)據(jù)塊的標識信息加入到主機讀隊列;步驟d3所述將數(shù)據(jù)一次寫入磁盤后進一步包括將寫請求數(shù)據(jù)所在數(shù)據(jù)塊的標識信息及其同分條數(shù)據(jù)塊的標識信息加入到主機讀隊列。
步驟d2中操作過程結(jié)束之前,該方法進一步包括d21、判斷主機寫隊列長度是否超過檢測長度,如果超過則執(zhí)行步驟d22,否則寫入磁盤的操作過程結(jié)束;d22、判斷寫請求數(shù)據(jù)的同分條數(shù)據(jù)塊是否保存在磁盤陣列緩存中,如果是則執(zhí)行步驟d24,否則執(zhí)行步驟d23;d23、判斷主機寫隊列中是否記錄有同分條數(shù)據(jù)塊都保存在磁盤陣列緩存中的數(shù)據(jù)塊,如果存在則執(zhí)行步驟d24,否則寫入磁盤的操作過程結(jié)束;d24、將主機寫隊列中記錄的標識信息對應(yīng)的寫數(shù)據(jù)塊,及其記錄在主機寫隊列中的同分條數(shù)據(jù)塊一次寫入磁盤中。
較佳地,步驟d3中選擇數(shù)據(jù)塊的方法為按照主機寫隊列的記錄順序,選中隊首標識信息記錄的數(shù)據(jù)塊。
進一步地,所述標識信息包括邏輯地址、緩存地址以及兩個地址之間的映射關(guān)系;所述查找同分條數(shù)據(jù)塊的方法為根據(jù)寫數(shù)據(jù)塊的邏輯地址,確定主機寫隊列中記錄的與所述寫數(shù)據(jù)塊處于同分條的數(shù)據(jù)塊;根據(jù)邏輯地址和緩存地址之間的映射關(guān)系,在磁盤陣列緩存中查找到所述同分條數(shù)據(jù)塊。
由上述技術(shù)方案可見,本發(fā)明的這種針對讀/寫請求的磁盤陣列緩存的管理方法,將緩存中的數(shù)據(jù)塊根據(jù)其使用情況設(shè)置為空閑、主機讀和主機寫這三種狀態(tài),并分別用空閑隊列、主機讀隊列和主機寫隊列來管理相應(yīng)狀態(tài)的數(shù)據(jù)塊信息。當緩存中需要空閑區(qū)域用于保存主機讀/寫請求數(shù)據(jù)塊時,根據(jù)所設(shè)置的隊列區(qū)分處于不同狀態(tài)的數(shù)據(jù)塊,利用LRU算法淘汰位于主機讀隊列中的讀數(shù)據(jù)塊,從而在不降低緩存命中率的條件下,減少主機請求的平均服務(wù)時間,提高RAID系統(tǒng)的性能。
另一方面,本發(fā)明僅在數(shù)據(jù)塊加入主機寫隊列時,才觸發(fā)RAID系統(tǒng)將主機寫隊列中的寫數(shù)據(jù)塊寫入磁盤。上述從緩存寫入數(shù)據(jù)塊到磁盤的時機充分考慮到磁盤通道的忙閑情況,故該方法能很好地提高RAID系統(tǒng)的吞吐率。當執(zhí)行主機讀數(shù)據(jù)操作時,由于需要從磁盤讀出數(shù)據(jù),故磁盤通道處于忙狀態(tài)。此時,本發(fā)明的方法由于無需從緩存中淘汰寫數(shù)據(jù)塊,故無需進一步占用磁盤通道。當執(zhí)行主機寫數(shù)據(jù)操作時,磁盤通道處于閑狀態(tài),故可以較好地利用磁盤通道將主機寫隊列中的寫數(shù)據(jù)塊寫入磁盤。
再一方面,本發(fā)明利用RAID系統(tǒng)分條保存數(shù)據(jù)的特點,對緩存中的寫數(shù)據(jù)塊使用寫聚合算法,盡可能地將同一分條內(nèi)的所有數(shù)據(jù)塊一次寫入磁盤中,從而減少冗余計算和磁盤讀寫次數(shù),提高磁盤通道的利用率,進而提高整個RAID系統(tǒng)的性能。


圖1為現(xiàn)有技術(shù)中處理主機讀請求的流程圖;圖2為現(xiàn)有技術(shù)中以直寫方式處理主機寫請求的流程圖;圖3為現(xiàn)有技術(shù)中以回寫方式處理主機寫請求的流程圖;
圖4為本發(fā)明一個較佳實施例中緩存空間數(shù)據(jù)塊的狀態(tài)轉(zhuǎn)換圖;圖5為本發(fā)明一個較佳實施例中處理主機讀請求的流程圖;圖6為本發(fā)明一個較佳實施例中以回寫方式處理主機寫請求的流程圖;圖7為本發(fā)明一個較佳實施例中采用寫聚合算法將數(shù)據(jù)塊寫入磁盤的流程圖;圖8為現(xiàn)有技術(shù)中將寫數(shù)據(jù)塊寫入磁盤的順序圖;圖9為本發(fā)明一個較佳實施例中采用寫聚合算法將寫數(shù)據(jù)塊寫入磁盤的順序圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。
按照設(shè)計類型,本發(fā)明所述RAID系統(tǒng)中采用的磁盤陣列緩存可以分為一級緩存和二級緩存,或者分為單端口緩存和多端口緩存,下面以一級單端口緩存為例具體說明本發(fā)明中磁盤陣列緩存的管理方法。
本實施例中,將磁盤陣列緩存空間以數(shù)據(jù)塊為單位劃分,沒有保存數(shù)據(jù)內(nèi)容的空間標識為空閑態(tài),保存有讀數(shù)據(jù)塊的空間標識為主機讀狀態(tài),保存有寫數(shù)據(jù)塊的空間標識為主機寫狀態(tài)。設(shè)置隊列記錄緩存空間中每個數(shù)據(jù)塊的狀態(tài)信息,以便對緩存空間的使用進行管理,所述隊列分別為空閑隊列、主機讀隊列和主機寫隊列。如果緩存中的某個數(shù)據(jù)塊處于空閑態(tài),則將該數(shù)據(jù)塊的標識信息保存在空閑隊列中。類似地,如果某個數(shù)據(jù)塊為主機寫狀態(tài),則該數(shù)據(jù)塊的標識信息保存在主機寫隊列中;如果某個數(shù)據(jù)塊為主機讀狀態(tài),則該數(shù)據(jù)塊的標識信息保存在主機讀隊列中。所述標識信息用于標識數(shù)據(jù)塊在RAID系統(tǒng)中的位置,可包括數(shù)據(jù)塊在磁盤中保存的邏輯地址、同一個數(shù)據(jù)塊保存在緩存中的緩存地址以及邏輯地址和緩存地址之間的映射關(guān)系等內(nèi)容中的一項或幾項。隊列中還可以包括數(shù)據(jù)塊的訪問時間等信息,每個數(shù)據(jù)塊的訪問時間與相應(yīng)的標識信息綁定。
磁盤陣列緩存中的數(shù)據(jù)塊狀態(tài)會隨著緩存空間的使用發(fā)生變化,如圖4所示。在執(zhí)行主機讀數(shù)據(jù)塊操作時,可以將通過預(yù)取過程401獲得的數(shù)據(jù)內(nèi)容保存在空閑數(shù)據(jù)塊中,則該數(shù)據(jù)塊的狀態(tài)從空閑態(tài)變?yōu)橹鳈C讀狀態(tài)。如果處于主機讀狀態(tài)的數(shù)據(jù)塊在淘汰過程402中被選中,該數(shù)據(jù)塊中的數(shù)據(jù)內(nèi)容將被丟棄,則該數(shù)據(jù)塊從主機讀狀態(tài)變?yōu)榭臻e態(tài)。在執(zhí)行主機寫數(shù)據(jù)塊操作時,可以將寫請求數(shù)據(jù)保存在空閑數(shù)據(jù)塊中,則該數(shù)據(jù)塊的狀態(tài)從空閑態(tài)變?yōu)橹鳈C寫狀態(tài)403,或者如果主機寫請求數(shù)據(jù)塊已經(jīng)保存在緩存空間中,且所述空間處于主機讀狀態(tài),則主機將上述空間中的數(shù)據(jù)內(nèi)容更新404,并將其狀態(tài)變?yōu)橹鳈C寫狀態(tài)。如果處于主機寫狀態(tài)的數(shù)據(jù)塊中的數(shù)據(jù)內(nèi)容通過磁盤寫操作寫入磁盤405,則將該數(shù)據(jù)塊的狀態(tài)變?yōu)橹鳈C讀狀態(tài)。
從圖4的狀態(tài)轉(zhuǎn)換圖可以看出,本發(fā)明中的LRU算法只用于淘汰主機讀隊列中的數(shù)據(jù)塊,這些數(shù)據(jù)塊均處于主機讀狀態(tài)。寫數(shù)據(jù)塊在被寫入磁盤后,將加入到主機讀隊列中,同其它讀數(shù)據(jù)塊一起參與LRU算法的淘汰。
基于上述狀態(tài)轉(zhuǎn)換圖,圖5顯示的是本發(fā)明中主機讀請求的處理流程,該流程具體包括步驟501、主機讀請求到達后,在整個緩存中查找讀請求數(shù)據(jù)塊,如果存在則執(zhí)行步驟502,否則執(zhí)行步驟503。
上述查找范圍包括主機讀隊列和主機寫隊列中的所有數(shù)據(jù)塊。
步驟502、從緩存中取出讀請求數(shù)據(jù)塊返回給主機,并修改該數(shù)據(jù)決的訪問記錄,本次讀數(shù)據(jù)塊操作完成。
步驟503、啟動磁盤讀操作,從磁盤取出讀請求數(shù)據(jù)塊返回給主機。
步驟504、判斷緩存中是否存在空閑區(qū)域,如果存在則執(zhí)行步驟506,否則執(zhí)行步驟505。
步驟505、根據(jù)LRU算法從主機讀隊列中選擇讀數(shù)據(jù)塊進行淘汰。
由于主機讀隊列中包括數(shù)據(jù)塊的訪問時間,故該步驟中淘汰讀數(shù)據(jù)塊的方法為利用LRU算法或者類似算法從主機讀隊列中選出一個距離當前時間最遠的訪問時間對應(yīng)的讀數(shù)據(jù)塊,根據(jù)隊列中記錄的該數(shù)據(jù)塊的緩存地址在磁盤陣列緩存中查找到所述數(shù)據(jù)塊。
步驟506、RAID系統(tǒng)在緩存中保存步驟501所述的讀請求數(shù)據(jù)塊,并根據(jù)預(yù)取策略判斷磁盤中是否還有后續(xù)數(shù)據(jù)塊需要讀取,如果是則執(zhí)行步驟507,否則本次讀數(shù)據(jù)塊操作完成。
上述保存的方法為RAID系統(tǒng)將新的數(shù)據(jù)內(nèi)容寫入緩存中的相應(yīng)空間,替換掉原來的數(shù)據(jù)內(nèi)容。另外,在執(zhí)行預(yù)取時,可以在磁盤中選擇與讀請求數(shù)據(jù)塊處于同一個磁道的數(shù)據(jù)塊,以加快主機讀數(shù)據(jù)塊操作。
步驟507、啟動磁盤讀操作從磁盤獲取步驟506所述的由預(yù)取策略確定的后續(xù)數(shù)據(jù)塊,并返回執(zhí)行步驟504。
在圖5所述的過程中,由于淘汰的都是讀數(shù)據(jù)塊,故不必啟動磁盤寫操作,從而大大節(jié)省主機讀請求的處理時間。
基于圖4所示的狀態(tài)轉(zhuǎn)換圖,圖6顯示的是本發(fā)明中采用回寫方式處理主機寫請求的流程,該流程具體包括步驟601、主機寫請求到達時,判斷主機讀隊列中是否存在寫請求數(shù)據(jù)塊,如果存在則執(zhí)行步驟605,否則執(zhí)行步驟602。
步驟602、判斷主機寫隊列中是否存在寫請求數(shù)據(jù)塊,如果存在則執(zhí)行步驟606,否則執(zhí)行步驟603。
步驟603、判斷緩存中是否存在空閑區(qū)域,如果有則執(zhí)行步驟605,如果沒有則執(zhí)行步驟604。
步驟604、根據(jù)LRU算法選擇主機讀隊列中的數(shù)據(jù)塊進行淘汰。
步驟605、在緩存中保存寫請求數(shù)據(jù)塊,并將該數(shù)據(jù)塊信息加入到主機寫隊列中,本次寫數(shù)據(jù)塊操作完成。
步驟606、在緩存中保存寫請求數(shù)據(jù)塊,本次寫數(shù)據(jù)塊操作完成。
在圖6所述的過程中,由于淘汰的都是讀數(shù)據(jù)塊,故不必啟動磁盤寫操作,從而大大節(jié)省主機寫請求的處理時間。
上述步驟605中,當主機寫隊列中有寫數(shù)據(jù)塊信息加入時,主機寫隊列中的數(shù)據(jù)塊通過寫聚合算法寫入磁盤的流程被觸發(fā)。圖7顯示的是數(shù)據(jù)塊寫入磁盤的過程,具體包括以下步驟步驟701、主機寫隊列中有寫數(shù)據(jù)塊信息加入時,查找與所述數(shù)據(jù)塊同分條的數(shù)據(jù)塊是否都在主機寫隊列中,如果在則執(zhí)行步驟702,否則執(zhí)行步驟703。
由于標識信息包括邏輯地址、緩存地址,以及二者之間的映射關(guān)系,故所述查找同分條數(shù)據(jù)塊的方法為根據(jù)寫數(shù)據(jù)塊的邏輯地址,確定主機寫隊列中記錄的與所述寫數(shù)據(jù)塊處于同分條的數(shù)據(jù)塊;根據(jù)邏輯地址和緩存地址之間的映射關(guān)系,在磁盤陣列緩存中查找到所述同分條數(shù)據(jù)塊。
步驟702、將同一分條的所有數(shù)據(jù)塊一次寫入磁盤,然后執(zhí)行步驟709。
步驟703、判斷主機寫隊列的長度是否超過預(yù)設(shè)長度,如果是則執(zhí)行步驟708,否則執(zhí)行步驟704。
步驟704、判斷主機寫隊列的長度是否超過預(yù)設(shè)長度的2/3,如果是則執(zhí)行步驟705,否則本次寫磁盤的過程結(jié)束。
步驟705、判斷與步驟701所述數(shù)據(jù)塊同分條的數(shù)據(jù)塊是否都在緩存中,如果是則執(zhí)行步驟707,否則執(zhí)行步驟706。
步驟706、判斷主機寫隊列中是否存在一個數(shù)據(jù)塊,其同分條其它數(shù)據(jù)塊都在緩存中,如果有則執(zhí)行步驟707,否則本次寫磁盤的過程結(jié)束。
步驟707、將主機寫隊列中的數(shù)據(jù)塊及其處于同分條的在主機寫隊列中的其它數(shù)據(jù)塊一次寫入磁盤中,然后執(zhí)行步驟709。
此時,一次寫入磁盤的數(shù)據(jù)是主機寫隊列中同一分條的部分數(shù)據(jù)塊。雖然上述寫入磁盤的數(shù)據(jù)塊只是同一分條中的部分數(shù)據(jù)塊,由于整個分條數(shù)據(jù)都在緩存中,可以使用緩存中的整個分條數(shù)據(jù)進行冗余計算,故該過程只需要寫磁盤,而不需讀磁盤。
步驟708、將隊首數(shù)據(jù)塊及其處于主機寫隊列中的同分條的其它數(shù)據(jù)塊一次寫入磁盤中。
此時,如果隊首數(shù)據(jù)塊的部分分條數(shù)據(jù)在主機寫隊列中,則一次將部分分條數(shù)據(jù)寫入磁盤。另外,如果并非整個隊首數(shù)據(jù)塊的分條數(shù)據(jù)都在緩存中,則在寫磁盤之前還需要讀磁盤,以獲得數(shù)據(jù)進行該分條的冗余計算。但是,這種讀磁盤的次數(shù)比現(xiàn)有技術(shù)中每次單獨寫一個數(shù)據(jù)塊時執(zhí)行的讀操作次數(shù)要少得多。
步驟709、將寫入磁盤中的數(shù)據(jù)塊標識信息從主機寫隊列中刪除,并將相應(yīng)信息加入主機讀隊列,本次寫磁盤的過程結(jié)束。
從圖7看出,使用寫聚合算法能夠減少冗余計算次數(shù),以及磁盤和緩存之間的讀寫次數(shù)。假設(shè)現(xiàn)有技術(shù)中,將寫數(shù)據(jù)塊寫入磁盤的順序如圖8所示,其中邏輯地址中的Sij表示數(shù)據(jù)塊保存在磁盤中第i個分條的第j個分條單元,則采用RAID 5將圖8中所有分條單元按順序全部寫入磁盤所需的磁盤讀寫次數(shù)為48次,冗余計算次數(shù)為12次。使用寫聚合算法的寫入順序如圖9所示,其中S11、S12、S14和S13這四個分條單元只要執(zhí)行一次寫入,其它分條單元的寫入方法同理,即屬于同一分條的分條單元一次寫入磁盤,故采用RAID 5時的磁盤讀寫次數(shù)為15次,冗余計算次數(shù)為4次。
實際應(yīng)用中,主機寫隊列的長度可根據(jù)情況進行調(diào)整。當主機寫請求較多時,可增加主機寫隊列長度,反之則減小主機寫隊列長度。步驟704中,檢測某數(shù)據(jù)塊的同一分條中所有數(shù)據(jù)塊是否都在緩存中的時機也可根據(jù)需要進行調(diào)整,本實施例中設(shè)定當主機寫隊列長度達到預(yù)設(shè)長度的2/3時開始上述檢測,將這個長度稱為檢測長度。步驟708中,當主機寫隊列長度超過預(yù)設(shè)長度時,隊列中數(shù)據(jù)塊寫入磁盤的次序不一定從隊首數(shù)據(jù)塊開始,可以根據(jù)一定算法預(yù)測將來最不會被改寫的數(shù)據(jù)塊并將其寫入磁盤。
以上是本實施例中對一級單端口磁盤陣列緩存的管理方法。對于其他多級或多端口的磁盤陣列緩存也可采用類似的方法進行管理。
由上述的實施例可見,本發(fā)明的這種針對讀/寫請求的磁盤陣列緩存的管理方法,將緩存中的數(shù)據(jù)塊根據(jù)其使用情況設(shè)置為空閑、主機讀和主機寫這三種狀態(tài),當緩存中需要空閑區(qū)域用于保存主機讀/寫請求數(shù)據(jù)塊時,利用LRU算法或其它相關(guān)算法淘汰處于主機讀狀態(tài)的數(shù)據(jù)塊,從而在不降低緩存命中率的條件下,減少主機請求的平均服務(wù)時間,提高RAID系統(tǒng)性能。
權(quán)利要求
1.一種針對讀請求的磁盤陣列緩存的管理方法,其特征在于,主機讀請求到達磁盤陣列緩存時,該方法包括以下步驟a1、判斷讀請求數(shù)據(jù)是否保存在磁盤陣列緩存中,如果是則從磁盤陣列緩存中獲取讀請求數(shù)據(jù)返回給主機,否則從磁盤獲取讀請求數(shù)據(jù)返回給主機,并執(zhí)行步驟b1;b1、判斷磁盤陣列緩存中是否存在空閑區(qū)域,如果存在則在空閑區(qū)域保存讀請求數(shù)據(jù),否則執(zhí)行步驟c1;c1、選取磁盤陣列緩存中的讀數(shù)據(jù)塊,將所述讀請求數(shù)據(jù)保存在被選中的讀數(shù)據(jù)塊中。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,預(yù)先在磁盤陣列緩存中設(shè)置主機讀隊列,所述主機讀隊列包含有磁盤陣列緩存中讀數(shù)據(jù)塊的標識信息,則步驟c1所述選取讀數(shù)據(jù)塊的方法為從主機讀隊列中選出需淘汰的讀數(shù)據(jù)塊的標識信息,并在磁盤陣列緩存中查找到所述標識信息對應(yīng)的讀數(shù)據(jù)塊。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述主機讀隊列還包含有讀數(shù)據(jù)塊的訪問時間,所述訪問時間與對應(yīng)數(shù)據(jù)塊的標識信息綁定,則所述選出需淘汰的讀數(shù)據(jù)塊的方法為確定主機讀隊列中所記錄的距離當前時間最遠的訪問時間,選擇所述訪問時間對應(yīng)的讀數(shù)據(jù)塊。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述確定訪問時間的方法為利用最近最少使用算法選擇距離當前時間最遠的訪問時間。
5.根據(jù)權(quán)利要求2至4所述的方法,其特征在于,所述標識信息是緩存地址。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟c1后進一步包括根據(jù)預(yù)取算法判斷磁盤中是否存在后續(xù)數(shù)據(jù)塊需要讀取,如果存在則返回執(zhí)行步驟b1,否則主機讀數(shù)據(jù)塊過程結(jié)束。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述后續(xù)數(shù)據(jù)塊為讀請求數(shù)據(jù)在磁盤上的同磁道數(shù)據(jù)塊。
8.一種針對寫請求的磁盤陣列緩存的管理方法,其特征在于,主機寫請求到達磁盤陣列緩存時,該方法包括以下步驟a2、判斷寫請求數(shù)據(jù)是否已經(jīng)保存在磁盤陣列緩存中,如果是則用當前寫請求數(shù)據(jù)更新相應(yīng)位置處的寫請求數(shù)據(jù),否則執(zhí)行步驟b2;b2、判斷磁盤陣列緩存中是否存在空閑區(qū)域,如果存在則在空閑區(qū)域保存所述寫請求數(shù)據(jù),否則執(zhí)行步驟c2;c2、選取磁盤陣列緩存中的讀數(shù)據(jù)塊,將寫請求數(shù)據(jù)保存在被選中的讀數(shù)據(jù)塊中。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,預(yù)先在磁盤陣列緩存中設(shè)置主機讀隊列,所述主機讀隊列包含有磁盤陣列緩存中讀數(shù)據(jù)塊的標識信息,則步驟c2所述選取讀數(shù)據(jù)塊的方法為從主機讀隊列中選出需淘汰的讀數(shù)據(jù)塊的標識信息,并在磁盤陣列緩存中查找到所述標識信息對應(yīng)的讀數(shù)據(jù)塊。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述主機讀隊列還包含有讀數(shù)據(jù)塊的訪問時間,所述訪問時間與對應(yīng)數(shù)據(jù)塊的標識信息綁定,則所述選出需淘汰的讀數(shù)據(jù)塊的方法為確定主機讀隊列中所記錄的距離當前時間最遠的訪問時間,選擇所述訪問時間對應(yīng)的讀數(shù)據(jù)塊。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述確定訪問時間的方法為利用最近最少使用算法選擇距離當前時間最遠的訪問時間。
12.根據(jù)權(quán)利要求9至11所述的方法,其特征在于,所述標識信息是緩存地址。
13.根據(jù)權(quán)利要求9所述的方法,其特征在于,預(yù)先在磁盤陣列緩存中設(shè)置主機寫隊列,用于記錄磁盤陣列緩存中寫數(shù)據(jù)塊的標識信息,則步驟a2所述的方法為a21、判斷寫請求數(shù)據(jù)對應(yīng)的標識信息是否保存在主機讀隊列中,如果是則在標識信息對應(yīng)的數(shù)據(jù)塊中保存所述寫請求數(shù)據(jù),并將該標識信息加入到主機寫隊列,否則執(zhí)行步驟a22;a22、判斷寫請求數(shù)據(jù)對應(yīng)的標識信息是否保存在主機寫隊列中,如果是則在標識信息對應(yīng)的數(shù)據(jù)塊中保存所述寫請求數(shù)據(jù),否則執(zhí)行步驟b2。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,步驟b2所述在空閑區(qū)域保存所述寫請求數(shù)據(jù)后進一步包括將寫請求數(shù)據(jù)的標識信息加入到主機寫隊列;步驟c2所述保存所述寫請求數(shù)據(jù)后進一步包括將寫請求數(shù)據(jù)的標識信息加入到主機寫隊列。
15.根據(jù)權(quán)利要求13或14所述的方法,其特征在于,將標識信息加入到主機寫隊列時,該方法進一步包括d1、查找主機寫隊列中是否包含寫請求數(shù)據(jù)的同分條數(shù)據(jù)塊的標識信息,如果包含則將寫請求數(shù)據(jù)及其同分條數(shù)據(jù)塊一次寫入磁盤,否則執(zhí)行步驟d2;d2、判斷主機寫隊列長度是否超過預(yù)設(shè)長度,如果是則執(zhí)行步驟d3,否則寫入磁盤的操作過程結(jié)束;d3、選擇一個主機寫隊列中記錄的標識信息對應(yīng)的寫數(shù)據(jù)塊,并查找所述寫數(shù)據(jù)塊記錄在主機寫隊列中的同分條數(shù)據(jù)塊,將上述數(shù)據(jù)塊一次寫入磁盤,寫入磁盤的操作過程結(jié)束。
16.根據(jù)權(quán)利要求15所述的方法,其特征在于,步驟d1所述將數(shù)據(jù)一次寫入磁盤后進一步包括將寫請求數(shù)據(jù)所在數(shù)據(jù)塊的標識信息及其同分條數(shù)據(jù)塊的標識信息加入到主機讀隊列;步驟d3所述將數(shù)據(jù)一次寫入磁盤后進一步包括將寫請求數(shù)據(jù)所在數(shù)據(jù)塊的標識信息及其同分條數(shù)據(jù)塊的標識信息加入到主機讀隊列。
17.根據(jù)權(quán)利要求15所述的方法,其特征在于,步驟d2中操作過程結(jié)束之前,該方法進一步包括d21、判斷主機寫隊列長度是否超過檢測長度,如果超過則執(zhí)行步驟d22,否則寫入磁盤的操作過程結(jié)束;d22、判斷寫請求數(shù)據(jù)的同分條數(shù)據(jù)塊是否保存在磁盤陣列緩存中,如果是則執(zhí)行步驟d24,否則執(zhí)行步驟d23;d23、判斷主機寫隊列中是否記錄有同分條數(shù)據(jù)塊都保存在磁盤陣列緩存中的數(shù)據(jù)塊,如果存在則執(zhí)行步驟d24,否則寫入磁盤的操作過程結(jié)束;d24、將主機寫隊列中記錄的標識信息對應(yīng)的寫數(shù)據(jù)塊,及其記錄在主機寫隊列中的同分條數(shù)據(jù)塊一次寫入磁盤中。
18.根據(jù)權(quán)利要求15所述的方法,其特征在于,步驟d3中選擇數(shù)據(jù)塊的方法為按照主機寫隊列的記錄順序,選中隊首標識信息記錄的數(shù)據(jù)塊。
19.根據(jù)權(quán)利要求15所述的方法,其特征在于,所述標識信息包括邏輯地址、緩存地址以及兩個地址之間的映射關(guān)系;所述查找同分條數(shù)據(jù)塊的方法為根據(jù)寫數(shù)據(jù)塊的邏輯地址,確定主機寫隊列中記錄的與所述寫數(shù)據(jù)塊處于同分條的數(shù)據(jù)塊;根據(jù)邏輯地址和緩存地址之間的映射關(guān)系,在磁盤陣列緩存中查找到所述同分條數(shù)據(jù)塊。
全文摘要
本發(fā)明公開了針對讀/寫請求的磁盤陣列緩存的管理方法。針對讀請求的管理過程包括主機讀請求到達時,判斷讀請求數(shù)據(jù)是否保存在磁盤陣列緩存中,如果是則從磁盤陣列緩存中獲取讀請求數(shù)據(jù)返回給主機,否則從磁盤獲取讀請求數(shù)據(jù)返回給主機,并執(zhí)行步驟b1;b1、判斷磁盤陣列緩存中是否存在空閑區(qū)域,如果存在則在空閑區(qū)域保存讀請求數(shù)據(jù),否則執(zhí)行步驟c1;c1、選取磁盤陣列緩存中的讀數(shù)據(jù)塊,將讀請求數(shù)據(jù)保存在被選中讀數(shù)據(jù)塊的位置處。對于主機寫請求,也采用與上述過程類似的方法進行管理,并采用寫聚合算法寫入數(shù)據(jù)塊到磁盤。本發(fā)明的方法在不降低緩存命中率的條件下,減少主機請求的平均服務(wù)時間,提高RAID系統(tǒng)的性能。
文檔編號G06F12/08GK1862475SQ200510084269
公開日2006年11月15日 申請日期2005年7月15日 優(yōu)先權(quán)日2005年7月15日
發(fā)明者王玉林, 吳小軍, 李廣軍, 林水生 申請人:華為技術(shù)有限公司, 電子科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1