本發(fā)明涉及網(wǎng)絡(luò)存儲技術(shù)領(lǐng)域,尤其涉及一種重復(fù)刪除的模式切換方法及裝置。
背景技術(shù):
重復(fù)數(shù)據(jù)刪除是一種數(shù)據(jù)縮減技術(shù),旨在消除冗余數(shù)據(jù),減少存儲系統(tǒng)的容量使用。一般采用SHA-1、MD-5等類似的算法將數(shù)據(jù)流切成更小的數(shù)據(jù)塊,并且為每個數(shù)據(jù)塊生成一個哈希值,方便與設(shè)備上的數(shù)據(jù)進行比較,若已存在,則不保存新數(shù)據(jù),以下簡稱重刪。重刪包括有損重復(fù)數(shù)據(jù)刪除和無損重復(fù)數(shù)據(jù)刪除。其中,有損重復(fù)數(shù)據(jù)刪除是指在使用哈希算法進行重復(fù)數(shù)據(jù)刪除的過程中,若出現(xiàn)哈希沖突,則丟棄新數(shù)據(jù),使用Hash相同的原數(shù)據(jù),以下簡稱有損重刪;無損重復(fù)數(shù)據(jù)刪除是指在使用哈希算法進行重復(fù)數(shù)據(jù)刪除的過程中,若出現(xiàn)哈希沖突,則從存儲設(shè)備上讀取對應(yīng)的原數(shù)據(jù),并與新數(shù)據(jù)進行二進制比較,若相同,則丟棄新數(shù)據(jù);若不同,則保存新數(shù)據(jù),以下簡稱無損重刪。
現(xiàn)有的重復(fù)數(shù)據(jù)刪除功能只能固定于有損重刪和無損重刪中的一種模式,不能實時切換,使得應(yīng)用場景受到極大的限制,導(dǎo)致系統(tǒng)整體不夠靈活。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提供一種重復(fù)刪除的模式切換方法及裝置來解決現(xiàn)有技術(shù)中重復(fù)刪除不支持動態(tài)切換模式的問題。
具體地,本發(fā)明是通過如下技術(shù)方案實現(xiàn)的:
本發(fā)明提供一種重復(fù)刪除的模式切換方法,所述方法應(yīng)用于存儲設(shè)備中的DPC,所述方法包括:
DPC接收LUN根據(jù)數(shù)據(jù)寫入指令下發(fā)的由數(shù)據(jù)拆分成的多個粒度;
分別計算所述多個粒度對應(yīng)的hash;
遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄;
判斷當(dāng)前重刪模式是有損重刪還是無損重刪;
若是有損重刪,則將每個粒度標(biāo)記為重刪成功;
若是無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。
進一步的,所述方法還包括:
DPC將所述多個粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個粒度的重刪結(jié)果更新本地的映射表的第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對應(yīng)關(guān)系和LBA與DPC上的Hash的第二對應(yīng)關(guān)系。
進一步的,所述遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄,具體為:
獲取第一粒度對應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計到有記錄hash中;若不存在,則將所述第一hash對應(yīng)的第一粒度寫入DPC,將所述第一粒度在DPC中的PBA以及所述第一hash的對應(yīng)關(guān)系添加到所述哈希索引表中,并將該hash統(tǒng)計到無記錄hash中。
進一步的,所述方法還包括:
當(dāng)確定哈希索引表中的hash記錄沒有LUN引用時,將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時,回收該hash記錄中PBA對應(yīng)的物理空間。
進一步的,所述確定哈希索引表中的hash記錄已更新到LUN上,具體包括:
DPC在哈希索引表中新建hash記錄時,為該hash記錄增設(shè)引用計數(shù),引用計數(shù)起始值為1,若該hash記錄被引用時,則該引用計數(shù)加1;若該hash記錄被更新到LUN中的映射表時,則該引用計數(shù)減1;當(dāng)引用計數(shù)為零時,回收對應(yīng)的hash記錄;
若回收集合中的hash記錄被引用時,則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計數(shù)加1。
基于相同的構(gòu)思,本發(fā)明還提供一種重復(fù)刪除的模式切換裝置,所述裝置應(yīng)用于存儲設(shè)備中的DPC,所述裝置包括:
接收單元,用于接收LUN根據(jù)數(shù)據(jù)寫入指令下發(fā)的由數(shù)據(jù)拆分成的多個粒度;
計算單元,用于分別計算所述多個粒度對應(yīng)的hash;
統(tǒng)計單元,用于遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄;
標(biāo)記單元,用于判斷當(dāng)前重刪模式是有損重刪還是無損重刪;若是有損重刪,則將每個粒度標(biāo)記為重刪成功;若是無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。
進一步的,所述裝置還包括:
返回單元,用于所述多個粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個粒度的重刪結(jié)果更新本地的映射表的第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對應(yīng)關(guān)系和LBA與DPC上的Hash的第二對應(yīng)關(guān)系。
進一步的,所述統(tǒng)計單元,具體用于獲取第一粒度對應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計到有記錄hash中;若不存在,則將所述第一hash對應(yīng)的第一粒度寫入DPC,將所述第一粒度在DPC中的PBA以及所述第一hash的對應(yīng)關(guān)系添加到所述哈希索引表中,并將該hash統(tǒng)計到無記錄hash中。
進一步的,所述裝置還包括:
回收單元,用于當(dāng)確定哈希索引表中的hash記錄沒有LUN引用時,將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時,回收該hash記錄中PBA對應(yīng)的物理空間。
進一步的,所述回收單元,具體用于在哈希索引表中新建hash記錄時,為該hash記錄增設(shè)引用計數(shù),引用計數(shù)起始值為1,若該hash記錄被引用時,則該引用計數(shù)加1;若該hash記錄被更新到LUN中的映射表時,則該引用計數(shù)減1;當(dāng)引用計數(shù)為零時,回收對應(yīng)的hash記錄;若回收集合中的hash記錄被引用時,則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計數(shù)加1。
由此可見,本發(fā)明可使DPC在收到LUN下發(fā)的多個粒度時,分別計算所述多個粒度對應(yīng)的hash,再遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,并在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄;然后判斷當(dāng)前重刪模式是有損重刪還是無損重刪;若是有損重刪,則將每個粒度標(biāo)記重刪除成功;若是無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。因此本發(fā)明可以實現(xiàn)重復(fù)數(shù)據(jù)刪除系統(tǒng)中能夠動態(tài)更改重刪方式,使元數(shù)據(jù)組織方式更加靈活,使系統(tǒng)具有較強的擴展性。
附圖說明
圖1是LBA、PBA、映射表以及哈希索引表的關(guān)系示意圖;
圖2是本發(fā)明一種示例性實施方式中的一種重復(fù)刪除的模式切換方法的處理流程圖;
圖3是本發(fā)明一種示例性實施方式中的系統(tǒng)結(jié)構(gòu)示意圖;
圖4是本發(fā)明一種示例性實施方式中的映射表組織方式示意圖;
圖5是本發(fā)明一種示例性實施方式中的一種重復(fù)刪除的處理流程圖;
圖6是本發(fā)明一種示例性實施方式中的一種物理空間回收的處理流程圖;
圖7a本發(fā)明一種示例性實施方式中的重復(fù)刪除的模式切換裝置所在設(shè)備的硬件結(jié)構(gòu)圖;
圖7b本發(fā)明一種示例性實施方式中的一種重復(fù)刪除的模式切換裝置的邏輯結(jié)構(gòu)圖。
具體實施方式
存儲設(shè)備中包括多個LUN(Logical Unit Number,邏輯單元號),用于為應(yīng)用服務(wù)器提供可訪問的邏輯存儲資源,LUN中有分為多個邏輯塊,其對應(yīng)的地址LBA(Logical Block Address,邏輯塊地址)是應(yīng)用服務(wù)器訪問LUN時使用的地址。當(dāng)有新的數(shù)據(jù)寫入存儲設(shè)備時,先將該數(shù)據(jù)切分成若干個固定長度的數(shù)據(jù)塊,利用特定的哈希算法為每個數(shù)據(jù)塊生成一個哈希值Hash,再通過查詢哈希索引表確定新寫入的數(shù)據(jù)塊是否為重復(fù)數(shù)據(jù),其中,所述哈希索引表用于在使用重復(fù)數(shù)據(jù)刪除的存儲系統(tǒng)中記錄Hash到PBA(physical Block Address,物理塊地址)的對應(yīng)關(guān)系,所述PBA是向物理存儲資源存取數(shù)據(jù)時使用的地址;若確定為重復(fù)數(shù)據(jù),則丟棄該數(shù)據(jù),并更新映射表,將對應(yīng)LBA映射至該Hash;否則,將該數(shù)據(jù)塊寫入存儲設(shè)備,將對應(yīng)LBA映射至該Hash,同時,在哈希索引表中增加Hash至PBA的記錄。其中所述映射表用于在使用重復(fù)數(shù)據(jù)刪除的存儲系統(tǒng)中記錄LBA到Hash的對應(yīng)關(guān)系。所述LBA、PBA、映射表以及哈希索引表的關(guān)系如圖1所示。
由于現(xiàn)有的重復(fù)數(shù)據(jù)刪除系統(tǒng)通常只支持有損重刪或無損重刪其中的一種,不能在兩者之間進行實時切換,因此使得應(yīng)用場景受到極大的限制,導(dǎo)致系統(tǒng)整體不夠靈活。
為了解決現(xiàn)有技術(shù)存在的問題,本發(fā)明提供一種重復(fù)刪除的模式切換方法及裝置,使DPC在收到LUN下發(fā)的多個粒度時,分別計算所述多個粒度對應(yīng)的hash,再遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,并在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄;然后判斷當(dāng)前重刪模式是有損重刪還是無損重刪;若是有損重刪,則將每個粒度標(biāo)記重刪除成功;若是無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。因此本發(fā)明可以實現(xiàn)重復(fù)數(shù)據(jù)刪除系統(tǒng)中能夠動態(tài)更改重刪方式,使元數(shù)據(jù)組織方式更加靈活,使系統(tǒng)具有較強的擴展性。
請參考圖2,是本發(fā)明一種示例性實施方式中的一種重復(fù)刪除的模式切換方法的處理流程圖,所述方法應(yīng)用于存儲設(shè)備中的DPC,所述存儲設(shè)備可以是單獨的設(shè)備,也可以是設(shè)備集群,所述方法包括:
步驟201、DPC接收LUN根據(jù)數(shù)據(jù)寫入指令下發(fā)的由數(shù)據(jù)拆分成的多個粒度;
在本實施例中,存儲設(shè)備包括一個DPC以及多個LUN,如圖3所示,其中,所述DPC(Deduplication Process Center,重刪處理中心)主要負責(zé)對新數(shù)據(jù)進行重刪處理、維護哈希索引表、存取重刪成功的數(shù)據(jù);所述LUN用于維護映射表,并提供訪問資源。當(dāng)LUN接收數(shù)據(jù)寫入指令時,可以將數(shù)據(jù)劃分為多個粒度,并將所述多個粒度下發(fā)給DPC。本實施例中,所述粒度是指在邏輯上將LUN劃分成一個個固定長度的塊并順序編號,稱每個塊為一個粒度,粒度是重刪的基本單位。LUN可以將接收到數(shù)據(jù),按粒度的大小拆分數(shù)據(jù),從本地映射表中讀取對應(yīng)的映射,不對齊的部分可以通過回讀映射進行補齊,從而湊成完整粒度。
步驟202、分別計算所述多個粒度對應(yīng)的hash;
DPC收到LUN下發(fā)的多個完整粒度時,可以分別計算所述多個完整粒度對應(yīng)的hash。
步驟203、遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄;
為了確定哪些粒度已經(jīng)保存在DPC中,哪些粒度還沒有保存,DPC可以遍歷本地的哈希索引表,針對所述多個粒度對應(yīng)的hash中分別統(tǒng)計無記錄hash和有記錄hash,具體來講,DPC可以獲取第一粒度對應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計到有記錄hash中;若不存在,將該hash統(tǒng)計到無記錄hash中,并將所述第一hash對應(yīng)的第一粒度寫入DPC后,將所述第一粒度在DPC中的PBA以及所述第一hash的對應(yīng)關(guān)系創(chuàng)建新的hash記錄添加到所述哈希索引表中。以此類推,直到所述多個粒度對應(yīng)的hash統(tǒng)計完成。
步驟204、判斷當(dāng)前重刪模式是有損重刪還是無損重刪;
在本發(fā)明可選的實施例中,DPC可以為用戶提供重刪模式控制模塊,使用戶通過重刪模式控制模塊在進程數(shù)據(jù)存儲時,選擇所需的重刪模式,本實施例中重刪模式可以包括有損重刪和無損重刪,因此本發(fā)明可以實現(xiàn)重刪模式的動態(tài)切換,從而使系統(tǒng)適應(yīng)更多的應(yīng)用場景,提高了系統(tǒng)的應(yīng)用靈活性。
步驟205、若是有損重刪,則將每個粒度標(biāo)記為重刪成功;
若確定當(dāng)前重刪模式為有損重刪,則可以不顧及重刪沖突的情況,因此可以將每個粒度標(biāo)記為重刪成功。
步驟206、若是無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。
若確定當(dāng)前重刪模式為無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。具體來講,DPC首先獲取第一粒度對應(yīng)的第一hash,并在哈希索引表中查找與該第一hash相同的第二hash;然后讀取本地物理空間中所述第二hash對應(yīng)的數(shù)據(jù)并與所述第一hash對應(yīng)的數(shù)據(jù)進行比較,若相同,則將該第一hash對應(yīng)的第一粒度的重刪結(jié)果標(biāo)記為重刪成功;若不同,則將該第一hash對應(yīng)的第一粒度的重刪結(jié)果標(biāo)記為重刪沖突;然后繼續(xù)重復(fù)上述流程對其他粒度進行無損重刪。
在本實施例中,DPC將所述多個粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個粒度的重刪結(jié)果更新本地的映射表的第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對應(yīng)關(guān)系和LBA與DPC上的Hash的第二對應(yīng)關(guān)系。在本實施例中,DPC維護的哈希索引表包括Hash到DPC的PBA的對應(yīng)關(guān)系,所述LUN中維護的映射表中既包括LBA與LUN本地的PBA的第一對應(yīng)關(guān)系,又包括LBA與DPC上的Hash的第二對應(yīng)關(guān)系,其中所述第一對應(yīng)關(guān)系用于讀寫存儲于LUN本地的數(shù)據(jù),所述第二對應(yīng)關(guān)系用于讀寫存儲于DPC的數(shù)據(jù)。所述LUN收到DPC返回的粒度對應(yīng)的重刪結(jié)果時,可以將標(biāo)記為重刪沖突的粒度寫入本地的物理空間,記錄寫入的LBA和PBA,并根據(jù)寫入的LBA和PBA更新本地映射表中的第一對應(yīng)關(guān)系;根據(jù)標(biāo)記為重刪成功的粒度的LBA和hash更新本地映射表中記錄的第二對應(yīng)關(guān)系。
由于現(xiàn)有技術(shù)中,存儲設(shè)備中的每個LUN維護各自的一張LBA與PBA的映射表,DPC維護系統(tǒng)內(nèi)唯一的哈希索引表。而本發(fā)明中LUN維護的映射表中可以包括LBA與PBA的第一對應(yīng)關(guān)系和LBA與Hash的第二對應(yīng)關(guān)系,因此用戶可以通過LUN維護的映射表查詢DPC上的數(shù)據(jù),從而減少DPC的業(yè)務(wù)負擔(dān),提高讀寫效率。
另外,在本發(fā)明可選的實施例中,當(dāng)確定哈希索引表中的hash記錄已更新到LUN上時,將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時,回收該hash記錄中PBA對應(yīng)的物理空間。
因為DPC物理空間中的每一粒度數(shù)據(jù)都可能不止被一個LUN使用,也可能被一個LUN使用不止一次,所以采取引用計數(shù)的方式,實時統(tǒng)計哈希索引表中每一條記錄的使用情況。DPC在哈希索引表中新建hash記錄時,為該hash記錄增設(shè)引用計數(shù),引用計數(shù)起始值為1,若該hash記錄被引用時,則該引用計數(shù)加1;若該hash記錄被更新到LUN中的映射表時,則該引用計數(shù)減1;當(dāng)引用計數(shù)為零時,回收對應(yīng)的hash記錄;若回收集合中的hash記錄被引用時,則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計數(shù)加1。在某條記錄的引用計數(shù)為0時并不會立馬回收,可根據(jù)設(shè)定的策略觸發(fā)DPC回收,該策略由用戶配置,既可以是可回收記錄的個數(shù)達到閾值時觸發(fā),也可以是固定時間周期觸發(fā),在系統(tǒng)運行期間隨時可以更改策略,改完后會立即確認是否可回收。Hash保護功能可避免計數(shù)為0的記錄在回收后立馬又被使用,避免重復(fù)建立記錄而浪費性能,提高了DPC的效率。
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,下面對本發(fā)明的方案作進一步地詳細說明。
在存儲系統(tǒng)中,元數(shù)據(jù)包括兩部分,即映射表和哈希索引表,其中,每個LUN維護各自的一張映射表,DPC維護系統(tǒng)內(nèi)唯一的哈希索引表。與現(xiàn)有技術(shù)不同,映射表既支持LBA-PBA的記錄(此處的PBA指向LUN的物理空間),也支持LBA-Hash的記錄,其具體組織方式如圖4所示,整張映射表被劃分成若干段,每一段包括標(biāo)志區(qū)和映射區(qū)兩部分,標(biāo)志區(qū)每一個bit與其后映射區(qū)的每一條記錄線性對應(yīng),用于標(biāo)記該條記錄中的映射類型,若為1,是Hash,若為0,則是PBA。假設(shè)LBA、PBA的長度均為8個字節(jié),系統(tǒng)若采用SHA-1算法做重刪,即Hash的長度為20個字節(jié),那么,映射區(qū)每一條記錄的長度為20+8=28個字節(jié)。在用戶配置完重刪的算法時便可確定映射區(qū)每條記錄的長度,單個段的長度設(shè)置具有很大的參考范圍。
LUN接收到服務(wù)器下發(fā)的數(shù)據(jù)寫入指令時,可以按命中的粒度拆分數(shù)據(jù),從映射表中讀取對應(yīng)的映射,不對齊的部分會根據(jù)映射進行回讀(若為PBA,則去LUN本地的物理空間讀,若為Hash,則去DPC的物理空間讀),并湊成完整粒度,然后將這些粒度下發(fā)給DPC,則重刪處理流程如圖5所示,其中包括:
步驟501、LUN將所有粒度下發(fā)給DPC,轉(zhuǎn)步驟502;
步驟502、DPC計算出每個粒度的Hash,轉(zhuǎn)步驟503;
步驟503、開始遍歷哈希索引表,轉(zhuǎn)步驟504;
步驟504、判斷該Hash是否有記錄,若是,則轉(zhuǎn)步驟506;若否,則轉(zhuǎn)步驟505;
步驟505、讀取記錄內(nèi)容,轉(zhuǎn)步驟507;
步驟506、標(biāo)記該hash,轉(zhuǎn)步驟507;
步驟507、結(jié)束遍歷哈希索引表,轉(zhuǎn)步驟508;
步驟508、判斷是否所有hash均有記錄,若是,則轉(zhuǎn)步驟511;若否,則轉(zhuǎn)步驟509;
步驟509、分配物理空間寫入被標(biāo)記hash的數(shù)據(jù),轉(zhuǎn)步驟510;
步驟510、根據(jù)返回的PBA逐個建立記錄,轉(zhuǎn)步驟511;
步驟511、判斷是否為無損重刪,若是,則轉(zhuǎn)步驟512;若否則轉(zhuǎn)步驟513;
步驟512、僅將新建記錄的hash所對應(yīng)的粒度標(biāo)記為重刪成功,轉(zhuǎn)步驟514;
步驟513、將每個粒度標(biāo)記為重刪成功,轉(zhuǎn)步驟520;
步驟514、開始遍歷所讀取的記錄,轉(zhuǎn)步驟515;
步驟515、根據(jù)記錄中的PBA去物理空間讀取數(shù)據(jù),轉(zhuǎn)步驟516;
步驟516、判斷是否與新數(shù)據(jù)相同,若是,則轉(zhuǎn)步驟517;若否,則轉(zhuǎn)步驟518;
步驟517、將對應(yīng)的粒度標(biāo)記為重刪成功,轉(zhuǎn)步驟519;
步驟518、將對應(yīng)的粒度標(biāo)記為重刪沖突,轉(zhuǎn)步驟519;
步驟519、結(jié)束遍歷所讀取的記錄,轉(zhuǎn)步驟520;
步驟520、將所有hash及粒度處理結(jié)果返回給LUN,轉(zhuǎn)步驟521;
步驟521、LUN逐個解析粒度的處理結(jié)果,轉(zhuǎn)步驟522;
步驟522、判斷是否無重刪沖突,若是,則轉(zhuǎn)步驟523;若否,則轉(zhuǎn)步驟524;
步驟523、更新映射表,并結(jié)束;
步驟524、向LUN本地的物理空間寫入數(shù)據(jù),轉(zhuǎn)步驟525;
寫入數(shù)據(jù)時,若LUN本地沒有對應(yīng)的物理空間,則LUN可以為該數(shù)據(jù)分配可用的物理空間后再進行數(shù)據(jù)寫入。
步驟525、合并返回的PBA及重刪成功的Hash,轉(zhuǎn)步驟523。
至此圖5所示步驟結(jié)束。
請參考圖6,本發(fā)明的回收流程包括:
步驟601、哈希索引表新建記錄是對應(yīng)的引用計數(shù)設(shè)為1,轉(zhuǎn)步驟602;
步驟602、DPC由新數(shù)據(jù)計算的hash命中哈希索引表的某條記錄;
步驟603、判斷引用計數(shù)是否為0,若是,則轉(zhuǎn)步驟604;若否,則轉(zhuǎn)步驟605;
步驟604、將該記錄從回收集合中剔除,轉(zhuǎn)步驟605;
步驟605、將該引用計數(shù)加1,轉(zhuǎn)步驟606;
步驟606、LUN更新映射表的某條記錄時,記錄原映射若為hash,轉(zhuǎn)步驟607;
步驟607、引用計數(shù)減1,轉(zhuǎn)步驟608;
步驟608、判斷引用計數(shù)是否為0,若是,則轉(zhuǎn)步驟609;若否,則轉(zhuǎn)步驟610;
步驟609、將該記錄納入回收集合,轉(zhuǎn)步驟610;
步驟610、判斷策略條件是否滿足,若是,則轉(zhuǎn)步驟611;若否,則轉(zhuǎn)步驟601;
其中,該策略由用戶配置,既可以是可回收記錄的個數(shù)達到閾值時觸發(fā),也可以是固定時間周期觸發(fā),在系統(tǒng)運行期間隨時可以更改策略,改完后會立即確認是否可回收。
步驟611、判斷回收集合是否為空,若是,則結(jié)束流程;若否,則轉(zhuǎn)步驟612;
步驟612、統(tǒng)一回收DPC的物理空間,并結(jié)束流程。
上述過程即為Hash保護功能,可避免計數(shù)為0的記錄在回收后立馬又被使用,導(dǎo)致重復(fù)建立記錄而浪費性能,也降低DPC的效率,可以使存儲設(shè)備提高存儲介質(zhì)的利用率,為用戶降低成本。
相比于現(xiàn)有技術(shù),本發(fā)明的存儲系統(tǒng)能針對不同的應(yīng)用場景進行配置并支持刪除模式的動態(tài)轉(zhuǎn)換,因此使系統(tǒng)的使用范圍更加廣泛,提高系統(tǒng)的效率及靈活性;并且在保證數(shù)據(jù)安全及系統(tǒng)性能的前提下,可以通過回收機制自動清除冗余數(shù)據(jù),提高存儲介質(zhì)利用率。
基于相同的構(gòu)思,本發(fā)明還提供一種重復(fù)刪除的模式切換裝置,該裝置可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實現(xiàn)。以軟件實現(xiàn)為例,本發(fā)明的重復(fù)刪除的模式切換裝置作為一個邏輯意義上的裝置,是通過其所在存儲設(shè)備的CPU將存儲器中對應(yīng)的計算機程序指令讀取后運行而成。
請參考圖7a是本發(fā)明一種示例性實施方式中的一種重復(fù)刪除的模式切換裝置700,所述裝置應(yīng)用于存儲設(shè)備中的DPC,該裝置基本運行環(huán)境包括CPU,存儲器以及其他硬件,從邏輯層面上來看,該重復(fù)刪除的模式切換裝置的組成如圖7b所示,其中該裝置700包括:
接收單元701,用于接收LUN根據(jù)數(shù)據(jù)寫入指令下發(fā)的由數(shù)據(jù)拆分成的多個粒度;
計算單元702,用于分別計算所述多個粒度對應(yīng)的hash;
統(tǒng)計單元703,用于遍歷哈希索引表分別統(tǒng)計所述多個粒度對應(yīng)的hash中無記錄hash和有記錄hash,在哈希索引表中為無記錄hash創(chuàng)建新的hash記錄;
標(biāo)記單元704,用于判斷當(dāng)前重刪模式是有損重刪還是無損重刪;若是有損重刪,則將每個粒度標(biāo)記為重刪成功;若是無損重刪,則將新記錄hash以及有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)相同的粒度標(biāo)記為重刪成功,將與有記錄hash中的粒度對應(yīng)的數(shù)據(jù)與原數(shù)據(jù)不同的粒度標(biāo)記為重刪沖突。
可選的,所述裝置還包括:
返回單元705,用于所述多個粒度的重刪結(jié)果返回LUN,以使LUN根據(jù)所述多個粒度的重刪結(jié)果更新本地的映射表的第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述映射表中包括LBA與LUN本地的物理塊地址PBA的第一對應(yīng)關(guān)系和LBA與DPC上的Hash的第二對應(yīng)關(guān)系。
可選的,所述統(tǒng)計單元703,具體用于獲取第一粒度對應(yīng)的第一hash,在哈希索引表中查找是否存在于該第一hash相同的第二hash;若存在,則將該第一hash統(tǒng)計到有記錄hash中;若不存在,則將所述第一hash對應(yīng)的第一粒度寫入DPC,將所述第一粒度在DPC中的PBA以及所述第一hash的對應(yīng)關(guān)系添加到所述哈希索引表中,并將該hash統(tǒng)計到無記錄hash中。
可選的,所述裝置還包括:
回收單元706,用于當(dāng)確定哈希索引表中的hash記錄沒有LUN引用時,將該hash記錄添加到回收集合,并在回收集合中的hash記錄符合回收條件時,回收該hash記錄中PBA對應(yīng)的物理空間。
可選的,所述回收單元706,具體用于在哈希索引表中新建hash記錄時,為該hash記錄增設(shè)引用計數(shù),引用計數(shù)起始值為1,若該hash記錄被引用時,則該引用計數(shù)加1;若該hash記錄被更新到LUN中的映射表時,則該引用計數(shù)減1;當(dāng)引用計數(shù)為零時,回收對應(yīng)的hash記錄;若回收集合中的hash記錄被引用時,則將該hash記錄從所述回收集合中移除至哈希索引表,并將該hash記錄的引用計數(shù)加1。
上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。