本發(fā)明涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,特別涉及一種更新反向映射元數(shù)據(jù)的方法及裝置。
背景技術(shù):
在大數(shù)據(jù)的背景下,數(shù)據(jù)存儲技術(shù)發(fā)展迅速。如今,為實現(xiàn)節(jié)省存儲空間的目的,一個數(shù)據(jù)塊在服務(wù)器中存儲一次即可,如果某些應(yīng)用需使用該數(shù)據(jù)塊,則不必重復(fù)存儲,而是為這些應(yīng)用分配VLUN(Virtual LUN(Logical Unit Number,邏輯單元號),虛擬邏輯單元號),且VLUN的VLBA(Virtual LUN(Logical Unit Number,邏輯單元號)Logic Block Address,虛擬邏輯區(qū)塊地址)上存儲該數(shù)據(jù)塊所在的PLBA(Physical LUN(Logical Unit Number,邏輯單元號)Logic Block Address,物理邏輯區(qū)塊地址),使得VLBA可以引用數(shù)據(jù)塊。當(dāng)然,如果數(shù)據(jù)塊不再被引用,則需回收數(shù)據(jù)塊所在的存儲空間。因此,每次數(shù)據(jù)塊被引用時,則添加一個PLBA到VLBA的反向映射元數(shù)據(jù),以標(biāo)志該數(shù)據(jù)塊處于被引用狀態(tài)。一旦檢測到不存在反向映射元數(shù)據(jù)對應(yīng)該PLBA,則對PLBA所在的存儲區(qū)域進行回收。當(dāng)然,隨著應(yīng)用對數(shù)據(jù)塊需求的變化,反向映射元數(shù)據(jù)可能會更新。
例如,對于服務(wù)器中已存儲的數(shù)據(jù)塊A,當(dāng)建立或取消VLBA到PLBA的引用關(guān)系時,生成反向映射元數(shù)據(jù)的更新請求,進而,服務(wù)器在系統(tǒng)日志中記錄該更新請求,再基于更新請求的標(biāo)識,在緩存中更新反向映射元數(shù)據(jù)。如果該標(biāo)識指示添加反向映射元數(shù)據(jù),則將更新請求存儲至緩存中,如果該標(biāo)識指示刪除反向映射元數(shù)據(jù),則將緩存中具有相同反向映射元數(shù)據(jù)的更新請求刪除。需要說明的是,對應(yīng)同一個PLBA的更新請求在緩存中有序存儲。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
由于對應(yīng)同一個PLBA的更新請求在緩存中有序存儲,則每次更新反向映射元數(shù)據(jù)時,如,在緩存中插入新的更新請求或者刪除舊的更新請求,緩存中更新請求的存儲位置均會重新調(diào)整,造成一定的時延,導(dǎo)致更新效率低。由于反向映射元數(shù)據(jù)的數(shù)據(jù)量大,則在緩存中存儲反向映射元數(shù)據(jù)會占用大量內(nèi)存。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問題,本發(fā)明實施例提供了一種更新反向映射元數(shù)據(jù)的方法及裝置。所述技術(shù)方案如下:
第一方面,提供了一種更新反向映射元數(shù)據(jù)的方法,所述方法包括:
接收更新請求,所述更新請求用于指示添加或刪除反向映射元數(shù)據(jù);將所述更新請求存儲至系統(tǒng)日志;根據(jù)回收進程的工作狀態(tài),判斷是否在所述緩存中更新所述反向映射元數(shù)據(jù);如果確定不在所述緩存中更新所述反向映射元數(shù)據(jù),則直到回收進程啟動之前,或所述系統(tǒng)日志已滿時,將所述系統(tǒng)日志中所存儲的更新請求合并至指定存儲區(qū)域中的反向映射元數(shù)據(jù)。
其中,系統(tǒng)日志用于服務(wù)器存儲更新請求,在存儲時,以保護反向映射元數(shù)據(jù)的完整性、安全性為目的,不會對更新請求做進一步處理。
回收進程是指服務(wù)器回收存儲區(qū)域的進程,一般地,服務(wù)器可以在回收進程中刪除沒有反向映射元數(shù)據(jù)對應(yīng)的存儲區(qū)域上的數(shù)據(jù)塊,從而回收該存儲區(qū)域。
回收進程的工作狀態(tài)是指回收進程是否啟動,或者回收進程啟動之后所達到的階段。
指定存儲區(qū)域是指與服務(wù)器連接的存儲區(qū)域,可用于存儲反向映射元數(shù)據(jù)即可,本發(fā)明對指定存儲區(qū)域不做具體限定。例如,指定存儲區(qū)域可以是SAN(Storage Area Network,存儲區(qū)域網(wǎng)絡(luò))、磁盤或NAS(Network Attached Storage,網(wǎng)絡(luò)附加存儲)。一般地,指定存儲區(qū)域的存儲空間較大,還可以用于存儲服務(wù)器所需的各種數(shù)據(jù),如,本發(fā)明實施例涉及的數(shù)據(jù)塊及反向映射元數(shù)據(jù)。
本發(fā)明實施例中,服務(wù)器根據(jù)回收進程的工作狀態(tài),判斷是否在所述緩存中更新所述反向映射元數(shù)據(jù),從而提供了不在緩存中更新反向映射元數(shù)據(jù)的方案,在回收進程啟動之前,從系統(tǒng)日志中已存儲的更新請求提取出反向映射元數(shù)據(jù),且合并至指定存儲區(qū)域上,以保證反向映射元數(shù)據(jù)的完整性。由于反向映射元數(shù)據(jù)更新頻繁,但是基本僅在回收進程中使用,因此,本發(fā)明實施例對于多數(shù)更新反向映射元數(shù)據(jù)的過程可以減少時延,提高更新效率,且占用較少內(nèi)存。
在第一方面的第一種可能實現(xiàn)方式中,所述根據(jù)回收進程的工作狀態(tài),判斷是否在所述緩存中更新所述反向映射元數(shù)據(jù)包括:
檢測是否啟動所述回收進程;
如果啟動所述回收進程,則判斷所述更新請求對應(yīng)的第一存儲區(qū)域是否處于所述回收進程;
如果所述第一存儲區(qū)域處于所述回收進程,則判斷所述緩存是否已滿;
如果所述緩存未滿,則確定在所述緩存中更新所述反向映射元數(shù)據(jù);或,
如果所述緩存已滿,則確定在所述緩存中更新所述反向映射元數(shù)據(jù),并刪除所述緩存中對應(yīng)于同一個第二存儲區(qū)域且占用緩存空間最大的更新請求,且將第二存儲區(qū)域從所述回收列表中移除。
在第一種可能實現(xiàn)方式中,在第一存儲區(qū)域處于回收進程時,服務(wù)器允許在緩存中更新反向映射元數(shù)據(jù),使得回收進程中服務(wù)器可以從緩存中讀取到最新的更新請求,并基于最新的更新請求進行回收,提高了回收準(zhǔn)確性。而且,在緩存已滿的情況下,提供了釋放緩存空間的方式,從而留出緩存的存儲資源,提高緩存的利用率。
在第一方面的第二種可能實現(xiàn)方式中,所述根據(jù)回收進程的工作狀態(tài),判斷是否在所述緩存中更新所述反向映射元數(shù)據(jù)包括:
如果未啟動所述回收進程,則確定不在所述緩存中更新所述反向映射元數(shù)據(jù);或,
如果所述第一存儲區(qū)域未處于所述回收進程,則確定不在所述緩存中更新所述反向映射元數(shù)據(jù);或,
如果所述緩存已滿,則確定不在所述緩存中更新所述反向映射元數(shù)據(jù),并刪除所述緩存中對應(yīng)所述第一存儲區(qū)域的更新請求,且將第一存儲區(qū)域從回收列表中移除,所述回收列表用于指示本次回收進程中所要回收的存儲區(qū)域。
在第二種可能實現(xiàn)方式中,提供了多種用于判斷是否需要在緩存中更新該反向映射元數(shù)據(jù)的方式,基于回收進程是否啟動或第一存儲區(qū)域是否處于回收進程等具體的運行狀態(tài),來確定后續(xù)的具體實現(xiàn)方式,服務(wù)器未啟動回收進程,或者第一存儲區(qū)域未處于回收進程,或者緩存已滿時,由于反向映射元數(shù)據(jù)已在系統(tǒng)日志中存儲過,不必在緩存中更新反向映射元數(shù)據(jù),解決了相關(guān)技術(shù)占用大量內(nèi)存、時延高、更新效率低問題。另外,該方式在緩存已滿時提供了釋放緩存空間的策略,從而留出更多的存儲資源,以提高緩存的利用率,進一步提高服務(wù)器的讀寫效率。
在第一方面的第三種可能實現(xiàn)方式中,所述如果所述緩存未滿,則確定在所述緩存中更新所述更新請求之后,所述方法還包括:
判斷所述回收進程的進度;
如果所述回收進程已完成從所述緩存及所述指定存儲區(qū)域中讀取對應(yīng)所述第一存儲區(qū)域的反向映射元數(shù)據(jù)的過程,且所述更新請求指示添加反向映射元數(shù)據(jù),則為所述第一存儲區(qū)域添加指定標(biāo)記,所述指定標(biāo)記用于指示在本次回收進程中不回收被標(biāo)記的存儲區(qū)域。
在第三種可能實現(xiàn)方式中,如果回收進程已完成從緩存及指定存儲區(qū)域中讀取對應(yīng)第一存儲區(qū)域的反向映射元數(shù)據(jù)的過程,說明當(dāng)前所更新的反向映射元數(shù)據(jù)沒有在回收進程中被讀取,此時,為了避免第一存儲區(qū)域被誤刪,服務(wù)器為第一存儲區(qū)域添加指定標(biāo)記,從而提高回收的準(zhǔn)確性。
在第一方面的第四種可能實現(xiàn)方式中,所述方法還包括:
當(dāng)啟動所述回收進程時,基于所述緩存及所述指定存儲區(qū)域中的反向映射元數(shù)據(jù)執(zhí)行所述回收進程,所述回收進程用于回收不具有指定標(biāo)記且不具有反向映射元數(shù)據(jù)的存儲區(qū)域;
當(dāng)本次回收進程結(jié)束時,刪除所述指定標(biāo)記及所述緩存中所有的反向映射元數(shù)據(jù);
其中,所述本次回收進程完成對任一存儲區(qū)域的回收時,刪除所述緩存中對應(yīng)所述任一存儲區(qū)域的反向映射元數(shù)據(jù)。
在第四種可能實現(xiàn)方式中,更新反向映射元數(shù)據(jù)時,如果回收進程也在進行,則服務(wù)器在檢測到所要回收的存儲區(qū)域具有指定標(biāo)記時,不對該存儲區(qū)域進行回收,以保證當(dāng)前所更新的反向映射元數(shù)據(jù)、或者所刪除的反向映射元數(shù)據(jù)中的VLBA可以引用該存儲區(qū)域上的數(shù)據(jù)塊。而且,在回收進程結(jié)束時,服務(wù)器可以刪除指定標(biāo)記,使得該存儲區(qū)域在之后的回收進程中可以被回收。另外,該方式提供了兩種釋放緩存空間的策略,從而留出更多的存儲資源,以提高緩存的利用率,進一步提高服務(wù)器的讀寫效率。
第二方面,提供了一種服務(wù)器,該服務(wù)器包括:處理器、網(wǎng)絡(luò)接口、存儲器以及總線,存儲器與網(wǎng)絡(luò)接口分別通過總線與處理器相連;處理器被配置為執(zhí)行存儲器中存儲的指令;處理器通過執(zhí)行指令來實現(xiàn)上述第一方面或第一方面中任意一種可能的實現(xiàn)方式所提供的更新反向映射元數(shù)據(jù)的方法。
第三方面,提供了一種服務(wù)器,該服務(wù)器包括至少一個模塊,該至少一個模塊用于實現(xiàn)上述第一方面或第一方面中任意一種可能的實現(xiàn)方式所提供的更新反向映射元數(shù)據(jù)的方法。
上述第二方面和第三方面所獲得的技術(shù)效果與第一方面對應(yīng)的技術(shù)手段獲得的技術(shù)效果近似,在這里不再贅述。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例提供的一種服務(wù)器集群系統(tǒng)的組成圖;
圖2是本發(fā)明實施例提供的一種服務(wù)器的結(jié)構(gòu)示意圖;
圖3是本發(fā)明實施例提供的一種更新反向映射元數(shù)據(jù)的方法流程圖;
圖4是本發(fā)明實施例提供的一種回收方法流程圖;
圖5是本發(fā)明實施例提供的一種更新反向映射元數(shù)據(jù)的裝置結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。
圖1是本發(fā)明實施例提供的一種服務(wù)器集群系統(tǒng)的組成圖。如圖1所示,該服務(wù)器集群系統(tǒng)通過網(wǎng)絡(luò)層與應(yīng)用客戶端或者存儲管理中心通信,所述服務(wù)器集群系統(tǒng)由服務(wù)器和網(wǎng)絡(luò)存儲節(jié)點(本實施例以SAN存儲設(shè)備為例)組成,服務(wù)器和網(wǎng)絡(luò)存儲節(jié)點均可以是一個或多個,本實施例以2臺SAN存儲節(jié)點為例,每臺服務(wù)器的物理設(shè)備包含CPU、內(nèi)存、網(wǎng)絡(luò)和硬盤等,網(wǎng)絡(luò)存儲節(jié)點的物理設(shè)備包含存儲陣列和存儲陣列的控制器,本實施例將服務(wù)器的CPU和內(nèi)存等用于為接入所述服務(wù)器集群系統(tǒng)的應(yīng)用程序提供計算資源的物理設(shè)備統(tǒng)稱為所述服務(wù)器集群系統(tǒng)的計算資源,其為組成計算層的基礎(chǔ),將存儲資源層的服務(wù)器的硬盤和網(wǎng)絡(luò)存儲節(jié)點的存儲陣列統(tǒng)稱為所述服務(wù)器集群系統(tǒng)的存儲資源。
所述服務(wù)器集群用于對外將計算資源提供給不同的應(yīng)用程序使用,例如可以在所述服務(wù)器集群上運行WEB應(yīng)用或者HADOOP分布式集群系統(tǒng)。所述服務(wù)器集群的計算資源還可以進一步被抽象成多臺虛擬機,在每臺虛擬機上運行不同的應(yīng)用程序,或者多臺虛擬機組成虛擬機集群從而為同一個應(yīng)用程序提供服務(wù),本實施例對具體實現(xiàn)形式不拘一格。當(dāng)所述服務(wù)器集群上運行應(yīng)用程序,所述應(yīng)用程序的相關(guān)數(shù)據(jù)可以存儲在所述服務(wù)器集群系統(tǒng)的存儲資源上,即存儲在服務(wù)器的硬盤上或者SAN節(jié)點的存儲陣列中,也可以同時存儲在服務(wù)器的硬盤和SAN節(jié)點的存儲陣列中。
所述服務(wù)器集群系統(tǒng)還運行了分布式存儲控制器,所述分布式存儲控制器用于將服務(wù)器的硬盤和網(wǎng)絡(luò)存儲節(jié)點(如SAN)提供的存儲陣列的存儲資源劃分為多個存儲分區(qū),所述多個存儲分區(qū)組成所述服務(wù)器集群系統(tǒng)的共享存儲資源池,運行在所述服務(wù)器集群上的應(yīng)用程序可以從所述共享存儲資源池中獲得分布的存儲資源塊并進行使用,保證了存儲資源的較高的利用率和存儲的均勻分布,并由此提升了存儲資源的讀寫效率。在本發(fā)明實施例中所述分布式存儲控制器通過安裝在服務(wù)器的硬件設(shè)備上的軟件模塊來實現(xiàn),從而可以避免另外購置硬件設(shè)備作為存儲控制設(shè)備的問題,解決方案更加經(jīng)濟并節(jié)約成本。
本發(fā)明實施例所述分布式存儲控制器是對每臺服務(wù)器上運行的存儲控制功能模塊的統(tǒng)稱,作為解決方案提供的分布式存儲控制器可以包含不同的功能模塊,而在實際部署的時候,每臺服務(wù)器根據(jù)其功能和部署策略可以運行分布式存儲控制器的不同的功能模塊,也就是說,根據(jù)服務(wù)器集群的部署策略,可以在不同的服務(wù)器上運行分布式存儲控制器的不同的功能模塊,每臺服務(wù)器可以運行分布式存儲控制器所有的功能模塊,也可以運行分布式存儲控制器部分的功能模塊。分布式存儲控制器主要用于:對所述服務(wù)器集群系統(tǒng)的計算資源提供數(shù)據(jù)訪問的接口,以及對所述服務(wù)器集群系統(tǒng)的共享存儲資源進行管理和讀寫控制。
需要說明的是,本發(fā)明實施例提供的服務(wù)器可以為存儲系統(tǒng)中任一個用于進行數(shù)據(jù)管理的服務(wù)器。圖2是本發(fā)明實施例提供的一種服務(wù)器的結(jié)構(gòu)示意圖,該服務(wù)器20包括:處理器22和網(wǎng)絡(luò)接口24。
處理器22包括一個或者一個以上處理核心。處理器22通過運行軟件程序以及模塊,從而執(zhí)行下述更新反向映射元數(shù)據(jù)的方法所涉及的各種功能應(yīng)用以及數(shù)據(jù)處理。
網(wǎng)絡(luò)接口24可以為多個,該網(wǎng)絡(luò)接口24用于與其它通信設(shè)備、業(yè)務(wù)終端或者網(wǎng)絡(luò)設(shè)備進行通信。
在一種可能的實現(xiàn)方式中,服務(wù)器20還包括存儲器26、總線28等部件。其中,存儲器26與網(wǎng)絡(luò)接口24分別通過總線28與處理器22相連。
存儲器26可用于存儲軟件程序以及模塊。具體的,存儲器26可存儲操作系統(tǒng)262、至少一個功能所需的應(yīng)用程序模塊264。操作系統(tǒng)262可以是實時操作系統(tǒng)(Real Time Operating System,RTOS)、LINUX、UNIX、WINDOWS或OS X之類的操作系統(tǒng)。
圖3是本發(fā)明實施例提供的一種更新反向映射元數(shù)據(jù)的方法流程圖。參見圖3,該實施例應(yīng)用于服務(wù)器,并以SAN(Storage Area Network,存儲域網(wǎng)絡(luò))作為指定存儲區(qū)域為例進行說明,事實上,指定存儲區(qū)域也可以是磁盤或NAS(Network Attached Storage,網(wǎng)絡(luò)附加存儲)。該實施例具體步驟包括:
301、服務(wù)器接收更新請求,更新請求用于指示添加或刪除反向映射元數(shù)據(jù)。
在該步驟中,更新請求攜帶反向映射元數(shù)據(jù),且具有添加標(biāo)識或者刪除標(biāo)識,添加標(biāo)識用于指示添加該反向映射元數(shù)據(jù),刪除標(biāo)識則用于指示刪除該反向映射元數(shù)據(jù)。其中,反向映射元數(shù)據(jù)用于描述一個數(shù)據(jù)塊所在的PLBA(Physical LUN Logic Block Address,物理邏輯區(qū)塊地址)到VLBA(Virtual LUN Logic Block Address,虛擬邏輯區(qū)塊地址)映射關(guān)系,顯然,反向映射元數(shù)據(jù)包括PLBA及VLBA。
由于應(yīng)用中對數(shù)據(jù)塊的需求可能隨時改變,一旦建立VLBA到PLBA引用的關(guān)系,或者取消VLBA到PLBA的引用關(guān)系,說明PLBA所存儲的數(shù)據(jù)塊不再被VLBA對應(yīng)的應(yīng)用使用,此時,生成更新請求,并觸發(fā)反向映射元數(shù)據(jù)的更新進程。需要說明的是,更新反向映射元數(shù)據(jù)的意義在于:如果某個數(shù)據(jù)塊被引用,則存在反向映射元數(shù)據(jù)對應(yīng)該數(shù)據(jù)塊所在的PLBA,使得回收進程中不會刪除該數(shù)據(jù)塊,而是將數(shù)據(jù)塊復(fù)制到不被回收的存儲區(qū)域,再對原來PLBA所在的存儲區(qū)域進行回收;如果某個數(shù)據(jù)塊不再被引用,則不存在反向映射元數(shù)據(jù)對應(yīng)該數(shù)據(jù)塊所在的PLBA,使得回收進程中可以刪除該數(shù)據(jù)塊,回收PLBA所在的存儲區(qū)域。
302、服務(wù)器將更新請求存儲至系統(tǒng)日志。
一旦接收到更新請求,則服務(wù)器在系統(tǒng)日志進行存儲。需要說明的是,系統(tǒng)日志以保護反向映射元數(shù)據(jù)的完整性、安全性為目的,無論更新請求指示添加或刪除反向映射元數(shù)據(jù),系統(tǒng)日志均不對更新請求進行進一步處理。
303、服務(wù)器檢測是否啟動回收進程,如果是,執(zhí)行步驟304,如果否,執(zhí)行步驟306。
回收進程是指回收存儲區(qū)域的進程,用于刪除服務(wù)器中沒有被引用的數(shù)據(jù)塊,并回收這些數(shù)據(jù)塊占用的存儲資源。本發(fā)明實施例對回收進程的觸發(fā)方式不做限定。
例如,周期性自動啟動回收進程??梢栽诜?wù)器中存儲回收周期,并設(shè)置每次所要回收的存儲區(qū)域,使得服務(wù)器自動完成回收進程。例如,對邏輯單元號為LUN1所對應(yīng)的存儲區(qū)域進行回收,假設(shè)LUN1對應(yīng)的存儲區(qū)域的大小為2TB,劃分了210個大小均為2GB的存儲區(qū)域,設(shè)置回收周期為3天,則分4次回收這些存儲區(qū)域,每次回收28個存儲區(qū)域,12天可全范圍回收LUN1對應(yīng)的存儲區(qū)域。需要說明的是,LUN對應(yīng)的是人為從SAN(Storage Area Network,存儲域網(wǎng)絡(luò))上劃分的一塊存儲區(qū)域,可用于存儲服務(wù)器中常用的數(shù)據(jù)塊。
另外,本發(fā)明實施例對回收進程采用的回收時機不做限定。例如,對于上述舉例的觸發(fā)方式,可以在服務(wù)器中存儲回收列表,列表中的每個數(shù)據(jù)項至少包括所要回收的存儲區(qū)域的地址范圍。每次回收進程啟動時,服務(wù)器基于回收列表中存儲區(qū)域的地址范圍,確定所要回收的存儲區(qū)域。
發(fā)明人認識到,相關(guān)技術(shù)的回收進程中,服務(wù)器鎖定一個存儲區(qū)域,對該存儲區(qū)域進行回收,但回收過程中,不允許更新反向映射元數(shù)據(jù),當(dāng)該存儲區(qū)域回收完畢時,才解鎖該存儲區(qū)域,再進行下一個存儲區(qū)域的回收,導(dǎo)致回收進程中服務(wù)器的并發(fā)處理能力差,也降低了反向映射元數(shù)據(jù)的更新效率。
為克服相關(guān)技術(shù)的問題,本發(fā)明實施例中服務(wù)器支持更新進程與回收進程并發(fā)進行。但是,考慮到回收進程的工作狀態(tài)與更新過程會相互影響,因此,在本步驟中,服務(wù)器檢測回收進程是否已經(jīng)啟動,以判斷后續(xù)的更新如何進行。本發(fā)明實施例對檢測的方式不做限定。例如,服務(wù)器查詢回收進程的標(biāo)志位,如果該標(biāo)志位為1,則確定當(dāng)前啟動了回收進程;如果該標(biāo)志位為0,則確定當(dāng)前未啟動回收進程。
304、如果啟動回收進程,則服務(wù)器判斷更新請求對應(yīng)的第一存儲區(qū)域是否處于回收進程,如果是,執(zhí)行步驟305,如果否,執(zhí)行步驟306。
第一存儲區(qū)域是指更新請求攜帶的PLBA所在的一塊存儲區(qū)域。本發(fā)明實施例對第一存儲區(qū)域不做進一步限定。例如,LUN2對應(yīng)的存儲區(qū)域上存儲服務(wù)器常用的數(shù)據(jù)塊,LUN2對應(yīng)的存儲區(qū)域的大小為2TB,第一存儲區(qū)域所占據(jù)的大小為1GB,地址范圍可以為LUN2的0~233-1比特。
本發(fā)明實施例涉及的緩存用于存儲更新請求。需要說明的是,對應(yīng)同一個PLBA的更新請求在緩存中有序存儲,如果添加或刪除更新請求,則緩存中更新請求的存儲位置均會調(diào)整。本發(fā)明實施例對該存儲形式不做具體限定。例如,在緩存中以數(shù)組的形式存儲更新請求,對應(yīng)相同PLBA的更新請求歸為同一個數(shù)組。
當(dāng)然,本發(fā)明實施例對判斷第一存儲區(qū)域是否處于回收進程的方式不做限定。例如,如果回收進程是基于回收列表進行回收,則服務(wù)器查詢該第一存儲區(qū)域是否屬于該回收列表,如果查詢到第一存儲區(qū)域的地址范圍在回收列表所要回收的存儲區(qū)域的地址范圍內(nèi),則確定第一存儲區(qū)域處于回收進程,進一步地,可以執(zhí)行步驟305。
305、如果第一存儲區(qū)域處于回收進程,則服務(wù)器判斷緩存是否已滿,如果否,則服務(wù)器確定在緩存中更新反向映射元數(shù)據(jù);如果是,則服務(wù)器確定在緩存中更新反向映射元數(shù)據(jù),并刪除緩存中對應(yīng)于同一個第二存儲區(qū)域且占用緩存空間最大的更新請求,且將第二存儲區(qū)域從回收列表中移除,或,服務(wù)器確定不在緩存中更新反向映射元數(shù)據(jù),并刪除緩存中對應(yīng)第一存儲區(qū)域的更新請求,且將第一存儲區(qū)域從回收列表中移除,回收列表用于指示本次回收進程中所要回收的存儲區(qū)域。
如果更新請求對應(yīng)的第一存儲區(qū)域是否處于回收進程,則服務(wù)器判斷緩存是否已滿,若查詢到可用的存儲位置,即緩存未滿時,直接在緩存中進行更新即可;若未查詢到可用的存儲位置,即緩存已滿時,可以以至少兩種方式釋放緩存空間。
需要說明的是,SAN是服務(wù)器所連接的存儲區(qū)域。本發(fā)明實施例是在回收進程啟動之前將系統(tǒng)日志中的反向映射元數(shù)據(jù)進合并至SAN。在本步驟中,如果檢測到當(dāng)前啟動了回收進程,說明在回收進程與反向映射元數(shù)據(jù)的更新過程并發(fā)進行,進而表明該更新請求沒有被合并至SAN。為了提高回收的準(zhǔn)確性,使得回程進程可以從緩存中讀取到最新的更新請求,則在上述緩存未滿的情況下,服務(wù)器在緩存中更新反向映射元數(shù)據(jù)。
考慮到更新請求可能是指示添加反向元數(shù)據(jù),也可能是刪除反向映射元數(shù)據(jù),因此,本發(fā)明實施例對以上兩種在緩存中更新反向映射元數(shù)據(jù)的情況分別進行說明。
第一種情況、更新請求指示添加反向映射元數(shù)據(jù)。
此時,發(fā)明人認識到,添加的反向映射元數(shù)據(jù)沒有被合并至SAN,從而不能在回收進程中被讀取,如果除了該新添加的反向映射元數(shù)據(jù),回收進程所讀取的反向映射元數(shù)據(jù)中,已經(jīng)沒有任何反向映射元數(shù)據(jù)對應(yīng)該第一存儲區(qū)域,則回收進程對第一存儲區(qū)域進行回收,會導(dǎo)致添加的反向映射元數(shù)據(jù)中的VLBA不能引用該第一存儲區(qū)域原有的數(shù)據(jù)塊。
因此,為了避免以上情況,從而提高回收的準(zhǔn)確性,本發(fā)明實施例將更新請求添加到緩存中對應(yīng)該PLBA的存儲位置,完成緩存中反向映射元數(shù)據(jù)的更新。對于回收進程來說,服務(wù)器可以在回收進程啟動后,從緩存中讀取到更新請求攜帶的反向映射元數(shù)據(jù),從而不會刪除第一存儲區(qū)域中的數(shù)據(jù)塊,使得數(shù)據(jù)塊仍然可以被引用。
第二種情況、更新請求指示刪除反向映射元數(shù)據(jù)。
此時,發(fā)明人認識到,所要刪除的反向映射元數(shù)據(jù)在回收進程啟動前已由系統(tǒng)日志合并至SAN中,從而會在回收進程中被讀取,如果除了所要刪除的反向映射元數(shù)據(jù)對應(yīng)該第一存儲區(qū)域,回收進程所讀取的反向映射元數(shù)據(jù)中,沒有任何反向映射元數(shù)據(jù)對應(yīng)第一存儲區(qū)域,則回收進程不會對第一存儲區(qū)域進行回收。然而,由于該反向映射元數(shù)據(jù)應(yīng)被刪除,說明反向映射元數(shù)據(jù)中VLBA已經(jīng)不再引用第一存儲區(qū)域的數(shù)據(jù)塊。
因此,為了避免以上情況,從而提高回收效率,在第二種情況中,服務(wù)器基于更新請求攜帶的PLBA及VLBA,在緩存中對應(yīng)該PLBA的存儲位置查找是否存在攜帶該VLBA的更新請求,如果是,則在緩存中刪除原有的更新請求,使得本次回收進程可以對更新請求對應(yīng)的存儲區(qū)域進行回收;如果否,說明原有的反向映射元數(shù)據(jù)已合并至SAN上,則在緩存中添加該更新請求,使得在回收進程進行到合并SAN及緩存中的反向映射元數(shù)據(jù)時,可以將原有的反向映射元數(shù)據(jù)刪除,從而在本次回收進程可以對更新請求對應(yīng)的存儲區(qū)域進行回收。
對于回收進程來說,服務(wù)器可以在回收進程啟動后,從緩存中讀取到指示刪除該反向映射元數(shù)據(jù)的更新請求,進而將第一存儲區(qū)域中的數(shù)據(jù)塊刪除;或者,服務(wù)器從緩存及SAN上均不會讀取到添加該反向映射元數(shù)據(jù)的更新請求,使得不具有任何反向映射元數(shù)據(jù)的數(shù)據(jù)塊可以被刪除。
為了充分釋放緩存空間,留出更多的存儲資源,以提高緩存的利用率,在緩存已滿時,本發(fā)明實施例至少提供以下兩種釋放緩存空間的策略:
305A、如果緩存已滿,則服務(wù)器確定不在緩存中更新反向映射元數(shù)據(jù),并刪除緩存中對應(yīng)第一存儲區(qū)域的更新請求,且將第一存儲區(qū)域從回收列表中移除,回收列表用于指示本次回收進程中所要回收的存儲區(qū)域。
在緩存已滿的情況下,為了釋放緩存空間,服務(wù)器刪除對應(yīng)于第一存儲區(qū)域原有的更新請求。當(dāng)然,為了避免刪除這些更新請求后,在回收進程中誤刪第一存儲區(qū)域的數(shù)據(jù)塊,則將第一存儲區(qū)域從回收列表中移除,使得本次回收進程不會回收第一存儲區(qū)域,也不會刪除第一存儲區(qū)域上的數(shù)據(jù)塊。
需要說明的是,如果服務(wù)器執(zhí)行該步驟305A,則后續(xù)也可以執(zhí)行步驟306。另外,這種釋放緩存空間的方式不必在緩存中更新反向映射元數(shù)據(jù),則該方式與本實施例的其他步驟結(jié)合后,也可以解決現(xiàn)有技術(shù)在緩存中更新所帶來的時延問題及占用內(nèi)存多的問題。
305B、如果緩存已滿,則服務(wù)器確定在緩存中更新反向映射元數(shù)據(jù),并刪除緩存中對應(yīng)于同一個第二存儲區(qū)域且占用緩存空間最大的更新請求,且將第二存儲區(qū)域從回收列表中移除。
為了一次性釋放更多的緩存空間,并且能留出存儲資源以更新反向映射元數(shù)據(jù),服務(wù)器計算緩存中對應(yīng)同一個PLBA的更新請求所占用的存儲空間,如果確定某些更新請求所占用的存儲空間最大,則刪除這些對應(yīng)于同一個PLBA的更新請求,從而騰出緩存空間。當(dāng)然,為了避免刪除這些更新請求后,在回收進程中誤刪第二存儲區(qū)域的數(shù)據(jù)塊,則為將第二存儲區(qū)域從回收列表中移除,使得本次回收進程不會回收第二存儲區(qū)域,也不會刪除第二存儲區(qū)域上的數(shù)據(jù)塊。在該步驟305B中,服務(wù)在緩存中更新反向映射元數(shù)據(jù)的情況可參考本步驟305已說明的兩種情況,此處不再贅述。
在該步驟中,如果第一存儲區(qū)域處于回收進程,則確定在緩存中對更新請求進行更新之后,如果回收進程已完成從緩存及SAN中讀取對應(yīng)第一存儲區(qū)域的反向映射元數(shù)據(jù)的過程,說明該更新請求仍然沒有在回收進程中被讀取,如果更新請求指示添加反向映射元數(shù)據(jù),則為了避免回收進程將第一存儲區(qū)域的數(shù)據(jù)塊刪除,導(dǎo)致反向映射元數(shù)據(jù)中的VLBA不能引用該數(shù)據(jù)塊,提出以下解決方案:服務(wù)器判斷回收進程的進度;如果回收進程已完成從所述緩存及所述SAN中讀取對應(yīng)所述第一存儲區(qū)域的反向映射元數(shù)據(jù)的過程,且更新請求指示添加反向映射元數(shù)據(jù),則為第一存儲區(qū)域添加指定標(biāo)記。
306、如果未啟動回收進程,或如果第一存儲區(qū)域未處于回收進程,則服務(wù)器確定不在緩存中更新反向映射元數(shù)據(jù)。
發(fā)明人認識到,相關(guān)技術(shù)中,每次反向映射元數(shù)據(jù)的更新過程均會在緩存中進行,而緩存中更新請求的存儲位置會重新調(diào)整,造成一定的時延,導(dǎo)致更新效率低,由于反向映射元數(shù)據(jù)的數(shù)據(jù)量大,則在緩存中存儲反向映射元數(shù)據(jù)會占用大量內(nèi)存。
為解決上述問題,本發(fā)明實施例提供不在緩存中更新反向映射元數(shù)據(jù)的解決方案,即如果回收進程未啟動,或者,此時的更新請求對應(yīng)的存儲區(qū)域未處于回收進程,則服務(wù)器不必在緩存中更新反向映射元數(shù)據(jù)。當(dāng)然,這并不會影響隨后的回收進程,因為反向映射元數(shù)已經(jīng)在步驟302中在系統(tǒng)日志中進行了全面的記錄,使得在回收進程啟動之前,讀取出系統(tǒng)日志中的反向映射元數(shù)據(jù)即可。
307、如果確定不在緩存中更新反向映射元數(shù)據(jù),則服務(wù)器直到回收進程啟動之前,或系統(tǒng)日志已滿時,將系統(tǒng)日志中所存儲的更新請求合并至存儲區(qū)域網(wǎng)絡(luò)SAN中的反向映射元數(shù)據(jù)。
本發(fā)明實施中,鑒于反向映射元數(shù)據(jù)平時僅需進行更新,基本僅在回收進程中需要讀取,提供了不在緩存中更新反向映射元數(shù)據(jù)的方案。事實上,雖然系統(tǒng)日志的存儲空間很大,但總是會滿,則當(dāng)系統(tǒng)日志已滿時,將其所存儲的反向映射元數(shù)據(jù)合并至存儲空間更大的SAN上長期、有序地存儲,以便于回收進程進行讀??;或者,為了使得回收進程啟動時,能讀取到系統(tǒng)日志所存儲的、還未合并至SAN上反向映射元數(shù)據(jù),在回收進程啟動之前,整理系統(tǒng)日志所存儲的更新請求,從中提取反向映射元數(shù)據(jù),再合并至SAN上。此時,系統(tǒng)日志中原有的反向映射元數(shù)據(jù)已備份至SAN上,則系統(tǒng)日志可以被清空,以釋放存儲空間。
另外,上述合并過程發(fā)生在回收進程啟動之前,也即是,在回收進程將啟動時,服務(wù)器先進行該合并過程。本發(fā)明實施對實現(xiàn)這種時序的方式不做限定。例如,在服務(wù)器中進行設(shè)置時序,當(dāng)觸發(fā)回收進程時,首先進行該合并過程,再啟動回收進程。
需要說明的是,本步驟以不在緩存中更新反向映射元數(shù)據(jù)的情況為例,說明了后續(xù)反向映射元數(shù)據(jù)在SAN中進行更新的過程。事實上,無論反向映射元數(shù)據(jù)是否在緩存中進行更新,一旦系統(tǒng)日志已滿或者回收進程啟動之前,均要將系統(tǒng)日志中的反向映射元數(shù)據(jù)合并至SAN,以確保系統(tǒng)日志能夠繼續(xù)存儲新的更新請求,且服務(wù)器在回收進程中可以確定所要回收的存儲區(qū)域。
另外,還要說明的是,本發(fā)明實施例是以反向映射元數(shù)據(jù)的更新過程為例進行說明,事實上,如果存在一類數(shù)據(jù)也具有反向映射元數(shù)據(jù)的兩個特點,1、更新頻繁;2、使用頻率較低。即寫入頻繁,但很少被讀取的數(shù)據(jù)也可以運用本發(fā)明實施例所示的方案進行更新。
相關(guān)技術(shù)中,由于對應(yīng)同一個PLBA的更新請求在緩存中有序存儲,則每次更新反向映射元數(shù)據(jù)時,如,在緩存中插入新的更新請求或者刪除舊的更新請求,緩存中更新請求的存儲位置均會重新調(diào)整,造成一定的時延,由于反向映射元數(shù)據(jù)的數(shù)據(jù)量大,則在緩存中存儲反向映射元數(shù)據(jù)會占用大量內(nèi)存。
本發(fā)明實施例中,根據(jù)回收進程的工作狀態(tài),判斷是否在所述緩存中更新所述反向映射元數(shù)據(jù),提供不在緩存中更新反向映射元數(shù)據(jù)的方案,在回收進程啟動之前,從系統(tǒng)日志中已存儲的更新請求提取出反向映射元數(shù)據(jù),且合并至SAN上,以保證反向映射元數(shù)據(jù)的完整性。由于反向映射元數(shù)據(jù)更新頻繁,但是基本僅在回收進程中使用,因此,本發(fā)明實施例對于多數(shù)更新反向映射元數(shù)據(jù)的過程可以減少時延,提高更新效率,并且占用較少內(nèi)存。
另外,在相關(guān)技術(shù)中,對于緩存已滿的情況,服務(wù)器將SAN中原有的大量反向映射元數(shù)據(jù)與緩存中的反向映射元數(shù)據(jù)合并,將合并后的反向映射元數(shù)據(jù)重新寫入SAN,由于緩存中的反向映射元數(shù)據(jù)遠少于SAN中的反向映射元數(shù)據(jù),導(dǎo)致實際寫入SAN的反向映射元數(shù)據(jù)遠大于需要寫入的反向映射元數(shù)據(jù),造成了嚴(yán)重的寫入放大的問題。
本發(fā)明實施例在緩存已滿時,無需將緩存中的反向映射元數(shù)據(jù)合并至SAN,不存在由緩存所導(dǎo)致的寫入放大問題。而且,本發(fā)明實施例提供釋放緩存空間的策略,以留出緩存的存儲資源,提高緩存的利用率,進一步提高服務(wù)器的讀寫效率。需要說明的是,雖然系統(tǒng)日志滿時,服務(wù)器將系統(tǒng)日志中的反向映射元數(shù)據(jù)合并至SAN,但是由于系統(tǒng)日志存儲空間很大,因此合并時實際寫入SAN的反向映射元數(shù)據(jù)與需要寫入的反向映射元數(shù)據(jù)并不會相差很多,相比現(xiàn)有技術(shù)很大程度上弱化了寫入放大的問題。
另外,本發(fā)明實施例支持反向映射元數(shù)據(jù)的更新過程與回收進程并發(fā)進行,提高了服務(wù)器的并發(fā)處理能力;而且,回收進程支持多個存儲區(qū)域同時進行回收,增加了回收效率,也不會延遲反向映射元數(shù)據(jù)的更新效率。
本發(fā)明實施例支持上述實施例的更新過程與回收進程同時進行。為了更具體地體現(xiàn)本發(fā)明實施例所示的更新過程為回收進程帶來的影響,本發(fā)明實施例以回收進程這一側(cè)展開說明。圖4是本發(fā)明實施例提供的一種回收方法流程圖。參見圖4,該實施例應(yīng)用于服務(wù)器,且基于圖3所示實施例以SAN作為指定存儲區(qū)域為例進行說明,具體步驟包括:
400、回收進程啟動之前,服務(wù)器將系統(tǒng)日志中所存儲的更新請求合并至存儲區(qū)域網(wǎng)絡(luò)SAN中的反向映射元數(shù)據(jù)。
該步驟在圖3所示實施例的步驟307已做出說明,不再贅述。
401、當(dāng)啟動回收進程時,服務(wù)器讀取回收列表,回收列表用于指示回收進程所要回收的存儲區(qū)域。
需要說明的是,回收列表是指示所要回收的存儲區(qū)域的一種方式,在圖3所示實施例的步驟304已做出說明。事實上,每次所要回收的存儲區(qū)域也可以是以地址段的方式記錄于服務(wù)器中,使得服務(wù)器每次對該次地址段范圍內(nèi)的存儲區(qū)域進行回收。
402、基于回收列表,服務(wù)器讀取SAN及緩存中的反向映射元數(shù)據(jù)。
基于圖3所示實施例可知,反向映射元數(shù)據(jù)可能存儲于SAN上,也可能在回收進程進行時存儲于緩存中,因此,為了所讀取的反向映射元數(shù)據(jù)更全面,回收的準(zhǔn)確性更高,服務(wù)器讀取SAN及緩存中所有的反向映射元數(shù)據(jù)。
在該步驟中,服務(wù)器從回收列表中確定所要回收的存儲區(qū)域。在緩存中,對應(yīng)同一個PLBA的更新請求在緩存中有序存儲,則服務(wù)器查詢對應(yīng)于這些存儲區(qū)域內(nèi)的PLBA的更新請求,再從所查詢的更新請求中提取出反向映射元數(shù)據(jù)、刪除標(biāo)識或者添加標(biāo)識。在SAN中,對應(yīng)同一個PLBA的反向映射元數(shù)據(jù)有序存儲,服務(wù)器直接讀取屬于這些存儲區(qū)域內(nèi)的PLBA的反向映射元數(shù)據(jù)。
403、服務(wù)器合并所讀取的反向映射元數(shù)據(jù)。
基于上述步驟402,進一步地,服務(wù)器將從SAN及緩存中所讀取的反向映射元數(shù)據(jù)進行合并,如果存在兩個相同的反向映射元數(shù)據(jù),且一個反向映射元數(shù)據(jù)具有刪除標(biāo)識,另一個具有添加標(biāo)識,則服務(wù)器確定不存在該反向映射元數(shù)據(jù),從而可能回收該反向映射元數(shù)據(jù)對應(yīng)的存儲區(qū)域;如果一個反向映射元數(shù)據(jù)與其他反向映射元數(shù)據(jù)均不同,則服務(wù)器確定不回收反向映射元數(shù)據(jù)對應(yīng)的存儲區(qū)域。
404、服務(wù)器將合并后的反向映射元數(shù)據(jù)對應(yīng)的存儲區(qū)域內(nèi)的數(shù)據(jù)塊復(fù)制到第三存儲區(qū)域,第三存儲區(qū)域是指不在回收列表中的存儲區(qū)域。
當(dāng)然,本發(fā)明實施例對第三存儲區(qū)域不做具體限定。例如,如果第一存儲區(qū)域是指邏輯單元號為LUN1的存儲區(qū)域,則第三存儲區(qū)域可以是邏輯單元號為LUN2的存儲區(qū)域。
本發(fā)明實施例中,回收進程是針對于所要回收的存儲區(qū)域進行。當(dāng)然,存在一種情況:所要回收的存儲區(qū)域的數(shù)據(jù)塊仍然被引用,也即是,存在反向映射元數(shù)據(jù)指向的PLBA位于所要回收的存儲區(qū)域內(nèi)。因此,在回收這些存儲區(qū)域時,將合并后的反向映射元數(shù)據(jù)對應(yīng)的存儲區(qū)域內(nèi)的數(shù)據(jù)塊復(fù)制到第三存儲區(qū)域,避免這些數(shù)據(jù)塊被誤刪。
405、基于合并后的反向映射元數(shù)據(jù),服務(wù)器將VLBA所指向的PLBA修改為第三存儲區(qū)域的PLBA,并觸發(fā)反向映射元數(shù)據(jù)的更新過程。
當(dāng)然,將數(shù)據(jù)塊復(fù)制到第三存儲區(qū)域后,為了使得合并后的反向映射元數(shù)據(jù)中的VLBA還能引用該數(shù)據(jù)塊,要將VLBA原來指向的PLBA修改為第三存儲區(qū)域的PLBA,此時,會觸發(fā)反向映射元數(shù)據(jù)的更新過程,即添加新的反向映射元數(shù)據(jù)(第三存儲區(qū)域內(nèi)的PLBA指向VLBA),并將原來的反向映射元數(shù)據(jù)(第一存儲區(qū)域內(nèi)的PLBA指向VLBA)刪除。由于該更新過程是在回收進程中,則根據(jù)圖3所示實施例,服務(wù)器將具有刪除標(biāo)識的更新請求添加到緩存中。
406、服務(wù)器回收該回收列表中不具有指定標(biāo)記且不具有反向映射元數(shù)據(jù)的存儲區(qū)域。
基于上述步驟405的更新過程,為了確定當(dāng)前所要回收的存儲區(qū)域上的數(shù)據(jù)塊已經(jīng)不再被任何VLBA引用,則服務(wù)器再次讀取緩存及SAN中的反向映射元數(shù)據(jù),且進行合并,也即是,從緩存中讀取到的具有刪除標(biāo)識的反向映射元數(shù)據(jù)、以及從SAN讀取到的反向映射元數(shù)據(jù)進行合并,合并結(jié)果為不存在該反向映射元數(shù)據(jù)。此時,服務(wù)器可以對回收列表中不具有反向映射元數(shù)據(jù)的存儲區(qū)域進行回收。
當(dāng)然,為了釋放緩存空間,留出緩存的存儲資源,每次回收進程完成對任一存儲區(qū)域的回收時,刪除緩存中對應(yīng)任一存儲區(qū)域的反向映射元數(shù)據(jù)。
然而,考慮到圖3所示實施例,在回收進程與反向映射元數(shù)據(jù)的更新同時進行時,存在以下兩種情況:
第一種情況、如果更新請求指示添加反向映射元數(shù)據(jù)。
在該情況中,以回收進程是否完成從緩存及SAN中讀取對應(yīng)第一存儲區(qū)域的反向映射元數(shù)據(jù)的過程作為時間點,如果未完成,則服務(wù)器在本次回收進程中可以從緩存中讀取到反向映射元數(shù)據(jù),并進行以上回收步驟;如果已完成,則第一存儲區(qū)域被添加了指定標(biāo)記。
在服務(wù)器已完成上述讀取的過程后,所添加的反向映射元數(shù)據(jù)不會在回收進程被讀取到,該反向映射元數(shù)據(jù)中的VLBA仍然引用第一存儲區(qū)域的上的數(shù)據(jù)塊,因此,在本步驟中,為了使得VLBA能正常引用第一存儲區(qū)域上的數(shù)據(jù)塊,服務(wù)器不會回收具有指定標(biāo)記的第一存儲區(qū)域。
第二種情況、如果更新請求指示刪除反向映射元數(shù)據(jù)。
此時,第一存儲區(qū)域的數(shù)據(jù)塊已被復(fù)制到第三存儲區(qū)域,如果更新請求指示刪除反向映射元數(shù)據(jù),則說明該反向映射元數(shù)據(jù)中的VLBA不再引用第一存儲區(qū)域中的數(shù)據(jù)塊,則服務(wù)器可以刪除這些數(shù)據(jù)塊,回收第一存儲區(qū)域。
除以上兩種情況,如果確定更新反向映射元數(shù)據(jù)的過程中沒有進行回收進程,則回收列表中的存儲區(qū)域也不會具有指定標(biāo)記,此時,服務(wù)器已經(jīng)完成復(fù)制數(shù)據(jù)塊到第三存儲區(qū)域、將VLBA原來指向的PLBA修改為第三存儲區(qū)域的PLBA、添加新的PLBA指向VLBA的反向映射元數(shù)據(jù)、以及刪除原來的PLBA指向VLBA的反向映射元數(shù)據(jù)。因此,服務(wù)器對回收列表中的存儲區(qū)域逐一進行回收,即刪除回收列表中不具有反向映射元數(shù)據(jù)的存儲區(qū)域上的數(shù)據(jù)塊,從而留出存儲資源,提高SAN的利用率。
需要說明的是,當(dāng)本次回收進程結(jié)束時,刪除指定標(biāo)記及緩存中所有的反向映射元數(shù)據(jù),使得原來具有指定標(biāo)記的存儲區(qū)域可以在之后的回收進程中被回收,并釋放緩存空間,提高緩存的利用率。
本發(fā)明實施例基于圖3所示實施例以回收進程這一側(cè)進行說明,與其并發(fā)進行的更新過程同樣具備圖3所示實施例的有益效果。尤其是,本發(fā)明實施例提高了服務(wù)器的并發(fā)處理能力;而且,回收進程支持多個存儲區(qū)域同時進行回收,增加了回收效率,也不會延遲反向映射元數(shù)據(jù)的更新效率。
圖5是本發(fā)明實施例提供的一種更新反向映射元數(shù)據(jù)的裝置結(jié)構(gòu)示意圖。參見圖5,該裝置具體包括:
接收模塊501,用于執(zhí)行上述步驟301所涉及的過程。
存儲模塊502,用于執(zhí)行上述步驟302所涉及的過程。
判斷模塊503,用于執(zhí)行上述步驟303至步驟306所涉及的過程。
更新模塊504,用于執(zhí)行上述步驟307所涉及的過程。
相關(guān)技術(shù)中,由于對應(yīng)同一個PLBA的更新請求在緩存中有序存儲,則每次更新反向映射元數(shù)據(jù)時,如,在緩存中插入新的更新請求或者刪除舊的更新請求,緩存中更新請求的存儲位置均會重新調(diào)整,造成一定的時延,導(dǎo)致更新效率低,由于反向映射元數(shù)據(jù)的數(shù)據(jù)量大,則在緩存中存儲反向映射元數(shù)據(jù)會占用大量內(nèi)存。
本發(fā)明實施例中,根據(jù)回收進程的工作狀態(tài),判斷是否在所述緩存中更新所述反向映射元數(shù)據(jù),提供不在緩存中更新反向映射元數(shù)據(jù)的裝置,在回收進程啟動之前,從系統(tǒng)日志中已存儲的更新請求提取出反向映射元數(shù)據(jù),且合并至指定存儲區(qū)域上,以保證反向映射元數(shù)據(jù)的完整性。由于反向映射元數(shù)據(jù)更新頻繁,但是基本僅在回收進程中使用,因此,本發(fā)明實施例對于多數(shù)更新反向映射元數(shù)據(jù)的過程可以減少時延,提高更新效率,且占用較少內(nèi)存。
需要說明的是:上述實施例提供的更新反向映射元數(shù)據(jù)的裝置在更新反向映射元數(shù)據(jù)時,僅以上述各功能模塊的劃分進行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的更新反向映射元數(shù)據(jù)的裝置與更新反向映射元數(shù)據(jù)的方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。