• / 21
  • 下載費用:30 金幣  

調度IO的方法和裝置.pdf

關 鍵 詞:
調度 IO 方法 裝置
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
摘要
申請專利號:

CN201310633914.7

申請日:

2013.11.29

公開號:

CN103677669A

公開日:

2014.03.26

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效IPC(主分類):G06F 3/06申請日:20131129|||公開
IPC分類號: G06F3/06 主分類號: G06F3/06
申請人: 華為技術有限公司
發明人: 雷延釗
地址: 518129 廣東省深圳市龍崗區坂田華為總部辦公樓
優先權:
專利代理機構: 北京龍雙利達知識產權代理有限公司 11329 代理人: 王君;肖鸝
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201310633914.7

授權公告號:

||||||

法律狀態公告日:

2016.08.17|||2014.04.23|||2014.03.26

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

本發明實施例提供一種調度IO的方法和裝置,該方法包括:接收主機發送的第一讀IO,該第一讀IO用于讀取RAID的第一存儲區域中的第一數據;根據該第一讀IO和重構預讀IO生成第二讀IO,其中該重構預讀IO用于讀取該RAID的第二存儲區域中的第二數據,該第二存儲區域與該第一存儲區域具有至少部分交疊的存儲區域,該第二讀IO用于讀取該RAID的第三存儲區域中的第三數據,該第三存儲區域包括該至少部分交疊的存儲區域;向該RAID發送該第二讀IO。本發明實施例中,第一讀IO與重構預讀IO訪問的存儲區域部分交疊,利用第二讀IO讀取交疊部分的存儲區域,減少不同數據流對相同存儲區域的重復訪問,進而減少硬盤負擔,避免系統帶寬的浪費。

權利要求書

權利要求書
1.  一種調度輸入輸出IO的方法,其特征在于,包括:
接收主機發送的第一讀IO,所述第一讀IO用于讀取獨立磁盤冗余陣列RAID的第一存儲區域中的第一數據;
根據所述第一讀IO和重構預讀IO生成第二讀IO,其中所述重構預讀IO用于讀取所述RAID的第二存儲區域中的第二數據,所述第二存儲區域與所述第一存儲區域具有至少部分交疊的存儲區域,所述第二讀IO用于讀取所述RAID的第三存儲區域中的第三數據,所述第三存儲區域包括所述至少部分交疊的存儲區域;
向所述RAID發送所述第二讀IO。

2.  如權利要求1所述的方法,其特征在于,所述第三存儲區域為所述RAID的非故障存儲區域,且所述第三存儲區域包括所述第一存儲區域和所述第二存儲區域,所述根據所述第一讀IO和重構預讀IO生成第二讀IO,包括:
將所述第一讀IO和所述重構預讀IO合并為所述第二讀IO。

3.  如權利要求2所述的方法,其特征在于,還包括:
根據所述第二讀IO,從所述RAID接收所述第三數據;
向所述主機返回包含在所述第三數據中的所述第一數據;
根據包含在所述第三數據中的第二數據,重構所述RAID的故障存儲區域中的數據。

4.  如權利要求1-3中任一項所述的方法,其特征在于,還包括:
接收所述主機發送的寫IO,所述寫IO用于將第四數據寫入所述RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;
將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。

5.  如權利要求4所述的方法,其特征在于,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。

6.  如權利要求4所述的方法,其特征在于,所述將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域,包括:
當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時, 將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;
當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。

7.  一種調度輸入輸出IO的方法,其特征在于,包括:
接收主機發送的寫IO,所述寫IO用于將第四數據寫入獨立磁盤冗余陣列RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;
將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。

8.  如權利要求7所述的方法,其特征在于,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。

9.  如權利要求7所述的方法,其特征在于,所述將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域,包括:
當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;
當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。

10.  一種調度輸入輸出IO的裝置,其特征在于,包括:
第一接收單元,用于接收主機發送的第一讀IO,所述第一讀IO用于讀取獨立磁盤冗余陣列RAID的第一存儲區域中的第一數據;
生成單元,用于根據所述第一接收單元接收到的所述第一讀IO和重構預讀IO生成第二讀IO,其中所述重構預讀IO用于讀取所述RAID的第二存儲區域中的第二數據,所述第二存儲區域與所述第一存儲區域具有至少部分交疊的存儲區域,所述第二讀IO用于讀取所述RAID的第三存儲區域中的第三數據,所述第三存儲區域包括所述至少部分交疊的存儲區域;
第一發送單元,用于向所述RAID發送所述生成單元生成的所述第二讀IO。

11.  如權利要求10所述的裝置,其特征在于,所述第三存儲區域為所述RAID的非故障存儲區域,且所述第三存儲區域包括所述第一存儲區域和所述第二存儲區域,所述生成單元具體用于將所述第一讀IO和所述重構預讀IO合并為所述第二讀IO。

12.  如權利要求11所述的裝置,其特征在于,所述裝置還包括:
第二接收單元,用于根據所述第二讀IO,從所述RAID接收所述第三數據;
第二發送單元,用于向所述主機返回包含在所述第二接收單元接收的所述第三數據中的所述第一數據;
重構單元,用于根據包含在第二接收單元接收的所述第三數據中的第二數據,重構所述RAID的故障存儲區域中的數據。

13.  如權利要求10-12中任一項所述的裝置,其特征在于,還包括:
第三接收單元,用于接收所述主機發送的寫IO,所述寫IO用于將第四數據寫入所述RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;
寫入單元,用于將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。

14.  如權利要求13所述的裝置,其特征在于,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。

15.  如權利要求13所述的裝置,其特征在于,所述寫入單元具體用于當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。

16.  一種調度輸入輸出IO的裝置,其特征在于,包括:
接收單元,用于接收主機發送的寫IO,所述寫IO用于將第四數據寫入獨立磁盤冗余陣列RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;
寫入單元,用于將所述接收單元接收的所述第四數據作為所述第四存儲 區域的重構數據寫入所述RAID的熱備存儲區域。

17.  如權利要求16所述的裝置,其特征在于,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。

18.  如權利要求16所述的裝置,其特征在于,所述寫入單元具體用于當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。

說明書

說明書調度IO的方法和裝置
技術領域
本發明實施例涉及數據處理領域,更為具體地,涉及一種調度IO的方法和裝置。
背景技術
RAID(Redundant Arrays of Independent Disks,獨立磁盤冗余陣列)將不同硬盤組成陣列的形式進行數據的存儲與讀寫。RAID(RAID0除外)具有冗余性,可以在單盤故障的情況下,對故障盤進行數據重構,并將重構后的數據寫入RAID的熱備存儲區域(又稱熱備空間,例如可以是熱備盤)中,以保證RAID數據的完整性、正確性以及一致性。
主機下發的數據流包括主機的讀IO(Input Output,輸入輸出)和主機的寫IO。當主機下發的數據流對正在重構或待重構的存儲空間進行訪問時,重構數據流(重構預讀IO和重構寫IO)與主機下發的數據流之間會分別對同一存儲空間進行多次訪問,增加硬盤負擔,浪費系統資源。
發明內容
本發明實施例提供一種調度IO的方法和裝置,以減少硬盤負擔,避免系統帶寬浪費。
第一方面,提供一種調度IO的方法,包括:接收主機發送的第一讀IO,所述第一讀IO用于讀取RAID的第一存儲區域中的第一數據;根據所述第一讀IO和重構預讀IO生成第二讀IO,其中所述重構預讀IO用于讀取所述RAID的第二存儲區域中的第二數據,所述第二存儲區域與所述第一存儲區域具有至少部分交疊的存儲區域,所述第二讀IO用于讀取所述RAID的第三存儲區域中的第三數據,所述第三存儲區域包括所述至少部分交疊的存儲區域;向所述RAID發送所述第二讀IO。
結合第一方面,在第一方面的一種實現方式中,所述第三存儲區域為所述RAID的非故障存儲區域,且所述第三存儲區域包括所述第一存儲區域和 所述第二存儲區域,所述根據所述第一讀IO和重構預讀IO生成第二讀IO,包括:將所述第一讀IO和所述重構預讀IO合并為所述第二讀IO。
結合第一方面或其上述實現方式的任一種,在第一方面的另一種實現方式中,還包括:根據所述第二讀IO,從所述RAID接收所述第三數據;向所述主機返回包含在所述第三數據中的所述第一數據;根據包含在所述第三數據中的第二數據,重構所述RAID的故障存儲區域中的數據。
結合第一方面或其上述實現方式的任一種,在第一方面的另一種實現方式中,還包括:接收所述主機發送的寫IO,所述寫IO用于將第四數據寫入所述RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。
結合第一方面或其上述實現方式的任一種,在第一方面的另一種實現方式中,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。
結合第一方面或其上述實現方式的任一種,在第一方面的另一種實現方式中,所述將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域,包括:當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。
第二方面,提供一種調度IO的方法,包括:接收主機發送的寫IO,所述寫IO用于將第四數據寫入RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。
結合第二方面,在第二方面的一種實現方式中,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。
結合第二方面或其上述實現方式的任一種,在第二方面的另一種實現方式中,所述將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域,包括:當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數 據寫入所述熱備存儲區域;當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。
第三方面,提供一種調度IO的裝置,其特征在于,包括:第一接收單元,用于接收主機發送的第一讀IO,所述第一讀IO用于讀取RAID的第一存儲區域中的第一數據;生成單元,用于根據所述第一接收單元接收到的所述第一讀IO和重構預讀IO生成第二讀IO,其中所述重構預讀IO用于讀取所述RAID的第二存儲區域中的第二數據,所述第二存儲區域與所述第一存儲區域具有至少部分交疊的存儲區域,所述第二讀IO用于讀取所述RAID的第三存儲區域中的第三數據,所述第三存儲區域包括所述至少部分交疊的存儲區域;第一發送單元,用于向所述RAID發送所述生成單元生成的所述第二讀IO。
結合第三方面,在第三方面的一種實現方式中,所述第三存儲區域為所述RAID的非故障存儲區域,且所述第三存儲區域包括所述第一存儲區域和所述第二存儲區域,所述生成單元具體用于將所述第一讀IO和所述重構預讀IO合并為所述第二讀IO。
結合第三方面或其上述實現方式的任一種,在第三方面的另一種實現方式中,所述裝置還包括:第二接收單元,用于根據所述第二讀IO,從所述RAID接收所述第三數據;第二發送單元,用于向所述主機返回包含在所述第二接收單元接收的所述第三數據中的所述第一數據;重構單元,用于根據包含在第二接收單元接收的所述第三數據中的第二數據,重構所述RAID的故障存儲區域中的數據。
結合第三方面或其上述實現方式的任一種,在第三方面的另一種實現方式中,還包括:第三接收單元,用于接收所述主機發送的寫IO,所述寫IO用于將第四數據寫入所述RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;寫入單元,用于將所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。
結合第三方面或其上述實現方式的任一種,在第三方面的另一種實現方式中,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。
結合第三方面或其上述實現方式的任一種,在第三方面的另一種實現方 式中,所述寫入單元具體用于當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。
第四方面,提供一種調度IO的裝置,其特征在于,包括:接收單元,用于接收主機發送的寫IO,所述寫IO用于將第四數據寫入RAID的第四存儲區域,其中所述第四存儲區域位于所述RAID的故障存儲區域;寫入單元,用于將所述接收單元接收的所述第四數據作為所述第四存儲區域的重構數據寫入所述RAID的熱備存儲區域。
結合第四方面,在第四方面的一種實現方式中,所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域。
結合第四方面或其上述實現方式的任一種,在第四方面的另一種實現方式中,所述寫入單元具體用于當所述第四存儲區域為所述故障存儲區域中的正在重構的存儲區域時,將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域;當所述第四存儲區域為所述故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構所述第四存儲區域時,根據所述日志信息將所述第四數據作為所述第四存儲區域的重構數據寫入所述熱備存儲區域,其中所述日志信息用于指示所述寫IO的邏輯地址。
本發明實施例中,第一讀IO與重構預讀IO訪問的存儲區域部分交疊,利用第二讀IO讀取交疊部分的存儲區域,減少不同數據流對相同存儲區域的重復訪問,進而減少硬盤負擔,避免系統帶寬的浪費。
附圖說明
為了更清楚地說明本發明實施例的技術方案,下面將對本發明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是根據本發明實施例的調度IO的方法的結構框架圖。
圖2是根據本發明實施例的調度IO的方法的示意性流程圖。
圖3是根據本發明實施例的調度IO的方法的示意性流程圖。
圖4是根據本發明實施例的調度IO的方法的流程圖。
圖5是根據本發明實施例的調度IO的方法的流程圖。
圖6是根據本發明實施例的調度IO的裝置的示意性框圖。
圖7是根據本發明另一實施例的調度IO的裝置的示意性框圖。
圖8是根據本發明另一實施例的調度IO的裝置的示意性框圖。
圖9是根據本發明另一實施例的調度IO的裝置的示意性框圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明的一部分實施例,而不是全部實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動的前提下所獲得的所有其他實施例,都應屬于本發明保護的范圍。
在現有技術中,由于RAID具有冗余性,當RAID中的某個存儲區域出現故障時(例如硬盤發生故障),可以對該存儲區域中的數據進行恢復,該過程即為存儲區域的數據重構過程。在該數據重構過程中,發生故障的存儲區域可以分為正在重構的存儲區域和待重構的存儲區域。當主機數據流與重構數據流對RAID進行訪問時,基于故障存儲區域的上述劃分,采用不同的IO調度策略,減少不同數據流對相同存儲區域的重復訪問,進而降低硬盤負擔,避免系統帶寬的浪費。
具體地,如圖1所示,RAID130由n個磁盤組成,在主機的緩存110與RAID130之間設置“緩存-RAID適配器”(Cache-RAID Adaptor,簡稱CRA),可通過CRA控制根據本發明實施例的IO的調度,以降低相同存儲區域的重復訪問。該CRA可以是邏輯的功能實體,也可以是獨立的硬件裝置,本發明實施例對此不作具體限定。
圖2是根據本發明實施例的調度IO的方法的示意性流程圖。圖2的方法可由圖1中的CRA執行。該方法包括:
210、接收主機發送的第一讀IO,第一讀IO用于讀取RAID的第一存儲區域中的第一數據。
220、根據第一讀IO和重構預讀IO生成第二讀IO,其中重構預讀IO用于讀取RAID的第二存儲區域中的第二數據,第二存儲區域與第一存儲區 域具有至少部分交疊的存儲區域,第二讀IO用于讀取RAID的第三存儲區域中的第三數據,第三存儲區域包括至少部分交疊的存儲區域。
應理解,本發明實施例對步驟210中的第一存儲區域的具體位置不作限定,例如,第一存儲區域可以全部位于RAID的非故障存儲區域,也可以一部分位于RAID的非故障存儲區域、一部分位于RAID的故障存儲區域。
上述第三存儲區域可以是第一存儲區域和第二存儲區域的交疊區域,或者是第一存儲區域,或者是第三存儲區域,或者是第一存儲區域和第三存儲區域之和(即第一存儲區域和第三存儲區域的合集,假設第一存儲區域對應的存儲地址1000H~2000H,第三存儲區域的存儲地址為1050H~2050H,則第一存儲區域和第三存儲區域的合集為1000H~2050H),本發明實施例對此不作具體限定。
重構預讀IO是重構數據流的一部分,目的是通過讀取非故障存儲區域中的數據來重構故障存儲區域的數據。當第一讀IO與故障區域中某個重構預讀IO讀取的存儲區域部分重疊時,即可生成上述第二讀IO。
230、向RAID發送第二讀IO。
本發明實施例中,第一讀IO與重構預讀IO訪問的存儲區域部分交疊,利用第二讀IO讀取交疊部分的存儲區域,減少不同數據流對相同存儲區域的重復訪問,進而減少硬盤負擔,避免系統帶寬的浪費。
可選地,作為一個實施例,第三存儲區域為RAID的非故障存儲區域,且第三存儲區域包括第一存儲區域和第二存儲區域,步驟220可包括:將第一讀IO和重構預讀IO合并為第二讀IO。
具體地,在該實施例下,第三存儲區域可全部位于非故障存儲區域,第三存儲區域可取第一存儲區域和第二存儲區域的并集,上述將第一讀IO和重構預讀IO合并為第二讀IO具體可指:生成第二讀IO,該第二讀IO讀取的存儲空間是第一讀IO和重構預讀IO讀取的存儲空間之和。
進一步地,圖2方法還可包括:根據第二讀IO,從RAID接收第三數據;向主機返回包含在第三數據中的第一數據;根據包含在第三數據中的第二數據,重構RAID的故障存儲區域中的數據。
具體地,RAID根據第二讀IO將上述第三數據返回至CRA,由于第三存儲空間包括第一存儲空間和第二存儲空間,所以第三數據中包括第一數據和第二數據。當CRA獲得第三數據時,可以優先向主機返回第一讀IO對應 的第一數據,再根據第二數據異步計算重構數據,進而完成重構數據的下盤(即將重構數據寫入RAID的熱備存儲區域)。
可選地,作為另一個實施例,圖1的方法還可包括:接收主機發送的寫IO,寫IO用于將第四數據寫入RAID的第四存儲區域,其中第四存儲區域位于RAID的故障存儲區域;將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,避免了系統帶寬的浪費。
上述將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域具體可指:將第四數據存儲至所述RAID的熱備存儲區域中的、用于存儲所述第四存儲區域的重構數據的存儲區域。
舉例說明,當數據重構以CHUNK為單位進行時,假設當前正在重構第i CHUNK,且第四存儲區域為該第i CHUNK中的存儲區域,那么在熱備存儲區域會建立一個與第i CHUNK對應的存儲區域i,用于存儲第i CHUNK的重構數據,此時僅需要將第四數據寫入該存儲區域i對應位置即可。
進一步地,如果第四存儲區域為待重構的存儲區域(不屬于第i CHUNK,屬于還未重構的CHUNK)時,可以采用預先劃分的方式,預先建立所有待重構的CHUNK在熱備存儲空間的對應區域,以存儲各自的重構數據。此時,即可根據預先劃分好的存儲區域,將第四數據存入熱備空間的對應位置即可。需要說明的是,為了避免重構第四存儲區域時,重構數據覆蓋了該寫IO的數據,可以先檢測第四存儲區域是否已經寫入了主機寫IO的數據,如果已經寫入主機寫IO,則可以跳過第四存儲區域,繼續下一存儲區域的數據重構。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,進而減少硬盤負擔,避免了系統帶寬的浪費。
應理解,上述第四存儲區域可以是正在重構的存儲區域或者待重構的存儲區域。當上述第四存儲區域為正在重構的存儲區域時,如果第四存儲區域中的數據還未重構成功,可以直接將該第四數據作為該第四存儲區域的重構數據;如果第四存儲區域已經重構完成,準備下盤,則可用該第四數據替換 第四存儲區域中的重構數據,再寫入硬盤中。
可選地,作為另一個實施例,將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域可包括:當第四存儲區域為故障存儲區域中的正在重構的存儲區域時,將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域;當第四存儲區域為故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構第四存儲區域時,根據日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域,其中日志信息用于指示寫IO的邏輯地址。
具體地,上述日志信息可包括上述第四數據的內容、故障盤的邏輯ID、邏輯塊地址(LBA,Logic Block Address)、邏輯塊長度等,以便后續利用元數據和數據的映射關系恢復上述第四數據。
圖3是根據本發明實施例的調度IO的方法的示意性流程圖。圖3的方法可由圖1中的CRA執行。該方法包括:
310、接收主機發送的寫IO,寫IO用于將第四數據寫入RAID的第四存儲區域,其中第四存儲區域位于RAID的故障存儲區域;
320、將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,避免了系統帶寬的浪費。
可選地,作為一個實施例,第四存儲區域為故障存儲區域中的正在重構的存儲區域。
可選地,作為另一個實施例,步驟320可包括:當第四存儲區域為故障存儲區域中的正在重構的存儲區域時,將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域;當第四存儲區域為故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構第四存儲區域時,根據日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域,其中日志信息用于指示寫IO的邏輯地址。
下面結合具體例子,更加詳細地描述本發明實施例。應注意,圖4至圖5的例子僅僅是為了幫助本領域技術人員理解本發明實施例,而非要將本發明實施例限于所例示的具體數值或具體場景。本領域技術人員根據所給出的 圖4至圖5的例子,顯然可以進行各種等價的修改或變化,這樣的修改或變化也落入本發明實施例的范圍內。
圖4是根據本發明實施例的調度IO的方法的流程圖。圖4的方法可以由圖1中的CRA執行。在圖4的實施例中,主機發送的第一讀IO用于讀取第一存儲區域中的第一數據,該實施例以第一存儲區域為非故障存儲區域為例進行說明,當第一存儲區域位于故障存儲區域時,可以采用降級讀的方式,先記錄第一讀IO的日志,以便該故障存儲區域的數據重構后,根據該日志向主機返回第一數據。
410、接收主機發送的第一讀IO。
該第一讀IO用于讀取RAID的第一存儲區域中的第一數據。
420、判斷第一讀IO與重構預讀IO是否可以合并,如果是,執行步驟430;如果否,執行步驟440。
具體地,可以搜索重構數據流中重構預讀IO,當某個重構預讀IO讀取的第二存儲區域與第一存儲區域至少部分交疊時,即可判斷該重構預讀IO與第一讀IO可以合并。
430、與重構預讀IO合并,生成第二讀IO。
第二讀IO讀取第三存儲區域的第三數據,第三存儲區域可包括上述第一存儲區域和第二存儲區域。
440、向RAID發送第二讀IO。
即向RAID下發讀盤命令,讀取第三存儲區域的數據。
450、返回讀盤數據。
該讀盤數據即為上述第三數據。
460、優先向主機返回第一數據;同時異步計算重構數據。
由于第三存儲區域包括第一存儲區域,所以第三數據包括第一數據,只需要從第三數據中提取出第一數據,并向主機返回即可。
進一步地,第三數據中包括第二數據,該第二數據用于重構上述重構預讀IO對應的故障存儲區域中的數據,所以需要異步計算重構數據。
470、在返回主機IO之后查看本次硬盤的讀是否有效提高硬盤讀命中,如果是則下次硬盤讀IO采用本次預讀策略,否則更換預讀策略。
本發明實施例中,緩存的預讀策略與故障存儲區域的重構順序有關(假設故障存儲區域的恢復以CHUNK為單位,該重構順序用于指示CHUNK恢 復的先后順序)。當按照某種重構順序恢復數據時,可以計算出主機IO與重構預讀IO能夠合并的概率。如果該概率過低(如低于預設閾值),可以通過調整重構順序,相應地調整CACHE的預讀策略,以提高主機IO與重構預讀IO能夠合并的概率。
480、結束。
本發明實施例中,第一讀IO與重構預讀IO訪問的存儲區域部分交疊,利用第二讀IO讀取交疊部分的存儲區域,減少不同數據流對相同存儲區域的重復訪問,進而減少硬盤負擔,避免系統帶寬的浪費。
圖5是根據本發明實施例的調度IO的方法的流程圖。圖5的方法可以由圖1中的CRA執行。
510、接收主機發送的寫IO。
該寫IO用于將第四數據寫入RAID的第四存儲區域。
520、判斷第四存儲區域是否位于故障盤,如果是,執行步驟530;如果不是,執行步驟560。
530、判斷第四存儲區域的類型,當第四存儲區域為已重構的存儲區域時,執行步驟560;當第四存儲區域為正在重構的存儲區域時,執行步驟540;當第四存儲區域為待重構的存儲區域時,執行步驟550。
540、將所述第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域,然后執行步驟560。
當第四存儲區域的重構數據已經完成,準備寫盤時,可以用第四數據替換該重構數據;當第四存儲區域的重構數據還未開始重構或者完成重構時,直接將第四數據作為第四存儲區域的重構數據寫盤。
進一步地,如果本發明實施例中的RAID采用RAID5或RAID6,還可以更新寫校驗位,以提高寫數據的容錯率。
這種情況下可與Cache刷臟數據結合,優先刷第四存儲區域所在數據塊。
550、記錄寫IO的日志信息,然后執行步驟570。
記錄寫IO的日志信息,以便重構第四存儲區域時,根據該日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域。具體地,上述日志信息可包括上述第四數據的內容、故障盤的邏輯ID、邏輯塊地址、邏輯塊長度等。
560、下發寫盤命令。
570、結束。
上文中結合圖1至圖5,詳細描述了根據本發明實施例的調度IO的方法,下面將結合圖6至圖9,詳細描述根據本發明實施例的調度IO的裝置。
圖6是根據本發明實施例的調度IO的裝置的示意性框圖。
應理解,圖6的裝置600能夠實現圖2至圖5流程中的各個步驟,為避免重復,不再詳細描述。
裝置600包括:第一接收單元610、生成單元620和第一發送單元630。
第一接收單元610,用于接收主機發送的第一讀IO,第一讀IO用于讀取獨立磁盤冗余陣列RAID的第一存儲區域中的第一數據;
生成單元620,用于根據第一接收單元610接收到的第一讀IO和重構預讀IO生成第二讀IO,其中重構預讀IO用于讀取RAID的第二存儲區域中的第二數據,第二存儲區域與第一存儲區域具有至少部分交疊的存儲區域,第二讀IO用于讀取RAID的第三存儲區域中的第三數據,第三存儲區域包括至少部分交疊的存儲區域;
第一發送單元630,用于向RAID發送生成單元620生成的第二讀IO。
本發明實施例中,第一讀IO與重構預讀IO訪問的存儲區域部分交疊,利用第二讀IO讀取交疊部分的存儲區域,減少不同數據流對相同存儲區域的重復訪問,進而減少硬盤負擔,避免系統帶寬的浪費。
可選地,作為一個實施例,第三存儲區域為RAID的非故障存儲區域,且第三存儲區域包括第一存儲區域和第二存儲區域,生成單元620具體用于將第一讀IO和重構預讀IO合并為第二讀IO。
可選地,作為另一個實施例,裝置600還包括:第二接收單元,用于根據第二讀IO,從RAID接收第三數據;第二發送單元,用于向主機返回包含在第二接收單元接收的第三數據中的第一數據;重構單元,用于根據包含在第二接收單元接收的第三數據中的第二數據,重構RAID的故障存儲區域中的數據。
可選地,作為另一個實施例,裝置600還包括:第三接收單元,用于接收主機發送的寫IO,寫IO用于將第四數據寫入RAID的第四存儲區域,其中第四存儲區域位于RAID的故障存儲區域;寫入單元,用于將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入 RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,避免了系統帶寬的浪費。
可選地,作為另一個實施例,第四存儲區域為故障存儲區域中的正在重構的存儲區域。
可選地,作為另一個實施例,寫入單元具體用于當第四存儲區域為故障存儲區域中的正在重構的存儲區域時,將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域;當第四存儲區域為故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構第四存儲區域時,根據日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域,其中日志信息用于指示寫IO的邏輯地址。
圖7是根據本發明另一實施例的調度IO的裝置的示意性框圖。
應理解,圖7的裝置700能夠實現圖2至圖5流程中的各個步驟,為避免重復,不再詳細描述。
裝置700包括:接收單元710和寫入單元720。
接收單元710,用于接收主機發送的寫IO,寫IO用于將第四數據寫入獨立磁盤冗余陣列RAID的第四存儲區域,其中第四存儲區域位于RAID的故障存儲區域;
寫入單元720,用于將接收單元710接收的第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,避免了系統帶寬的浪費。
可選地,作為一個實施例,第四存儲區域為故障存儲區域中的正在重構的存儲區域。
可選地,作為另一個實施例,寫入單元720具體用于當第四存儲區域為故障存儲區域中的正在重構的存儲區域時,將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域;當第四存儲區域為故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構第四存儲區域時,根據日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域,其中日志信息用于指示寫IO的邏輯地址。
圖8是根據本發明另一實施例的調度IO的裝置的示意性框圖。
應理解,圖8的裝置800能夠實現圖2至圖5中的各個步驟,為避免重復,不再詳細描述。
裝置800包括:控制器810和存儲器820。
存儲器820,用于存儲程序。
控制器810,用于執行存儲器820存儲的程序,程序被控制器810執行時,用于接收主機發送的第一讀IO,第一讀IO用于讀取RAID的第一存儲區域中的第一數據;根據接收到的第一讀IO和重構預讀IO生成第二讀IO,其中重構預讀IO用于讀取RAID的第二存儲區域中的第二數據,第二存儲區域與第一存儲區域具有至少部分交疊的存儲區域,第二讀IO用于讀取RAID的第三存儲區域中的第三數據,第三存儲區域包括至少部分交疊的存儲區域;向RAID發送第二讀IO。
本發明實施例中,第一讀IO與重構預讀IO訪問的存儲區域部分交疊,利用第二讀IO讀取交疊部分的存儲區域,減少不同數據流對相同存儲區域的重復訪問,進而減少硬盤負擔,避免系統帶寬的浪費。
可選地,作為一個實施例,第三存儲區域為RAID的非故障存儲區域,且第三存儲區域包括第一存儲區域和第二存儲區域,控制器810具體用于將第一讀IO和重構預讀IO合并為第二讀IO。
可選地,作為另一個實施例,控制器810還用于根據第二讀IO,從RAID接收第三數據;向主機返回包含在第三數據中的第一數據;根據包含在第三數據中的第二數據,重構RAID的故障存儲區域中的數據。
可選地,作為另一個實施例,控制器810還用于接收主機發送的寫IO,寫IO用于將第四數據寫入RAID的第四存儲區域,其中第四存儲區域位于RAID的故障存儲區域;將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,避免了系統帶寬的浪費。
可選地,作為另一個實施例,第四存儲區域為故障存儲區域中的正在重構的存儲區域。
可選地,作為另一個實施例,控制器810具體用于當第四存儲區域為故障存儲區域中的正在重構的存儲區域時,將第四數據作為第四存儲區域的重 構數據寫入熱備存儲區域;當第四存儲區域為故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構第四存儲區域時,根據日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域,其中日志信息用于指示寫IO的邏輯地址。
圖9是根據本發明另一實施例的調度IO的裝置的示意性框圖。
應理解,圖9的裝置900能夠實現圖2至圖5中的各個步驟,為避免重復,不再詳細描述。
裝置900包括:控制器910和存儲器920。
存儲器920,用于存儲程序。
控制器910,用于執行存儲器920的程序,程序被控制器910執行時,接收主機發送的寫IO,寫IO用于將第四數據寫入RAID的第四存儲區域,其中第四存儲區域位于RAID的故障存儲區域;將第四數據作為第四存儲區域的重構數據寫入RAID的熱備存儲區域。
本發明實施例中,通過將主機發送的寫IO的數據作為重構數據寫入RAID的熱備存儲區域,避免了重構寫IO和主機寫IO對同一熱備存儲區域的多次寫操作,避免了系統帶寬的浪費。
可選地,作為一個實施例,第四存儲區域為故障存儲區域中的正在重構的存儲區域。
可選地,作為另一個實施例,控制器910具體用于當第四存儲區域為故障存儲區域中的正在重構的存儲區域時,將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域;當第四存儲區域為故障存儲區域中的待重構的存儲區域時,記錄日志信息,以便重構第四存儲區域時,根據日志信息將第四數據作為第四存儲區域的重構數據寫入熱備存儲區域,其中日志信息用于指示寫IO的邏輯地址。
本領域普通技術人員可以意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結合來實現。這些功能究竟以硬件還是軟件方式來執行,取決于技術方案的特定應用和設計約束條件。專業技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發明的范圍。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應 過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統、裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
以上所述,僅為本發明的具體實施方式,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應所述以權利要求的保護范圍為準。

關于本文
本文標題:調度IO的方法和裝置.pdf
鏈接地址:http://www.pqsozv.live/p-6180635.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
钻石光影