專利名稱:用于將不完整記錄從第一緩存降級至第二緩存的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于將不完整記錄從第一緩存降級至第二緩存的計算機程序產(chǎn)品、系統(tǒng)和方法。
背景技術(shù):
由于要在比存儲被請求記錄的存儲設(shè)備更快速的訪問存儲設(shè)備(例如內(nèi)存)中進行讀寫操作,緩存管理系統(tǒng)緩沖最近訪問的存儲設(shè)備中的記錄。隨后對較快速訪問的緩存內(nèi)存中記錄的讀請求就以比從較慢速訪問存儲器中返回被請求記錄更快的速率被返回,由此縮短了讀等待時間。緩存管理系統(tǒng)也可以在向緩存內(nèi)存寫入涉及存儲設(shè)備的修改記錄時并且在將修改記錄全部寫出至存儲設(shè)備(例如硬盤驅(qū)動器)之前返回完成寫請求。對存儲設(shè)備的寫等待時間通常要明顯長于寫入緩存內(nèi)存的等待時間。因此,使用緩存也縮短了寫等待時間。緩存管理系統(tǒng)可以保留對緩存內(nèi)存儲的每一條記錄都有一個條目的鏈表,其中可以包括在寫入存儲設(shè)備之前在緩存內(nèi)緩沖的寫數(shù)據(jù)或者讀數(shù)據(jù)。在常用的最近最少使用(LRU)緩存技術(shù)中,如果訪問到緩存內(nèi)的記錄,也就是緩存“命中”,那么LRU列表中用于被訪問記錄的條目即被移動到列表的最近使用(MRU)端。如果被訪問記錄不在緩存內(nèi),也就是緩存未命中,那么其條目位于列表LRU端的緩存內(nèi)記錄即可被移除(或降級送回存儲器),并且用于從存儲器進級到緩存內(nèi)的記錄數(shù)據(jù)的條目即可被加至LRU列表的MRU端。通過這種LRU緩存技術(shù),被訪問越頻繁的記錄越有可能保留在緩存內(nèi),而被訪問越不頻繁的數(shù)據(jù)則越有可能從列表的LRU端被移除,從而在緩存中為新近訪問的記錄留出空間。本領(lǐng)域內(nèi)對于在存儲系統(tǒng)中使用緩存的改進技術(shù)存在需求。
發(fā)明內(nèi)容
提供了一種用于將不完整記錄從第一緩存降級至第二緩存的計算機程序產(chǎn)品、系統(tǒng)和方法。對記錄進行從第一緩存降級至第二緩存的判定,其中第一緩存內(nèi)的記錄對應(yīng)于存儲系統(tǒng)內(nèi)的記錄并且包括多個扇區(qū)。對第二緩存是否包括從第一緩存降級的記錄的舊版本進行判定。響應(yīng)于判定第二緩存包括記錄的舊版本,就記錄的舊版本是否包括在從第一緩存降級的記錄中未包含的記錄扇區(qū)進行判定。將從第一緩存降級的記錄中的扇區(qū)與記錄舊版本中未包含在從第一緩存降級的記錄內(nèi)的扇區(qū)合并為記錄的新版本。將記錄的新版本寫入第二緩存。
圖1示出了計算環(huán)境的實施例。圖2示出了第一緩存管理信息的實施例。圖3示出了第二緩存管理信息的實施例。
圖4示出了第一緩存控制模塊的實施例。圖5示出了第二緩存控制模塊的實施例。圖6示出了步長信息的實施例。圖7示出了第二緩存RAID結(jié)構(gòu)的實施例。圖8示出了存儲器RAID結(jié)構(gòu)的實施例。圖9示出了將第一緩存中的未修改無序記錄降級以提升至第二緩存的操作實施例。圖10示出了將記錄加入第一緩存的操作實施例。圖11示出了處理記錄以從第一緩存降級至第二緩存的操作實施例。圖12示出了將記錄從第一步長增加為第二步長的操作實施例。圖13示出了在第二緩存內(nèi)釋放空間的操作實施例。圖14示出了處理對記錄的請求以返回讀請求的操作實施例。
具體實施例方式介紹的實施例提供了用于將記錄從第一緩存降級至第二緩存的技術(shù)。如果待降級記錄包括不完整記錄并且如果第二記錄包括舊版本的記錄,那么就可以在第二緩存內(nèi)建立新版本的記錄,包括將從第一緩存降級的不完整記錄的扇區(qū)與第二緩存內(nèi)記錄舊版本中未包含在被降級的部分記錄的扇區(qū) 內(nèi)的扇區(qū)合并。記錄的新版本可以被寫入第二緩存中的新位置。圖1示出了計算環(huán)境的實施例。多個主機2a,2b "2n可以通過網(wǎng)絡(luò)向存儲控制器4提交輸入/輸出(I/O)請求以訪問存儲器10內(nèi)存儲卷8 (例如邏輯單元號、邏輯設(shè)備、邏輯子系統(tǒng)等)中的數(shù)據(jù)。存儲控制器4包括處理器復(fù)合體12,其中包括具有單核或多核的一個或多個處理器、第一緩存14和第二緩存18。第一緩存14和第二緩存18緩存在主機2a, 2b…2n和存儲器10之間傳輸?shù)木彺鏀?shù)據(jù)。存儲控制器4具有內(nèi)存20,其包括用于管理在主機2a,2b…2n和存儲器10之間傳輸?shù)挠涗泜鬏數(shù)拇鎯芾砥?2,以及在第一緩存14和第二緩存18內(nèi)管理主機2a,2lr..2n和存儲器10之間傳輸數(shù)據(jù)的緩存管理器24。記錄可以包括設(shè)置在存儲器10內(nèi)的任何數(shù)據(jù)單元,例如構(gòu)成更大記錄分組譬如卷、邏輯設(shè)備等的一部分的記錄、邏輯塊地址(LBA)等。緩存管理器24保留第一緩存管理信息26和第二緩存管理信息28以管理第一緩存14和第二緩存18內(nèi)的讀(不修改)記錄和寫(修改)記錄。存儲管理器22和緩存管理器24在圖1中被示出為載入內(nèi)存20并由處理器復(fù)合體12執(zhí)行的程序代碼??蛇x地,部分或全部功能可以以存儲控制器4內(nèi)的硬件設(shè)備實現(xiàn),例如專用集成電路(ASIC)。第二緩存18可以在日志結(jié)構(gòu)陣列(LSA) 32內(nèi)存儲記錄,其中記錄按接收時的先后順序?qū)懭耄纱颂峁懭氲诙彺?8的記錄的時間排序。在LSA中,已存在于LSA內(nèi)的記錄的后續(xù)版本在LSA 32的末端寫入。在可選實施例中,第二緩存18可以用不同于LSA的格式來存儲數(shù)據(jù)。內(nèi)存20進一步包括第二緩存RAID配置信息34,其提供關(guān)于RAID配置的信息用于確定如何構(gòu)成存儲在第二緩存18內(nèi)的記錄步長。在一個實施例中,第二緩存18可以包括多個存儲設(shè)備(例如獨立的固態(tài)存儲設(shè)備(SSD))以使由第一緩存14中的記錄構(gòu)成的步長被分散到構(gòu)成第二緩存18的獨立存儲設(shè)備(例如閃存)上。在進一步的實施例中,第二緩存18可以包括單個存儲設(shè)備(例如一個閃存)以使記錄按照由第二緩存RAID配置34定義的步長分組,而且記錄被寫為用于實現(xiàn)第二緩存18的單個設(shè)備(例如一個閃存)的步長。被設(shè)置用于第二緩存RAID配置34的步長記錄可以被寫入第二緩存18設(shè)備內(nèi)的LSA 32。第二緩存RAID配置34可以明確不同的RAID等級,例如5級、10級等。內(nèi)存20進一步包括存儲器RAID配置信息36,提供關(guān)于RAID配置的信息用于確定如果第二緩存18應(yīng)該存儲修改的數(shù)據(jù)則如何將第一緩存14或第二緩存18中的記錄寫入存儲系統(tǒng)10,其中降級步長的記錄被分散到存儲系統(tǒng)10內(nèi)的存儲設(shè)備上,例如磁盤驅(qū)動器。在一個實施例中,第一緩存14可以包括隨機訪問內(nèi)存(RAM),例如動態(tài)隨機訪問內(nèi)存(DRAM),并且第二緩存18可以包括閃存,例如固態(tài)設(shè)備,而存儲器10由一個或多個順序訪問存儲設(shè)備(例如硬盤驅(qū)動器和磁帶構(gòu)成)。存儲器10可以包括單個順序訪問存儲設(shè)備或者可以包括存儲設(shè)備陣列,例如簡單磁盤捆綁(JBOD)、直接訪問存儲設(shè)備(DASD)、獨立磁盤冗余陣列(RAID)、虛擬設(shè)備等。在一個實施例中,第一緩存14是比第二緩存18更快的存取設(shè)備,并且第二緩存18是比存儲器10更快的存取設(shè)備。而且,第一緩存14可以具有比第二緩存18更高的單位存儲成本,并且第二緩存18可以具有比存儲器10內(nèi)的存儲設(shè)備更高的單位存儲成本。第一緩存14可以是內(nèi)存20的一部分或者可以用獨立的內(nèi)存設(shè)備例如DRAM實現(xiàn)。在某些實施例中,第二緩存可以包括只讀緩存以緩存從第一緩存14降級的記錄。網(wǎng)絡(luò)6可以包括存儲區(qū)域網(wǎng)(SAN)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、互聯(lián)網(wǎng)、內(nèi)部網(wǎng)
坐寸ο圖2示出了第一緩存管理信息26的實施例,包括:記錄索引50,用于提供第一緩存14內(nèi)的記錄索引以對控制塊目錄52中的模塊進行控制;未修改的有序LRU列表54,用于提供第一緩存14內(nèi)未修改有序記錄的時間排序;修改的LRU列表56,用于提供第一緩存14內(nèi)修改的有序和無序記錄的時間排序;未修改的無序LRU列表58,用于提供第一緩存14內(nèi)未修改無序記錄的時間排序;以及步長信息60,用于提供由第一緩存14內(nèi)未修改無序記錄構(gòu)成的步長信息以按照全步長寫操作寫入第二緩存18。在某些實施例中,當確定第一緩存18已滿時,修改的LRU列表56被用于將修改的記錄從第一緩存10降級至存儲器10,以使得可以刪除這些降級記錄在第一緩存18中的副本從而在第一緩存18中為新的修改的記錄留出空間。一旦修改的無序記錄從第一緩存14降級至存儲器10,那么緩存管理器24可將降級的記錄指定為第一緩存14內(nèi)的未修改無序記錄并向未修改的無序LRU列表58中加入新指定的未修改記錄的標記,由此才適合用于提升至第二緩存14??梢酝ㄟ^更新第一緩存控制塊104以在字段106內(nèi)將降級的修改無序記錄指示為未修改而改變降級的修改記錄的狀態(tài)。因此,第一緩存14內(nèi)未修改的無序記錄可以包括讀取的數(shù)據(jù)或者根據(jù)修改的LRU列表56降級至存儲器10的修改的無序記錄。因此,在LRU列表58內(nèi)變成未修改記錄的降級修改記錄可以被提升至第二緩存14,以供隨后的讀請求使用。在這些實施例中,第二緩存14包括用于緩存未修改無序記錄的只讀緩存。
圖3示出了第二緩存管理信息28的實施例,包括:記錄索引70,用于提供第二緩存18內(nèi)的記錄索引以對控制塊目錄72中的模塊進行控制;未修改的列表74,用于提供第二緩存18內(nèi)未修改記錄的時間排序;以及步長信息78,用于提供寫入第二緩存18的記錄的步長的信息。在一個實施例中,第二緩存18僅存儲未修改的無序記錄。在進一步的實施例中,第二緩存18也可以存儲修改的記錄和/或有序記錄。所有的LRU列表54、56、58和74均可包括第一緩存14和第二緩存18內(nèi)記錄的記錄標識符,記錄標識符根據(jù)被標識記錄上一次被訪問的時間來排序。LRU列表54、56、58和74具有指不最近訪問記錄的最近使用(MRU)端和指不最近最少使用或訪問記錄的LRU端。加入緩存14和18的記錄的記錄標識符被加至LRU列表的MRU端,并且從LRU端訪問從緩存14和18降級的記錄。記錄索引50和70可以包括離散索引表(SIT)。各種可選類型的數(shù)據(jù)結(jié)構(gòu)均可被用于提供緩存14和18內(nèi)記錄的時間排序。無序記錄可以包括聯(lián)機線事務(wù)處理(OLTP)記錄,其經(jīng)常包括并非完全隨機且具有一定的引用局部性(也就是存在重復(fù)訪問可能性)的小塊寫操作。圖4示出了控制塊目錄52內(nèi)的第一緩存控制塊100條目的實施例,包括控制塊標識符(ID) 102、在第一緩存14內(nèi)的記錄的物理位置的第一緩存位置104、指示記錄是修改還是未修改的信息106、指示記錄是有序還是無序訪問的信息108、指示用于記錄的降級狀態(tài)(例如未降級,準備降級和完成降級)的信息110以及指示第一緩存14內(nèi)包含的記錄中扇區(qū)的扇區(qū)圖112。如果扇區(qū)圖112指示第一緩存14內(nèi)的記錄的某些扇區(qū)還沒有數(shù)據(jù),那么保留在第一緩存14內(nèi)的記錄就包括不完整記錄。圖5示出了第二緩存控制塊目錄72內(nèi)的第二緩存控制塊120條目的實施例,包括控制塊標識符(ID) 122 ;其中記錄位于LSA 32內(nèi)的LSA位置124 ;指示記錄是修改還是未修改的修改/未修改信息126 ;指示記錄是有效還是無效的有效/無效標志128 ;以及指示第二緩存18內(nèi)包含的記錄中扇區(qū)的扇區(qū)圖129。如果記錄要在第一緩存14內(nèi)更新或者如果記錄要從第二緩存18降級,那么就將第二緩存18內(nèi)的記錄指示為無效。如果扇區(qū)圖129指示第二緩存18內(nèi)的記錄的某些扇區(qū)還沒有數(shù)據(jù),那么保留在第二緩存18內(nèi)的記錄就包括不完整記錄。如果第二緩存18只存儲未修改的讀取數(shù)據(jù),那么緩存控制塊120可以不包括字段126。圖6示出了用于在第二緩存18內(nèi)構(gòu)成的一個步長的步長信息60、78的實例130,包括步長標識符(ID) 132、步長132內(nèi)包含的存儲器10的記錄134,以及指不該步長的記錄總數(shù)中有效記錄數(shù)量的占用率136,其中該步長內(nèi)無效的記錄適合用于垃圾收集操作。圖7示出了第二緩存RAID配置34的一個實施例,保留該配置以確定如何根據(jù)第一緩存14內(nèi)的記錄構(gòu)成第二緩存18內(nèi)的記錄的步長。RAID等級140表示使用的RAID配置,例如RAID 1、RAID5、RAID 6,RAID 10等,多個(m個)數(shù)據(jù)盤142存儲用戶數(shù)據(jù)的記錄,并且多個(P個)奇偶校驗盤144存儲由數(shù)據(jù)盤142算出的奇偶校驗值,其中P可以是一個或多個,表示用于存儲算出的奇偶校驗塊的盤數(shù)量。未修改的奇偶校驗可選標志148指示是否應(yīng)針對第一緩存14內(nèi)提升至第二緩存18的未修改無序記錄計算奇偶校驗值。該可選標志148只允許在步長內(nèi)包括未修改的無序記錄,從而只用未修改的無序記錄來填充該步長。第一緩存14內(nèi)未修改無序記錄的步長可以在LSA 32內(nèi)指明,其中該步長中的記錄被分散到構(gòu)成第二緩存18的m加P個存儲設(shè)備上。可選地,第二緩存18可以包括少于η個設(shè)備。圖8示出了存儲器RAID配置36的一個實施例,保留該配置以確定如何構(gòu)成第二緩存18內(nèi)修改記錄的步長以分散(stripe)到存儲器10中的磁盤上。RAID等級150表示使用的RAID配置,多個(m個)數(shù)據(jù)盤152存儲用戶數(shù)據(jù)的記錄,并且多個(p個)奇偶校驗盤154存儲由數(shù)據(jù)盤152算出的奇偶校驗值,其中P可以是一個或多個,表示用于存儲算出的奇偶校驗塊的盤數(shù)量。第二緩存18的記錄步長可以分散到存儲系統(tǒng)10內(nèi)的盤上。在一個實施例中,第二緩存RAID配置34和存儲器RAID配置36可以提供不同的參數(shù)或者具有相同的參數(shù),例如不同的RAID等級、數(shù)據(jù)盤、奇偶校驗盤等。圖9示出了由緩存管理器24執(zhí)行的將第一緩存14中的未修改無序記錄降級以提升至第二緩存18的操作實施例,其中在需要空間時可以從未修改無序LRU列表58的LRU端選擇未修改的無序記錄。當(在塊200)啟動操作以降級選中的未修改無序記錄時,被選擇降級的未修改無序記錄的降級狀態(tài)110 (圖4)就(在塊202)被設(shè)定為“就緒”。緩存管理器24(在塊204)利用第二緩存RAID配置信息34構(gòu)成第一緩存114內(nèi)用于提升至第二緩存18內(nèi)步長的記錄的第一步長。例如,構(gòu)成記錄的第一步長可以包括根據(jù)用于第二緩存的RAID配置信息34構(gòu)成用于RAID配置的步長,譬如使η個設(shè)備包括用于存儲數(shù)據(jù)記錄的m個設(shè)備以及存儲由用于m個設(shè)備的數(shù)據(jù)記錄算出的奇偶校驗數(shù)據(jù)的至少一個奇偶校驗設(shè)備P。而且,第一步長的記錄可以無奇偶校驗地分散在η個固態(tài)存儲設(shè)備上,以構(gòu)成實施例中的第二步長,其中第二緩存包括至少η個固態(tài)存儲設(shè)備。緩存管理器24 (在塊206)處理未修改的無序LRU列表58以確定在其控制塊100內(nèi)具有就緒降級狀態(tài)110的未修改無序記錄的數(shù)量。如果緩存管理器24 (在塊208)確定未修改無序記錄的數(shù)量足以構(gòu)成一個步長,那么緩存管理器24就(在塊210)填充第一步長的具有就緒降級狀態(tài)110的未修改無序記錄。在一個實施例中,第一步長可以從未修改的無序LRU列表58的LRU端開始填充并且將足夠多的記錄用于步長內(nèi)的數(shù)據(jù)盤。如果(在塊212) RAID配置指定了奇偶校驗盤,那么緩存管理器24就(在塊212)針對步長內(nèi)包括的未修改無序記錄來計算奇偶校驗值并且在步長內(nèi)包括(用于P個奇偶校驗盤)的奇偶校驗數(shù)據(jù)。如果(在塊208)第一緩存14內(nèi)沒有足夠的未修改無序記錄用于填充第一步長,那么控制就結(jié)束,直到有足夠數(shù)量的具有就緒降級狀態(tài)的未修改無序記錄可用于填充第一步長為止。(在塊210和212)填充了第一步長之后,緩存管理器14就(在塊214)確定第二緩存18內(nèi)用于在其中包括來自第一步長的記錄的自由第二步長。來自第一步長的記錄(在塊216)作為對第二步長的全步長寫操作被寫入或分散到構(gòu)成第二緩存18的設(shè)備上。在用來自第一步長的記錄填充了第二緩存18內(nèi)的第二步長之后,緩存管理器14就(在塊218)指明步長信息130中用于第二步長的占用率136為充滿。緩存管理器24(在塊220)將用于步長內(nèi)包括的未修改無序記錄的降級狀態(tài)110更新為降級“完成”。盡管圖9中的操作被描述為將第一緩存14中的未修改無序記錄降級以提升至第二緩存18,但是在可選的實施例中,所述操作也可以應(yīng)用于降級不同類型的記錄,例如修改的記錄,有序記錄等。根據(jù)所述實施例,第一緩存14中的未修改記錄被收集并寫為用于第二緩存18的步長,以使一個輸入/輸出(I/o)操作被用于傳輸多個記錄。
在某些實施例中,第一緩存14內(nèi)保留的記錄可以包括不完整記錄,其包括的記錄具有僅用于記錄扇區(qū)的子集的數(shù)據(jù)。這種情況之所以會出現(xiàn),是因為緩存管理器24可以僅進入(stage in)存儲器10中由讀請求所請求的記錄扇區(qū)而并不是記錄的所有扇區(qū)。在第一緩存14針對某些記錄存儲有不完整記錄以及完整記錄(記錄具有用于所有記錄扇區(qū)的數(shù)據(jù))的情況下,與完整記錄相比在一個步長內(nèi)可以包括更多的不完整記錄,并且與具有較少空扇區(qū)的不完整記錄(也就是較為完整的不完整記錄)相比,在一個步長內(nèi)可以包括更多的具有較多空扇區(qū)的不完整記錄。因此,與具有較多扇區(qū)的記錄相比,一個步長可以從第一緩存14中裝入更多的具有較少扇區(qū)的不完整記錄。而且,第二緩存18可以存儲從第一緩存14降級的不完整記錄。因此,第一緩存14中包括在第一步長內(nèi)的記錄被寫為第二緩存18內(nèi)的第二步長可以包括完整記錄和/或不完整記錄。圖10示出了由緩存管理器24執(zhí)行的將記錄加入也就是提升至第一緩存14的操作實施例,該記錄可以包括來自主機2a、2b“*2n的寫入或修改記錄,第二緩存18中接受讀請求并因此移至第一緩存14的無序記錄,或者在緩存14或18中均未發(fā)現(xiàn)并且從存儲器10中獲取的讀請求數(shù)據(jù)。(在塊240)接收要加至第一緩存14的記錄時,如果(在塊242)第一緩存14內(nèi)已經(jīng)包括記錄的副本,那么緩存管理器24就(在塊244)將接收到的記錄寫入第一緩存14。(在塊246)更新用于該記錄的緩存控制塊100 (圖4)以指示具有更新記錄的位置104、數(shù)據(jù)類型(修改/未修改106和有序/無序108)、降級狀態(tài)110,并且更新扇區(qū)圖112以指示更新記錄內(nèi)裝有數(shù)據(jù)的扇區(qū)。在適當?shù)腖RU列表54、56、58內(nèi)用于更新記錄的條目(在塊248)被移動至列表54、56、58的MRU端。如果(在塊242)要加至第一緩存14的記錄在第一緩存14內(nèi)尚未存在,那么緩存管理器24就(在塊250)建立用于待添加記錄的控制塊100 (圖4)以指示第一緩存14內(nèi)的位置104以及記錄是修改/未修改106和有序/無序108,并且在扇區(qū)圖112內(nèi)指示用于該記錄的具有數(shù)據(jù)的扇區(qū)。該控制塊100被加入第一緩存14中的控制塊目錄52。緩存管理器24 (在塊252)向第一緩存記錄索引50內(nèi)加入條目,條目在控制塊目錄52內(nèi)具有待添加記錄的記錄標識符和用于已建立緩存控制塊100的索引。(在塊254)向待添加記錄的記錄類型的LRU列表54、56或58的MRU端加入條目。如果(在塊256)待添加記錄是修改的無序記錄并且如果(在塊258)在第二緩存18內(nèi)存在待添加記錄的副本(正如根據(jù)第二緩存記錄索引70所確定的那樣),那么就(在塊260)例如通過將第二緩存控制塊120內(nèi)用于第二緩存內(nèi)記錄的有效/無效標志128設(shè)置為無效而使第二緩存18內(nèi)的記錄副本無效。如果(在塊256)待添加記錄是未修改的有序記錄,那么控制就結(jié)束。圖11示出了由緩存管理器24執(zhí)行的將記錄從第一緩存14降級至第二緩存18的操作實施例。(在塊280)處理待從第一緩存14降級的記錄時,如果(在塊282)第二緩存18的記錄索引70指示第二緩存18并不包括比從第一緩存14降級的記錄更舊(更老)的記錄版本,那么緩存管理器24就(在塊284)將降級的記錄(其中可以包括不完整或完整的記錄)寫成位于第二緩存18內(nèi)新位置處的新版本記錄。緩存管理器24(在塊286)建立用于寫入記錄的第二緩存控制塊120 (圖5)以指示具有有效數(shù)據(jù)的記錄128的LSA位置124和寫入記錄中在扇區(qū)圖129內(nèi)的非空的扇區(qū)。緩存管理器24(在塊288)向用于加至第二緩存18的記錄的LRU列表74的MRU端加入條目。如果(在塊282)第二緩存18包括舊版本的記錄,那么緩存管理器24就(在塊290)判定降級的記錄是否包括用于記錄中所有扇區(qū)的數(shù)據(jù)(也就是說是完整記錄而不是不完整的記錄)。要降級的記錄是不完整還是完整的判定可以根據(jù)用于待降級記錄的第一緩存控制塊100(圖4)中的扇區(qū)圖112確定。如果(在塊290)記錄為完整記錄,那么緩存管理器24就(在塊292)將要降級的完整記錄寫成位于第二緩存18內(nèi)新位置的新版本記錄。如果(在塊290)待降級記錄是不完整記錄,也就是用于記錄的扇區(qū)圖112表示有空扇區(qū),那么緩存管理器24就(在塊294)根據(jù)用于第二緩存18的扇區(qū)圖129確定要降級的不完整記錄在第二緩存18內(nèi)的舊版本是否包括從第一緩存14降級的不完整記錄內(nèi)所不包括的記錄扇區(qū)。記錄的舊版本可以包括不完整記錄或完整的記錄。舊版本記錄中有數(shù)據(jù)的扇區(qū)的確定可以根據(jù)第二緩存控制塊120(圖5)中用于第二緩存18內(nèi)已有舊版本記錄的扇區(qū)圖129確定。如果舊版本包括在降級的不完整記錄內(nèi)所不包括的扇區(qū),那么緩存管理器24就(在塊296)將從第一緩存14降級的不完整記錄中的扇區(qū)與被降級的不完整記錄中所不包括的舊版本記錄中的扇區(qū)合并為存儲在第二緩存18內(nèi)新位置的新版本記錄。緩存管理器24(在塊298)將新版本的記錄寫入第二緩存18內(nèi)的新位置。如果(在塊294)降級記錄的舊版本不包括在被降級不完整記錄中所不包括的記錄扇區(qū),那么緩存管理器24就(在塊300)將降級的不完整記錄寫成位于第二緩存18內(nèi)新位置的新版本記錄。在從塊292、298或300寫入新紀錄之后,緩存管理器24 (在塊302)將第二緩存18內(nèi)舊版本的記錄無效并(在塊304)更新用于該記錄的第二緩存控制塊120 (圖5)以指示第二緩存18內(nèi)的新位置,并更新扇區(qū)圖129以指示第二緩存18內(nèi)當前具有用于記錄的數(shù)據(jù)的扇區(qū),也就是非空扇區(qū)。緩存管理器24(在塊306)進一步將用于LRU列表74內(nèi)記錄的條目移動至LRU列表74的MRU端。圖12示出了由緩存管理器24執(zhí)行的將記錄從第一緩存14中的第一步長增加至第二緩存18中的第二步長的操作實施例。緩存管理器24 (在塊322)建立用于第二步長的步長信息130 (圖6),指示以第一步長加入的記錄134并指示占用率136為充滿。對于以第一步長加入的每一個記錄,緩存管理器24(在塊324)執(zhí)行圖11中的操作以針對從第一緩存14降級的記錄向第二緩存24內(nèi)的LSA增加記錄,這可以包括將降級的不完整記錄的扇區(qū)與從第一緩存14降級的不完整記錄中所不包括的第二緩存18內(nèi)的舊版本記錄中的扇區(qū)相結(jié)合。圖13示出了由緩存管理器24執(zhí)行的在第二緩存18內(nèi)釋放空間以用于將新紀錄(也就是從第一緩存14降級的記錄)加入第二緩存18的操作實施例。當(在塊350)啟動該操作時,緩存管理器24 (在塊352)確定來自未修改LRU列表74的LRU端的第二緩存18內(nèi)的未修改記錄,并且(在塊354)將確定的未修改記錄無效,而無需將無效的未修改記錄降級至存儲器10,并且還從未修改的LRU列表74中刪除無效的未修改記錄并在用于該記錄的第二緩存控制塊120內(nèi)指示該記錄是無效記錄128。此外,由緩存管理器24選擇的用于從第二緩存18降級的記錄可以來自第二緩存18內(nèi)形成的不同步長。而且,第二緩存內(nèi)的步長可以包括有效和無效記錄,其中通過從第二緩存18降級或者通過在第一緩存18內(nèi)更新記錄來無效記錄。在某些實施例中,緩存管理器24使用不同的記錄降級算法,以通過分別使用單獨的LRU列表58和74針對第一緩存14和第二緩存18確定要降級的記錄來確定從第一緩存14和第二緩存18降級的記錄。用于選擇在第一緩存14和第二緩存18中降級的記錄的算法可以考慮第一緩存14和第二緩存18中的記錄特征以確定首先降級的記錄。圖14示出了由緩存管理器24執(zhí)行的獲取用于對緩存14和18以及存儲器10的讀請求的請求記錄的操作實施例。處理讀請求的存儲管理器22可以向緩存管理器24提交針對請求記錄的請求。當(在塊450)接收到對記錄的請求后,緩存管理器24就(在塊454)利用第一緩存記錄索引50確定是否所有的請求記錄都在第一緩存14內(nèi)。如果(在塊454)并非所有的請求記錄都在第一緩存14內(nèi),那么緩存管理器24就(在塊456)利用第二緩存記錄索引70確定任何在第二緩存18內(nèi)而未在第一緩存14內(nèi)的請求記錄。如果(在塊458)有任何在第一緩存14和第二緩存18內(nèi)均未找到的請求記錄,那么緩存管理器24就(在塊460)根據(jù)第二緩存記錄索引70確定在存儲器10內(nèi)而未在第一緩存14和第二緩存18內(nèi)的所有請求記錄。緩存管理器24隨后(在塊462)將第二緩存18和存儲器10內(nèi)確定的所有記錄提升至第一緩存14。緩存管理器24 (在塊464)利用第一緩存記錄索引50獲取第一緩存14中的請求記錄以返回給讀請求。用于獲取記錄的條目(在塊466)被移動至包括用于獲取記錄的條目在內(nèi)的LRU列表54、56、58的MRU端。通過圖13中的操作,緩存管理器24在進入存儲器10之前首先從最高等級的緩存14獲取請求記錄,然后再從第二緩存18獲取請求記錄,原因是緩存14和18應(yīng)具有請求記錄的最近修改版本。最近修改版本首先應(yīng)在第一緩存14內(nèi)發(fā)現(xiàn),然后如果在第一緩存14內(nèi)未發(fā)現(xiàn)則應(yīng)在第二緩存18內(nèi)發(fā)現(xiàn),并且然后如果在緩存14、18內(nèi)均未發(fā)現(xiàn)則應(yīng)在存儲器10內(nèi)發(fā)現(xiàn)。通過圖14中的操作,緩存管理器24在進入存儲器10之前首先從最高等級的緩存14然后再從第二緩存18獲取請求記錄,原因是緩存14和18應(yīng)具有請求記錄的最近修改版本。最近修改版本首先應(yīng)在第一緩存14內(nèi)發(fā)現(xiàn),然后如果在第一緩存14內(nèi)未發(fā)現(xiàn)則應(yīng)在第二緩存18內(nèi)發(fā)現(xiàn),并且然后如果在緩存14、18內(nèi)均未發(fā)現(xiàn)則應(yīng)在存儲器10內(nèi)發(fā)現(xiàn)。上述實施例提供了以根據(jù)用于第二緩存的RAID配置定義的步長在第一緩存內(nèi)分組記錄的技術(shù),以使第一緩存內(nèi)的記錄能夠以用于第二緩存的步長分組。第二緩存內(nèi)緩存的記錄可以隨后被分組為根據(jù)用于存儲器的RAID配置定義的步長,并隨后寫入存儲系統(tǒng)中。上述實施例提供了用于將第一緩存中的記錄降級至具有不完整記錄的第二緩存的技術(shù),以將被降級的不完整記錄中的扇區(qū)與第二緩存的舊版本記錄中被降級的不完整記錄內(nèi)未包含的所有扇區(qū)合并。合并的記錄可以隨后寫入第二緩存內(nèi)的新位置。所述操作可以利用標準編程和/或工程技術(shù)實施為方法、裝置或計算機程序產(chǎn)品以生產(chǎn)軟件、固件、硬件或其任意組合。因此,實施例的應(yīng)用可以采用完全為硬件的實施例、完全為軟件的實施例(包括固件、常駐軟件、微代碼等)或者組合軟件和硬件應(yīng)用的實施例的形式,它們在本文中全都可以被統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。而且,實施例的應(yīng)用可以采用在其上裝有計算機可讀取程序代碼的一種或多種計算機可讀取介質(zhì)內(nèi)實施的計算機程序產(chǎn)品的形式??梢允褂靡环N或多種計算機可讀取介質(zhì)的任意組合。計算機可讀取介質(zhì)可以是計算機可讀取信號介質(zhì)或者計算機可讀取存儲介質(zhì)。計算機可讀取存儲介質(zhì)例如可以是但不局限于電、磁、光學(xué)、電磁、紅外或半導(dǎo)體系統(tǒng)、裝置或設(shè)備,或者是上述類型的任意適用組合。計算機可讀取存儲介質(zhì)的更多具體示例(非窮舉性列表)可以包括以下內(nèi)容:具有一條或多條線路的電連接,便攜式計算機磁盤,硬盤,隨機存取存儲器(RAM),只讀存儲器(ROM),可擦除可編程只讀存儲器(EPR0M或閃存存儲器),光纖,便攜光盤只讀存儲器(CD-ROM),光存儲設(shè)備,磁存儲設(shè)備或上述內(nèi)容的任意適用組合。在本文獻的語境中,計算機可讀取存儲介質(zhì)可以是能夠包含或者存儲程序以供使用或者與指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合使用的任何實體介質(zhì)。計算機可讀取信號介質(zhì)可以包括例如在基帶中或者作為載波的一部分與其中實施的計算機可讀取程序代碼一起傳播的數(shù)據(jù)信號。這樣的傳播信號可以采用多種形式中的任何一種,包括但不限于電磁信號、光信號或其任意合適的組合。計算機可讀取信號介質(zhì)可以是并非計算機可讀取存儲介質(zhì)并且能夠通信、傳播或者輸送程序以供使用或者與指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合使用的任意計算機可讀取介質(zhì)。在計算機可讀取介質(zhì)上實施的程序代碼可以利用任意合適的介質(zhì)傳輸,包括但不限于無線、有線線路、光纖光纜、RF等或者上述內(nèi)容任意合適的組合。用于實現(xiàn)本發(fā)明應(yīng)用中操作的計算機程序代碼可以用一種或多種編程語言的任意組合編寫,包括面向?qū)ο蟮木幊陶Z言例如Java、Smalltalk、C++等以及傳統(tǒng)的過程編程語言例如C編程語言或類似的編程語言。程序代碼可以完全在用戶的計算機上運行,部分在用戶的計算機上運行,作為單獨的軟件包運行,部分在用戶的計算機上運行并且部分在遠程計算機上運行,或者完全在遠程計算機或服務(wù)器上運行。在后兩種情形中,遠程計算機可以通過任何類型的網(wǎng)絡(luò)連接至用戶的計算機,包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN),或者連接可以通往外部計算機(例如使用互聯(lián)網(wǎng)服務(wù)供應(yīng)商通過互聯(lián)網(wǎng)實現(xiàn))。以上根據(jù)本發(fā)明的實施例參照方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或方塊圖介紹了本發(fā)明的各種應(yīng)用。應(yīng)該理解流程圖和/或方塊圖中的每一個模塊以及流程圖和/或方塊圖中的模塊組合都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以被提供給通用計算機、專用計算機或用于生產(chǎn)機械的其他可編程數(shù)據(jù)處理裝置的處理器以使得通過計算機或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行指令來創(chuàng)建用于實現(xiàn)流程圖和/或方塊圖中的一個或多個模塊中列舉的功能/動作的方法。這些計算機程序指令也可以被存儲在能夠引導(dǎo)計算機、其他可編程數(shù)據(jù)處理裝置或以特定方式工作的其他設(shè)備的計算機可讀取介質(zhì)內(nèi),以使存儲在計算機可讀取介質(zhì)內(nèi)的指令生產(chǎn)出的制品包括有實現(xiàn)了流程圖和/或方塊圖中的一個或多個模塊中列舉的功能/動作的指令。計算機程序指令也可以被載入到計算機、其他可編程數(shù)據(jù)處理裝置或其他設(shè)備上以促使在計算機、其他可編程裝置或其他設(shè)備上執(zhí)行一系列操作步驟,從而生成計算機實現(xiàn)的過程,以使得在計算機或其他可編程裝置上執(zhí)行的指令提供用于實現(xiàn)在流程圖和/或方塊圖中的一個或多個模塊中列舉的功能/動作的過程。除非另有明確說明,否則術(shù)語“一個實施例”、“實施例”、“多個實施例”、“所述實施例”、“所述多個實施例”、“ 一個或多個實施例”、“部分實施例”和“ 一個實施例”是指“本發(fā)明的一個或多個(但并不是全部的)實施例”。除非另有明確說明,否則術(shù)語“包含”、“包括”、“具有”及其變形是指“包括但不限于”。除非另有明確說明,否則列舉的項目列表并不意味著任何或全部的項目互相排斥。除非另有明確說明,否則術(shù)語“一”、“一個”和“這個”是指“一個或多個”。除非另有明確說明,否則彼此通信的設(shè)備不需要彼此間連續(xù)通信。另外,彼此通信的設(shè)備可以直接通信或者通過一個或多個媒介間接通信。對其中若干部件彼此通信的實施例的說明并不意味著需要所有這樣的部件。相反,介紹了多種可選部件以說明本發(fā)明可行實施例的多樣性。而且,盡管過程步驟、方法步驟、算法等可能是以一定的先后順序進行介紹,但是這些過程、方法和算法也可以被設(shè)置為以不同的順序工作。換句話說,任何可能已介紹過的步驟次序或順序都并不必然表示需要用這樣的順序來執(zhí)行所述步驟。本文中介紹的過程步驟可以用任何實用的順序執(zhí)行。例如,部分步驟可以同時執(zhí)行。在本文中介紹單個設(shè)備或?qū)ο髸r,顯而易見的是可以使用多于一個設(shè)備/對象(無論它們是否協(xié)作)以代替單個設(shè)備/對象。類似地,在本文中介紹多于一個設(shè)備或?qū)ο?無論它們是否協(xié)作)時,顯而易見的是可以使用單個設(shè)備/對象來代替多于一個的設(shè)備或?qū)ο蠡蛘呖梢允褂貌煌瑪?shù)量的設(shè)備/對象來代替圖示數(shù)量的設(shè)備或程序。設(shè)備的功能和/或特性可以可選地通過一種或多種其他的并未明確表述為具有這種功能/特性的設(shè)備來實施。因此,本發(fā)明的其他實施例無序包括所述設(shè)備自身。圖中示出的操作給出了按照一定順序進行的某些事件。在可選實施例中,某些操作可以按照不同的順序執(zhí)行、修改或刪除。而且,可以向上述邏輯中增加步驟并且仍然適用于上述實施例。而且,本文中介紹的操作可以順序執(zhí)行或者某些操作可以并行處理。更進一步地,操作可以由單個處理單元或者由分布式處理單元執(zhí)行。以上給出對本發(fā)明各種實施例的介紹是為了進行解釋和說明。不應(yīng)將其理解為窮舉或者將本發(fā)明限制為公開的具體形式。根據(jù)上述教導(dǎo)可以得到多種修改和變形。應(yīng)該理解本發(fā)明的保護范圍不應(yīng)由這些具體實施方式
限定,而是應(yīng)該由本文所附的權(quán)利要求限定。以上的說明內(nèi)容、示例和數(shù)據(jù)提供了制備和使用本發(fā)明組成的完整描述。由于能夠不背離本發(fā)明實質(zhì)和保護范圍地獲得本發(fā)明的很多實施例,因此本發(fā)明應(yīng)以本文所附的權(quán)利要求為基礎(chǔ)。
權(quán)利要求
1.一種與存儲系統(tǒng)通信的系統(tǒng),包括: 處理器; 可供處理器訪問的第一緩存; 可供處理器訪問的第二緩存; 計算機可讀取存儲介質(zhì),具有在其中實施的由處理器執(zhí)行以執(zhí)行操作的計算機可讀取程序代碼,所述操作包括: 確定要從第一緩存降級至第二緩存的記錄,其中第一緩存內(nèi)的記錄對應(yīng)于存儲系統(tǒng)內(nèi)的記錄并且包括多個扇區(qū); 確定第二緩存是否包括從第一緩存降級的舊版本記錄; 響應(yīng)于確定第二緩存包括舊版本記錄,確定舊版本記錄是否包括在從第一緩存降級的記錄中所未包括的記錄扇區(qū); 將從第一緩存降級的記錄的扇區(qū)與舊版本記錄中未包含在從第一緩存降級的記錄內(nèi)的扇區(qū)合并為新版本的記錄;并且 將新版本的記錄寫入第二緩存。
2.如權(quán)利要求1所述的系統(tǒng),其中所述操作進一步包括: 響應(yīng)于將新版本的記錄寫入第二緩存而使第二緩存內(nèi)的舊版本記錄無效。
3.如權(quán)利要求1所述的系統(tǒng),其中所述操作進一步包括: 確定被降級的記錄是否包括用于記錄的所有扇區(qū)的數(shù)據(jù),其中確定舊版本記錄是否包括在從第一緩存降級的記錄中所未包括的記錄扇區(qū)是響應(yīng)于確定被降級的記錄并不包括用于記錄的所有扇區(qū)的數(shù)據(jù)而執(zhí)行的。
4.如權(quán)利要求3所述的系統(tǒng),其中響應(yīng)于被降級記錄不包括記錄的所有扇區(qū)以及舊版本記錄不包括被降級記錄內(nèi)所未包括的所有記錄扇區(qū),新版本的記錄包括不完整的記錄,所述不完整記錄包括的扇區(qū)少于記錄的所有扇區(qū)。
5.如權(quán)利要求3所述的系統(tǒng),其中響應(yīng)于被降級記錄不包括記錄的所有扇區(qū)以及舊版本記錄包括被降級記錄內(nèi)所未包括的記錄的所有扇區(qū),新版本的記錄包括完整的記錄,所述完整的記錄包括記錄的所有扇區(qū)。
6.如權(quán)利要求3所述的系統(tǒng),其中所述操作進一步包括: 響應(yīng)于確定被降級記錄包括用于記錄的所有扇區(qū)的數(shù)據(jù),將被降級記錄寫為新版本的記錄。
7.如權(quán)利要求3所述的系統(tǒng),其中所述操作進一步包括: 響應(yīng)于確定被降級記錄未包括用于所有記錄扇區(qū)的數(shù)據(jù)并且在第二緩存內(nèi)沒有舊版本的記錄,將被降級記錄寫為新版本的記錄,其中被降級記錄可以包括不完整的記錄或完整的記錄,所述不完整的記錄并未包括記錄的所有扇區(qū),所述完整的記錄則包括記錄的所有扇區(qū)。
8.如權(quán)利要求1所述的系統(tǒng),其中舊版本的記錄包括先前從第一緩存降級至第二緩存的記錄扇區(qū),并且其中新版本的記錄被寫入第二緩存內(nèi)未包括舊版本記錄的位置。
9.如權(quán)利要求1所述的系統(tǒng),其中從第一緩存降級的記錄被包括在具有從第一記錄降級的記錄的第一步長內(nèi),其中所述操作進一步包括: 在不含有效記錄的第二緩存內(nèi)將記錄從第一步長寫為第二步長。
10.如權(quán)利要求9所述的系統(tǒng),其中確定記錄降級的操作,確定第二緩存是否包括舊版本的操作,確定舊版本是否包括在被降級記錄內(nèi)所未包括的扇區(qū)的操作,合并扇區(qū)的操作以及寫入新版本的操作是針對從第一步長寫為第二步長的每一條記錄執(zhí)行的。
11.一種用于在包括第一緩存、第二緩存和存儲系統(tǒng)的緩存系統(tǒng)內(nèi)管理數(shù)據(jù)的方法,包括: 確定要從第一緩存降級至第二緩存的記錄,其中第一緩存內(nèi)的記錄對應(yīng)于存儲系統(tǒng)內(nèi)的記錄并且包括多個扇區(qū); 確定第二緩存是否包括從第一緩存降級的舊版本的記錄; 響應(yīng)于判定第二緩存包括舊版本的記錄,確定舊版本記錄是否包括在從第一緩存降級的記錄中所未包括的記錄扇區(qū); 將從第一緩存降級的記錄中的扇區(qū)與舊版本記錄中未包含在從第一緩存降級的記錄內(nèi)的扇區(qū)合并為新版本的記錄;并且 將新版本的記錄寫入第二緩存。
12.如權(quán)利要求11所述的方法,其中所述操作進一步包括: 確定被降級的記錄是否包括用于所有記錄扇區(qū)的數(shù)據(jù),其中確定舊版本記錄是否包括在從第一緩存降級的記錄中所未包括的記錄扇區(qū)是響應(yīng)于確定被降級的記錄并不包括用于所有記錄扇區(qū)的數(shù)據(jù)而執(zhí)行的。
13.如權(quán)利要求 11所述的方法,其中所述操作進一步包括: 響應(yīng)于將新版本的記錄寫入第二緩存而使第二緩存內(nèi)的舊版本記錄無效。
14.如權(quán)利要求13所述的方法,其中響應(yīng)于被降級記錄不包括記錄的所有扇區(qū)以及舊版本記錄不包括被降級記錄內(nèi)所未包括的所有記錄扇區(qū),新版本的記錄包括不完整的記錄,所述不完整的記錄包括的扇區(qū)少于記錄的所有扇區(qū)。
15.如權(quán)利要求13所述的方法,其中響應(yīng)于被降級記錄不包括記錄的所有扇區(qū)以及舊版本記錄包括被降級記錄內(nèi)所未包括的記錄的所有扇區(qū),新版本的記錄包括完整的記錄,所述完整的記錄包括記錄的所有扇區(qū)。
16.如權(quán)利要求13所述的方法,其中所述操作進一步包括: 響應(yīng)于確定被降級記錄包括用于記錄的所有扇區(qū)的數(shù)據(jù),將被降級記錄寫為新版本的記錄。
17.如權(quán)利要求13所述的方法,其中所述操作進一步包括: 響應(yīng)于確定被降級記錄未包括用于記錄的所有扇區(qū)的數(shù)據(jù)并且在第二緩存內(nèi)沒有舊版本的記錄,將被降級記錄寫為新版本的記錄,其中被降級記錄可以包括不完整的記錄或完整的記錄,所述不完整的記錄并未包括記錄的所有扇區(qū),所述完整的記錄則包括記錄的所有扇區(qū)。
18.如權(quán)利要求11所述的方法,其中舊版本的記錄包括先前從第一緩存降級至第二緩存的記錄扇區(qū)并且其中新版本的記錄被寫入第二緩存內(nèi)未包括舊版本記錄的位置。
19.如權(quán)利要求11所述的方法,其中從第一緩存降級的記錄被包括在具有從第一記錄降級的記錄的第一步長內(nèi),其中所述操作進一步包括: 在不含有效記錄的第二緩存內(nèi)將記錄從第一步長寫為第二步長。
20.如權(quán)利要求19所述的方法,其中確定記錄降級的操作,確定第二緩存是否包括舊版本的操作,確定舊版本是否包括被降級記錄內(nèi)所未包括的扇區(qū)的操作,合并扇區(qū)的操作以及寫入新版本的操作 是針對從第一步長寫為第二步長的每一條記錄執(zhí)行的。
全文摘要
本發(fā)明是用于將不完整記錄從第一緩存降級至第二緩存的系統(tǒng)和方法。對記錄進行從第一緩存降級至第二緩存的判定,其中第一緩存內(nèi)的記錄對應(yīng)于存儲系統(tǒng)內(nèi)的記錄并且包括多個扇區(qū)。響應(yīng)于判定第二緩存包括從第一緩存降級的舊版本記錄,就舊版本的記錄是否包括在從第一緩存降級的記錄中未包含的記錄扇區(qū)進行判定。將從第一緩存降級的記錄中的扇區(qū)與記錄舊版本中未包含在從第一緩存降級的記錄內(nèi)的扇區(qū)合并為記錄的新版本。將記錄的新版本寫入第二緩存。
文檔編號G06F12/08GK103207840SQ201310016878
公開日2013年7月17日 申請日期2013年1月17日 優(yōu)先權(quán)日2012年1月17日
發(fā)明者K·J·埃士, M·T·本哈斯, L·M·伽普他 申請人:國際商業(yè)機器公司