Raid子系統(tǒng)及其數(shù)據(jù)讀寫方法
【專利摘要】本發(fā)明實(shí)施例提供了一種獨(dú)立磁盤冗余陣列RAID子系統(tǒng),包括第一控制器和第二控制器和M個(gè)磁盤;M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元;第一控制器和第二控制器分別包含緩存空間,緩存空間被劃分為與條帶一一映射的條帶空間;第一控制器為N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;第二控制器為N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為N個(gè)條帶中其余的N-X個(gè)條帶的主控制器。本發(fā)明實(shí)施例可實(shí)現(xiàn)在RAID子系統(tǒng)中,Active-Active模式下兩個(gè)控制器在同時(shí)讀寫磁盤同一局域時(shí)不產(chǎn)生沖突。
【專利說明】RAID子系統(tǒng)及其數(shù)據(jù)讀寫方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體涉及一種RAID子系統(tǒng)及其數(shù)據(jù)讀寫方法。
【背景技術(shù)】
[0002]具有冗余特性的磁盤陣列(RedundantArrays of Inexpensive Disks, RAID)技術(shù)是將多個(gè)獨(dú)立的磁盤連接到同一個(gè)主機(jī)或磁盤控制器下,形成一個(gè)磁盤陣列,由同一個(gè)磁盤控制器進(jìn)行管理和讀寫調(diào)度,從而可實(shí)現(xiàn)并發(fā)讀寫和冗余容錯(cuò)。雙控制器RAID系統(tǒng)擁有兩個(gè)控制器,一個(gè)控制器出現(xiàn)故障時(shí),另外一個(gè)控制器能夠繼續(xù)對(duì)外提供數(shù)據(jù)服務(wù),避免服務(wù)中斷,大幅提高了 RAID子系統(tǒng)的可用性。雙控制器磁盤陣列系統(tǒng)的架構(gòu)如圖1所示,主機(jī)通過兩個(gè)硬件和軟件均相同的控制器訪問磁盤組,兩個(gè)控制器互為鏡像冗余。這種架構(gòu)主要有兩種運(yùn)行模式,一種稱為活躍-備份(Active-backup)模式,在Active-backup模式下,系統(tǒng)正常運(yùn)行時(shí)只有一個(gè)主控制器能對(duì)磁盤陣列下發(fā)讀寫請(qǐng)求,另一個(gè)控制器始終處于備用狀態(tài),僅當(dāng)主控制器發(fā)生故障時(shí),備用控制器才會(huì)接管;另一種稱為活躍-活躍(Active-Active)模式,在Active-Active模式下,系統(tǒng)正常運(yùn)行時(shí)兩個(gè)控制器均處于活動(dòng)狀態(tài),來自主機(jī)的讀寫請(qǐng)求可以通過兩個(gè)控制器并行下發(fā)到磁盤陣列。
[0003]顯然,在Active-Active模式下,存在兩個(gè)控制器同時(shí)讀寫磁盤同一區(qū)域的可能,這樣就會(huì)發(fā)生讀寫沖突,可能導(dǎo)致數(shù)據(jù)不一致。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種獨(dú)立磁盤冗余陣列RAID子系統(tǒng),以實(shí)現(xiàn)在雙控制器的RAID子系統(tǒng)中,Active-Active模式下兩個(gè)控制器在同時(shí)讀寫磁盤同一局域時(shí)不產(chǎn)生沖關(guān)。
[0005]第一方面,本發(fā)明實(shí)施例提供了一種獨(dú)立磁盤冗余陣列RAID子系統(tǒng),所述RAID子系統(tǒng)包括第一控制器和第二控制器和M個(gè)磁盤,所述第一控制器和所述第二控制器互為鏡像;
[0006]所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元;
[0007]所述第一控制器和所述第二控制器分別包含緩存空間,所述緩存空間被劃分為與所述條帶一一映射的條帶空間;
[0008]所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器。
[0009]基于第一方面,在第一種可能的實(shí)施方式中,所述M個(gè)磁盤通過一個(gè)串行連接小型計(jì)算機(jī)接口擴(kuò)展卡組成一個(gè)磁盤陣列;
[0010]所述第一控制器和第二控制器進(jìn)一步包括:[0011]中央處理器;
[0012]光纖卡,用于通過光纖在所述第一控制器和第二控制器之間傳遞數(shù)據(jù);
[0013]第一網(wǎng)卡,用于與外部交換機(jī)連接,所述交換機(jī)連接主機(jī);
[0014]第二網(wǎng)卡,用于在所述第一控制器和第二控制器之間傳遞同步信號(hào);
[0015]小型計(jì)算機(jī)接口擴(kuò)展卡,用于和所述串行連接小型計(jì)算機(jī)接口擴(kuò)展卡連接,在所述第一控制器、第二控制器與所述磁盤陣列之間進(jìn)行數(shù)據(jù)傳輸。
[0016]第二方面,本發(fā)明實(shí)施例提供了一種RAID子系統(tǒng)數(shù)據(jù)寫入方法,所述方法包括:
[0017]當(dāng)前控制器接收主機(jī)發(fā)送的寫數(shù)據(jù)請(qǐng)求,所述寫數(shù)據(jù)請(qǐng)求中包含所述寫入數(shù)據(jù)的地址,所述地址對(duì)應(yīng)磁盤中的第一條帶,所述RAID子系統(tǒng)包括第一控制器和第二控制器和M個(gè)磁盤,所述第一控制器和所述第二控制器互為鏡像;所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元,所述第一條帶為所述N個(gè)條帶中的一個(gè),所述第一控制器和所述第二控制器分別包含緩存,所述緩存被可以被動(dòng)態(tài)映射到為與所述條帶一一對(duì)應(yīng)的條帶空間;所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器;
[0018]若當(dāng)前控制器的緩存中是否存在空閑空間;則將所述空閑空間與所述第一條帶建立映射關(guān)系,將所述空閑空間作為所述第一條帶的條帶空間;
[0019]若在當(dāng)前控制器的緩存中不存在空閑空間時(shí),則獲取空閑空間;
[0020]將所述空閑空間與所述第一條帶建立映射關(guān)系,將所述空閑空間作為所述第一條帶的條帶空間;
[0021]將所述寫入數(shù)據(jù)緩存在所述第一條帶的條帶空間中;
[0022]判斷當(dāng)前控制器是否為所述第一條帶的主控制器,
[0023]若是,則將所述寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給所述第一條帶的從控制器,與所述從控制器進(jìn)行數(shù)據(jù)同步;
[0024]在接收到從控制器返回的數(shù)據(jù)同步完成的響應(yīng)之后,將所述第一條帶的條帶空間中的寫入數(shù)據(jù)寫入所述第一條帶。
[0025]基于第二方面,在第一種可能的實(shí)施方式中,在判斷當(dāng)前控制器是否為所述第一條帶的主控制器,之后,
[0026]若當(dāng)前控制器不是所述第一條帶的主控制器,則將所述寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給所述第一條帶的主控制器;
[0027]所述第一條帶的主控制器將所述寫數(shù)據(jù)請(qǐng)求中的所述寫入數(shù)據(jù)寫入所述第一條帶。
[0028]基于第二方面,在第二種可能的實(shí)施方式中,所述若在當(dāng)前控制器的緩存中不存在空閑空間時(shí),則獲取空閑空間,進(jìn)一步包括:
[0029]判斷所述緩存中是否存在第一條帶空間,所述第一條帶空間位干凈的條帶空間,該第一條帶空間中的數(shù)據(jù)已經(jīng)被存儲(chǔ)到磁盤中;
[0030]若存在第一條帶空間,則釋放第一條帶空間為空閑空間,用于緩存所述寫入數(shù)據(jù);[0031]若不存在所述第一條帶空間,則選擇第二條帶空間進(jìn)行倒盤,所述第二條帶空間為臟的條帶空間,所述第二條帶空間中的數(shù)據(jù)沒有被存儲(chǔ)到該第二條帶空間對(duì)應(yīng)的磁盤中的條帶中,所述倒盤是指將所述第二條帶空間中的數(shù)據(jù)存儲(chǔ)到所述磁盤中與該第二條帶空間對(duì)應(yīng)的條帶中;
[0032]將所述第二條帶空間釋放,獲取用于緩存搓成寫入數(shù)據(jù)的空閑空間。
[0033]基于第二方面的第二種可能的實(shí)施方式,在第三種可能的實(shí)施方式中,所述選擇第二條帶空間進(jìn)行倒盤進(jìn)一步包括:
[0034]選取訪問次數(shù)和訪問時(shí)間都滿足設(shè)定閾值的一個(gè)備選條帶空間作為第二條帶空間,當(dāng)前控制器為該備選條帶空間對(duì)應(yīng)的條帶的主控制器;
[0035]向所述備選條帶空間對(duì)應(yīng)的磁盤中的條帶發(fā)送寫數(shù)據(jù)請(qǐng)求;
[0036]所述磁盤中的條帶將所述備選條帶中的數(shù)據(jù)寫入所述條帶;
[0037]當(dāng)前控制器在接收到所述磁盤中的所述條帶的寫操作完成的響應(yīng)之后,釋放所述備選條帶空間;
[0038]向所述備選條帶空間對(duì)應(yīng)的條帶的從控制器發(fā)送倒盤通知,所述倒盤通知中攜帶有當(dāng)前控制器的計(jì)數(shù)器值。
[0039]基于第二方面的第三種可能的實(shí)施方式,在第四種可能的實(shí)施方式中,所述備選條帶空間對(duì)應(yīng)的條帶的從控制器接收到所述備選條帶空間對(duì)應(yīng)的條帶的主控制器發(fā)送的倒盤通知后,將從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值;
[0040]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為干凈狀態(tài);
[0041]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值不相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為臟狀態(tài)。
[0042]第三方面,本發(fā)明實(shí)施例提供了一種RAID子系統(tǒng)數(shù)據(jù)讀取方法,所述方法包括:
[0043]接收主機(jī)發(fā)送的讀數(shù)據(jù)請(qǐng)求,所述讀數(shù)據(jù)請(qǐng)求中包含所述目標(biāo)數(shù)據(jù)的地址,所述地址對(duì)應(yīng)磁盤中的第一條帶,所述RAID子系統(tǒng)包括第一控制器和第二控制器和M個(gè)磁盤,所述第一控制器和所述第二控制器互為鏡像;所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元,所述第一條帶為所述N個(gè)條帶中的一個(gè),所述第一控制器和所述第二控制器分別包含緩存空間,所述緩存空間被可以被動(dòng)態(tài)映射到為與所述條帶一一對(duì)應(yīng)的條帶空間;所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器;
[0044]若所述目標(biāo)數(shù)據(jù)沒有存儲(chǔ)在當(dāng)前控制器的緩存中與該條帶對(duì)應(yīng)的條帶空間中,貝U,判斷所述當(dāng)前控制器是否為所述第一條帶的主控制器;
[0045]若當(dāng)前控制器不是所述第一條帶的主控制器,則,當(dāng)前控制器將所述讀數(shù)據(jù)請(qǐng)求發(fā)送給所述第一條帶的從控制器;
[0046]接收所述從控制器返回的目標(biāo)數(shù)據(jù);
[0047]將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中;
[0048]當(dāng)前控制器向所述主機(jī)返回所述緩存中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)。[0049]基于第三方面,在第一種可能的實(shí)施方式,所述接收主機(jī)發(fā)送的讀數(shù)據(jù)請(qǐng)求,所述讀數(shù)據(jù)請(qǐng)求中包含所述目標(biāo)數(shù)據(jù)的地址,之后:
[0050]若所述目標(biāo)數(shù)據(jù)存儲(chǔ)在當(dāng)前控制器的緩存中與該第一條帶對(duì)應(yīng)的條帶空間中,則當(dāng)前控制器在所述條帶空間中讀取所需數(shù)據(jù);
[0051]之后,當(dāng)前控制器向所述主機(jī)返回所述緩存中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)的步驟。
[0052]基于第三方面,在第二種可能的實(shí)施方式中,在判斷所述當(dāng)前控制器是否為所述第一條帶的主控制器,之后:
[0053]若當(dāng)前控制器為所述條帶的主控制器,則當(dāng)前控制器在所述磁盤的所述第一條帶中讀取所需數(shù)據(jù);
[0054]之后,執(zhí)行將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中的步驟。
[0055]基于第三方面,或第三方面的第二種可能的實(shí)施方式,在第三種可能的實(shí)施方式中,所述的,將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中,進(jìn)一步包括:
[0056]在當(dāng)前控制器的緩存中存在空閑空間時(shí),將所述數(shù)據(jù)緩存在所述空閑空間中;
[0057]之后,當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟;
[0058]在當(dāng)前控制器的緩存中沒有空閑空間時(shí),判斷所述緩存中是否存在第一條帶空間,所述第一條帶空間位干凈的條帶空間,該第一條帶空間中的數(shù)據(jù)已經(jīng)被存儲(chǔ)到磁盤中;
[0059]若存在第一條帶空間,則釋放第一條帶空間為空閑空間,用于緩存所述數(shù)據(jù);
[0060]之后,當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟。
[0061]若不存在所述第一條帶空間,則選擇第二條帶空間進(jìn)行倒盤,所述第二條帶空間為臟的條帶空間,所述第二條帶空間中的數(shù)據(jù)沒有被存儲(chǔ)到該第二條帶空間對(duì)應(yīng)的磁盤中的條帶中,所述倒盤是指將所述第二條帶空間中的數(shù)據(jù)存儲(chǔ)到所述磁盤中與該第二條帶空間對(duì)應(yīng)的條帶中;
[0062]將所述第二條帶空間釋放,獲取空閑空間;
[0063]將所述目標(biāo)數(shù)據(jù)緩存在所述空閑空間中;
[0064]之后,當(dāng)前控制器執(zhí)行當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟。
[0065]基于第三方面的第三種可能的實(shí)施方式,在第四種可能的實(shí)施方式中,所述選擇第二條帶空間進(jìn)行倒盤進(jìn)一步包括:
[0066]選取訪問次數(shù)和訪問時(shí)間都滿足設(shè)定閾值的一個(gè)備選條帶空間作為第二條帶空間,當(dāng)前控制器為該備選條帶空間對(duì)應(yīng)的條帶的主控制器;
[0067]向所述備選條帶空間對(duì)應(yīng)的磁盤中的條帶發(fā)送寫數(shù)據(jù)請(qǐng)求;
[0068]所述磁盤中的條帶將所述備選條帶中的數(shù)據(jù)寫入所述條帶;
[0069]當(dāng)前控制器在接收到所述磁盤中的所述條帶的寫操作完成的響應(yīng)之后,釋放所述備選條帶空間;
[0070]向所述備選條帶空間對(duì)應(yīng)的條帶的從控制器發(fā)送倒盤通知,所述倒盤通知中攜帶有當(dāng)前控制器的計(jì)數(shù)器值。
[0071]基于第三方面的第四種可能的實(shí)施方式,在第五種可能的實(shí)施方式中,所述備選條帶空間對(duì)應(yīng)的條帶的從控制器接收到所述備選條帶空間對(duì)應(yīng)的條帶的主控制器發(fā)送的倒盤通知后,將從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值;
[0072]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為干凈狀態(tài);
[0073]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值不相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為臟狀態(tài)。
[0074]通過本發(fā)明實(shí)施例提供的RAID子系統(tǒng)中,兩個(gè)控制器互為鏡像冗余,共同管理一個(gè)磁盤陣列,為磁盤陣列的每個(gè)STRIPE設(shè)置主控制器和從控制器,只有STRIPE的主控制器能對(duì)該STRIPE進(jìn)行讀寫,兩個(gè)控制器中對(duì)緩存中每個(gè)條帶空間維護(hù)寫計(jì)數(shù)器,從控制器的計(jì)數(shù)器記錄著主機(jī)發(fā)下來的寫請(qǐng)求次數(shù),屬主控制器的計(jì)數(shù)器記錄著來自從控制器的寫同步次數(shù);當(dāng)運(yùn)行于Active-Active模式時(shí),兩個(gè)控制器可同時(shí)對(duì)磁盤陣列下發(fā)讀寫請(qǐng)求,可以避免兩個(gè)控制器同時(shí)讀寫地盤中的統(tǒng)一區(qū)域沖突的情況,并且降低系統(tǒng)開銷。
【專利附圖】
【附圖說明】
[0075]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0076]圖1是雙控制器RAID子系統(tǒng)的架構(gòu)圖;
[0077]圖2是本發(fā)明實(shí)施例提供的RAID子系統(tǒng)的結(jié)構(gòu)圖;
[0078]圖3是本發(fā)明實(shí)施例中磁盤陣列存儲(chǔ)空間劃分的示意圖;
[0079]圖4是本發(fā)明實(shí)施例提供的
[0080]圖5是本發(fā)明實(shí)施例提供的[0081 ] 圖6是本發(fā)明實(shí)施例提供的
[0082]圖7是本發(fā)明實(shí)施例提供的
【具體實(shí)施方式】
[0083]下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0084]如圖2所示,本發(fā)明實(shí)施例提供了一種獨(dú)立磁盤冗余陣列RAID子系統(tǒng),所述RAID子系統(tǒng)包括第一控制器A和第二控制器B和M個(gè)磁盤,所述第一控制器A和所述第二控制器B互為鏡像。
[0085]所述第一控制器和第二控制器進(jìn)一步包括:中央處理器(Central ProcessingUnit, CPU),用于通過光纖在所述第一控制器和第二控制器之間傳遞數(shù)據(jù)的光纖卡、用于與外部交換機(jī)連接的第一網(wǎng)卡,用于在所述第一控制器和第二控制器之間傳遞同步信號(hào)的第二網(wǎng)卡,小型計(jì)算機(jī)接口擴(kuò)展卡,通過第一網(wǎng)卡與交換機(jī)連接,進(jìn)一步連接主機(jī);通過小型計(jì)算機(jī)接口擴(kuò)展卡SCSI和串行連接小型計(jì)算機(jī)接口擴(kuò)展卡連接,在所述第一控制器、第二控制器與所述磁盤陣列之間進(jìn)行數(shù)據(jù)傳輸。此外還包括緩存RAW以及硬盤。
[0086]所述M個(gè)磁盤構(gòu)成一個(gè)磁盤陣列,在本發(fā)明實(shí)施例中,M個(gè)磁盤均為即串行連接SCSI (Serial Attached SCSI, SAS)硬盤,M個(gè)SAS硬盤通過一個(gè)所述M個(gè)磁盤通過一個(gè)串行連接小型計(jì)算機(jī)接口擴(kuò)展卡(SAS Expander)組成一個(gè)磁盤陣列,SAS Expander和兩個(gè)控制器A和B的SCSI卡連接。
[0087]SAS Expander是SAS端口交換和擴(kuò)展芯片,一方面擴(kuò)展接口數(shù)量,使控制器可以掛接更多的磁盤來組成磁盤陣列,另一方面它具有端口交換能力,能使兩個(gè)控制器A和B都能根據(jù)SAS地址訪問到磁盤陣列中的任意一個(gè)磁盤;兩個(gè)控制器A和B均為內(nèi)部實(shí)現(xiàn)了RAID算法的磁盤陣列控制器,它們的硬件配置完全相同,互為冗余,由于它們完全相同,互為鏡像,一個(gè)控制器是另一個(gè)控制器的鏡像控制器;千兆以太網(wǎng)交換機(jī)用于對(duì)外提供數(shù)據(jù)訪問鏈路,也就是說,外部的主機(jī)通過網(wǎng)線連接到該交換機(jī)并配置好網(wǎng)絡(luò)IP后就可以使用雙控制器系統(tǒng)提供的數(shù)據(jù)存取服務(wù)。
[0088]所述的第一網(wǎng)卡和第二網(wǎng)卡均為千兆網(wǎng)卡,兩個(gè)控制器是系統(tǒng)的硬件核心部分,控制器A和控制B內(nèi)部通過千兆網(wǎng)卡對(duì)外提供高速數(shù)據(jù)服務(wù)鏈路。每個(gè)控制器內(nèi)部采用SCSI卡連接到相同的磁盤組??刂破鲀?nèi)置高容量的RAW作為Cache (緩存),用于緩存熱點(diǎn)數(shù)據(jù)。兩個(gè)控制器Cache中的數(shù)據(jù)互為熱備份,也就是說在系統(tǒng)運(yùn)行過程中Cache實(shí)時(shí)緩存了主機(jī)正在進(jìn)行讀寫的數(shù)據(jù),且兩個(gè)鏡像控制器的Cache中保存的數(shù)據(jù)相同,互為備份,這樣當(dāng)一個(gè)控制器發(fā)生故障時(shí),就可以從另一個(gè)控制器中恢復(fù)緩存數(shù)據(jù)。兩個(gè)控制器作為一個(gè)整體對(duì)外提供服務(wù),并且兩者的硬件配置完全相同,互為硬件冗余,當(dāng)其中一個(gè)控制器出現(xiàn)單點(diǎn)故障時(shí),另外一個(gè)控制器能夠接管,繼續(xù)對(duì)外提供數(shù)據(jù)服務(wù),且Cache熱備份確保了不會(huì)出現(xiàn)數(shù)據(jù)丟失。控制器之間的Cache數(shù)據(jù)同步是采用光纖通道(Fibre Channel, FC)進(jìn)行數(shù)據(jù)傳輸,具有高速率和高可靠性,能夠提高兩個(gè)控制器之間的數(shù)據(jù)傳輸速率,降低系統(tǒng)整體的請(qǐng)求響應(yīng)時(shí)間。兩個(gè)控制器之間采用千兆網(wǎng)卡進(jìn)行心跳溝通,心跳是用來向?qū)Ψ綀?bào)告本控制器的狀態(tài)的數(shù)據(jù)包,控制器之間通過心跳能夠判斷對(duì)方上線、下線、故障等情況。
[0089]如圖3所示,所述M個(gè)磁盤構(gòu)成一個(gè)磁盤陣列,所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元(stripe unit, SU),所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元;
[0090]所述第一控制器和所述第二控制器分別包含緩存空間,所述緩存空間被劃分為與所述條帶一一映射的條帶空間;
[0091]所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器。
[0092]對(duì)于條帶的主控制器和從控制器劃分,一種較為簡單的實(shí)施方式為,控制器A作為序號(hào)為奇數(shù)的條帶的主控制器,控制器A作為序號(hào)為偶數(shù)的條帶的從控制器,同時(shí)控制器B作為序號(hào)為偶數(shù)的條帶的主控制器,控制器B作為序號(hào)為奇數(shù)的條帶的從控制器。
[0093]用戶也可以選擇相反的實(shí)施方式,例如,將控制器A作為序號(hào)為偶數(shù)的條帶的主控制器,不多贅述。
[0094]控制器緩存(Cache)中對(duì)緩存數(shù)據(jù)的管理也是以條帶為基本單位,緩存中的條帶空間與磁盤陣列中的條帶大小是一樣的,而且可以被動(dòng)態(tài)地被配置為是一一映射。與條帶類似,Cache中維護(hù)的緩存數(shù)據(jù)結(jié)構(gòu)中的每個(gè)條帶空間也由多個(gè)SU (STRIPE UNIT)構(gòu)成,每一個(gè)SU也與一個(gè)條帶中的一個(gè)條帶單元大小相同,是指一個(gè)條帶在某一塊磁盤中所占用的地址空間,如圖所示,每一個(gè)條帶空間可能會(huì)出現(xiàn)既有臟數(shù)據(jù)(Dirty Su),干凈數(shù)據(jù)(Clean Su),也有沒有緩存數(shù)據(jù)的??刂破魇盏竭B續(xù)的讀寫請(qǐng)求后,將讀寫請(qǐng)求按照STRIPE大小進(jìn)行劃分成小任務(wù),然后控制器處理每一個(gè)以STRIPE為單位的任務(wù),然后完成每一個(gè)STRIPE 任務(wù)。
[0095]如圖4所示,基于上述的實(shí)施例,本發(fā)明實(shí)施例提供了一種RAID子系統(tǒng)數(shù)據(jù)寫入方法,所述方法包括:
[0096]401,當(dāng)前控制器接收主機(jī)發(fā)送的寫數(shù)據(jù)請(qǐng)求,所述寫數(shù)據(jù)請(qǐng)求中包含所述寫入數(shù)據(jù)的地址,所述地址對(duì)應(yīng)磁盤中的第一條帶;
[0097]具體而言,當(dāng)前控制器接收主機(jī)發(fā)來的寫數(shù)據(jù)請(qǐng)求,在寫數(shù)據(jù)請(qǐng)求中攜帶有需要寫入磁盤的寫入數(shù)據(jù)和寫入數(shù)據(jù)的地址,該地址對(duì)應(yīng)于磁盤陣列中的一段存儲(chǔ)空間,該存儲(chǔ)空間即一個(gè)條帶或者一個(gè)條帶中的一個(gè)條帶單元。
[0098]在接收到寫數(shù)據(jù)請(qǐng)求之后,當(dāng)前控制器判斷緩存cache中是否存在空閑空間。
[0099]402,若當(dāng)前控制器的緩存中存在空閑空間,則將所述空閑空間與所述第一條帶建立映射關(guān)系,將所述空閑空間作為所述第一條帶的條帶空間;
[0100]403,若在當(dāng)前控制器的緩存中不存在空閑空間時(shí),則獲取空閑空間;
[0101]具體的,如果不存在空閑空間,則需要在緩存中獲取空閑空間,以存儲(chǔ)寫入數(shù)據(jù),具體的,獲取空閑空間的方法可參考圖6為:
[0102]判斷所述緩存中是否存在第一條帶空間,所述第一條帶空間位干凈的條帶空間,該第一條帶空間中的數(shù)據(jù)已經(jīng)被存儲(chǔ)到磁盤中;
[0103]若存在第一條帶空間,則釋放第一條帶空間為空閑空間,用于緩存所述寫入數(shù)據(jù);
[0104]若不存在所述第一條帶空間,則選擇第二條帶空間進(jìn)行倒盤,所述第二條帶空間為臟的條帶空間,所述第二條帶空間中的數(shù)據(jù)沒有被存儲(chǔ)到該第二條帶空間對(duì)應(yīng)的磁盤中的條帶中,所述倒盤是指將所述第二條帶空間中的數(shù)據(jù)存儲(chǔ)到所述磁盤中與該第二條帶空間對(duì)應(yīng)的條帶中;
[0105]將所述第二條帶空間釋放,獲取用于緩存所述寫入數(shù)據(jù)的空閑空間。
[0106]更進(jìn)一步的,在圖6中可以看到,所述選擇第二條帶空間進(jìn)行倒盤進(jìn)一步包括:
[0107]選取訪問次數(shù)和訪問時(shí)間都滿足設(shè)定閾值的一個(gè)備選條帶空間作為第二條帶空間,當(dāng)前控制器為該備選條帶空間對(duì)應(yīng)的條帶的主控制器;
[0108]具體而言,當(dāng)前控制器可以通過熱點(diǎn)數(shù)據(jù)淘汰算法選擇一個(gè)訪問次數(shù)比較少,或者長時(shí)間每天訪問的條帶空間作為備選條帶空間,并且該條帶空間對(duì)應(yīng)的條帶的主控制器為當(dāng)前控制器。
[0109]向所述備選條帶空間對(duì)應(yīng)的磁盤中的條帶發(fā)送寫數(shù)據(jù)請(qǐng)求;
[0110]所述磁盤中的條帶將所述備選條帶中的數(shù)據(jù)寫入所述條帶;
[0111]當(dāng)前控制器在接收到所述磁盤中的所述條帶的寫操作完成的響應(yīng)之后,釋放所述備選條帶空間;
[0112]向所述備選條帶空間對(duì)應(yīng)的條帶的從控制器發(fā)送倒盤通知,所述倒盤通知中攜帶有當(dāng)前控制器的計(jì)數(shù)器值。
[0113]所述備選條帶空間對(duì)應(yīng)的條帶的從控制器接收到所述備選條帶空間對(duì)應(yīng)的條帶的主控制器發(fā)送的倒盤通知后,將從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值;
[0114]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為干凈狀態(tài);
[0115]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值不相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為臟狀態(tài)。
[0116]再通過圖6所示的方法獲取到空閑空間之后,當(dāng)前控制器執(zhí)行步驟404。
[0117]404,將所述空閑空間與所述第一條帶建立映射關(guān)系,將所述空閑空間作為所述第一條帶的條帶空間;
[0118]具體而言,圖6中所示的方法只是獲取一段緩存中的空閑空間,此時(shí)需要重新為寫入數(shù)據(jù)的地址對(duì)應(yīng)的條帶與緩存中的空閑空間建立對(duì)應(yīng)關(guān)系,以方便后續(xù)的數(shù)據(jù)寫入操作。
[0119]405,將所述寫入數(shù)據(jù)緩存在所述第一條帶的條帶空間中;
[0120]406,判斷當(dāng)前控制器是否為所述第一條帶的主控制器,
[0121]407,若是,則將所述寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給所述第一條帶的從控制器,與所述從控制器進(jìn)行數(shù)據(jù)同步;
[0122]若當(dāng)前控制器不是所述第一條帶的主控制器,則將所述寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給所述第一條帶的主控制器;
[0123]所述第一條帶的主控制器將所述寫數(shù)據(jù)請(qǐng)求中的所述寫入數(shù)據(jù)寫入所述第一條帶。
[0124]408,在接收到從控制器`返回的數(shù)據(jù)同步完成的響應(yīng)之后,將所述第一條帶的條帶空間中的寫入數(shù)據(jù)寫入所述第一條帶。
[0125]結(jié)合圖5,將使得本發(fā)明實(shí)施例更容易理解。
[0126]相應(yīng)的,基于圖2所示的RAID子系統(tǒng),本發(fā)明實(shí)施例還提供了一種RAID子系統(tǒng)數(shù)據(jù)讀取方法,所述方法可參考圖7,包括:
[0127]701,接收主機(jī)發(fā)送的讀數(shù)據(jù)請(qǐng)求,所述讀數(shù)據(jù)請(qǐng)求中包含所述目標(biāo)數(shù)據(jù)的地址,所述地址對(duì)應(yīng)磁盤中的第一條帶;
[0128]在接收到讀數(shù)據(jù)請(qǐng)求之后,當(dāng)前控制器先要判斷該讀數(shù)據(jù)請(qǐng)求的地址對(duì)應(yīng)的第一條帶對(duì)應(yīng)的條帶空間中是否仍存儲(chǔ)有所需的目標(biāo)數(shù)據(jù),也就是說是否能夠命中cache,若所述目標(biāo)數(shù)據(jù)存儲(chǔ)在當(dāng)前控制器的緩存中與該第一條帶對(duì)應(yīng)的條帶空間中,則執(zhí)行702。
[0129]若所述目標(biāo)數(shù)據(jù)沒有存儲(chǔ)在當(dāng)前控制器的緩存中與該條帶對(duì)應(yīng)的條帶空間中,貝U,執(zhí)行703.判斷所述當(dāng)前控制器是否為所述第一條帶的主控制器;
[0130]702,當(dāng)前控制器在所述條帶空間中讀取所需數(shù)據(jù).[0131]703,判斷所述當(dāng)前控制器是否為所述第一條帶的主控制器;
[0132]若當(dāng)前控制器不是所述第一條帶的主控制器,則,執(zhí)行704.[0133]若當(dāng)前控制器是所述第一條帶的主控制器,則執(zhí)行步驟705。
[0134]704,當(dāng)前控制器將所述讀數(shù)據(jù)請(qǐng)求發(fā)送給所述第一條帶的從控制器;
[0135]在本發(fā)明實(shí)施例中,當(dāng)前條帶的鏡像控制器即為所述第一條帶的從控制器.[0136]705,當(dāng)前控制器讀取第一條帶中的數(shù)據(jù),之后執(zhí)行所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中
[0137]7056接收所述從控制器返回的目標(biāo)數(shù)據(jù),將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中;[0138]707,當(dāng)前控制器向所述主機(jī)返回所述緩存中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)。
[0139]更進(jìn)一步的,在將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間時(shí):
[0140]當(dāng)前控制器需要判斷緩存中是夠具有空閑空間,在當(dāng)前控制器的緩存中存在空閑空間時(shí),將所述數(shù)據(jù)緩存在所述空閑空間中;
[0141]之后,當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟;
[0142]在當(dāng)前控制器的緩存中沒有空閑空間時(shí),判斷所述緩存中是否存在第一條帶空間,所述第一條帶空間位干凈的條帶空間,該第一條帶空間中的數(shù)據(jù)已經(jīng)被存儲(chǔ)到磁盤中;
[0143]若存在第一條帶空間,則釋放第一條帶空間為空閑空間,用于緩存所述數(shù)據(jù);
[0144]之后,當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟。
[0145]若不存在所述第一條帶空間,則選擇第二條帶空間進(jìn)行倒盤,所述第二條帶空間為臟的條帶空間,所述第二條帶空間中的數(shù)據(jù)沒有被存儲(chǔ)到該第二條帶空間對(duì)應(yīng)的磁盤中的條帶中,所述倒盤是指將所述第二條帶空間中的數(shù)據(jù)存儲(chǔ)到所述磁盤中與該第二條帶空間對(duì)應(yīng)的條帶中;
[0146]將所述第二條帶空間釋放,獲取空閑空間;
[0147]將所述目標(biāo)數(shù)據(jù)緩存在所述空閑空間中;
[0148]之后,當(dāng)前控制器執(zhí)行當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟。
[0149]倒盤的方法和圖6所示的是實(shí)施例相同,因此不多贅述。
[0150]選取訪問次數(shù)和訪問時(shí)間都滿足設(shè)定閾值的一個(gè)備選條帶空間作為第二條帶空間,當(dāng)前控制器為該備選條帶空間對(duì)應(yīng)的條帶的主控制器;
[0151]向所述備選條帶空間對(duì)應(yīng)的磁盤中的條帶發(fā)送寫數(shù)據(jù)請(qǐng)求;
[0152]所述磁盤中的條帶將所述備選條帶中的數(shù)據(jù)寫入所述條帶;
[0153]當(dāng)前控制器在接收到所述磁盤中的所述條帶的寫操作完成的響應(yīng)之后,釋放所述備選條帶空間;
[0154]向所述備選條帶空間對(duì)應(yīng)的條帶的從控制器發(fā)送倒盤通知,所述倒盤通知中攜帶有當(dāng)前控制器的計(jì)數(shù)器值。
[0155]所述備選條帶空間對(duì)應(yīng)的條帶的從控制器接收到所述備選條帶空間對(duì)應(yīng)的條帶的主控制器發(fā)送的倒盤通知后,將從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值;
[0156]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為干凈狀態(tài);
[0157]在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值不相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為臟狀態(tài)。
[0158]通過本發(fā)明實(shí)施例提供的RAID子系統(tǒng)中,兩個(gè)控制器互為鏡像冗余,共同管理一個(gè)磁盤陣列,為磁盤陣列的每個(gè)STRIPE設(shè)置主控制器和從控制器,只有STRIPE的主控制器能對(duì)該STRIPE進(jìn)行讀寫,兩個(gè)控制器中對(duì)緩存中每個(gè)條帶空間維護(hù)寫計(jì)數(shù)器,從控制器的計(jì)數(shù)器記錄著主機(jī)發(fā)下來的寫請(qǐng)求次數(shù),屬主控制器的計(jì)數(shù)器記錄著來自從控制器的寫同步次數(shù);當(dāng)運(yùn)行于Active-Active模式時(shí),兩個(gè)控制器可同時(shí)對(duì)磁盤陣列下發(fā)讀寫請(qǐng)求,可以避免兩個(gè)控制器同時(shí)讀寫地盤中的統(tǒng)一區(qū)域沖突的情況,并且降低系統(tǒng)開銷。[0159]專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0160]結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、緩存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或【技術(shù)領(lǐng)域】內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
[0161]以上所述的【具體實(shí)施方式】,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的【具體實(shí)施方式】而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種獨(dú)立磁盤冗余陣列RAID子系統(tǒng),其特征在于,所述RAID子系統(tǒng)包括第一控制器和第二控制器和M個(gè)磁盤,所述第一控制器和所述第二控制器互為鏡像; 所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元;所述第一控制器和所述第二控制器分別包含緩存空間,所述緩存空間被劃分為與所述條帶一一映射的條帶空間; 所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器。
2.如權(quán)利要求1所述的RAID子系統(tǒng),其特征在于,所述M個(gè)磁盤通過一個(gè)串行連接小型計(jì)算機(jī)接口擴(kuò)展卡組成一個(gè)磁盤陣列; 所述第一控制器和第二控制器進(jìn)一步包括: 中央處理器; 光纖卡,用于通過光纖在所述第一控制器和第二控制器之間傳遞數(shù)據(jù); 第一網(wǎng)卡,用于與外部交換機(jī)連接,所述交換機(jī)連接主機(jī); 第二網(wǎng)卡,用于在所述第一控制器和第二控制器之間傳遞同步信號(hào); 小型計(jì)算機(jī)接口擴(kuò)展卡,用于和所述串行連接小型計(jì)算機(jī)接口擴(kuò)展卡連接,在所述第一控制器、第二控制器與所述磁盤陣列之間進(jìn)行數(shù)據(jù)傳輸。
3.—種RAID子系統(tǒng)數(shù)`據(jù)寫入方法,其特征在于,所述方法包括: 當(dāng)前控制器接收主機(jī)發(fā)送的寫數(shù)據(jù)請(qǐng)求,所述寫數(shù)據(jù)請(qǐng)求中包含所述寫入數(shù)據(jù)的地址,所述地址對(duì)應(yīng)磁盤中的第一條帶,所述RAID子系統(tǒng)包括第一控制器和第二控制器和M個(gè)磁盤,所述第一控制器和所述第二控制器互為鏡像;所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元,所述第一條帶為所述N個(gè)條帶中的一個(gè),所述第一控制器和所述第二控制器分別包含緩存,所述緩存被可以被動(dòng)態(tài)映射到為與所述條帶一一對(duì)應(yīng)的條帶空間;所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器; 若當(dāng)前控制器的緩存中是否存在空閑空間;則將所述空閑空間與所述第一條帶建立映射關(guān)系,將所述空閑空間作為所述第一條帶的條帶空間; 若在當(dāng)前控制器的緩存中不存在空閑空間時(shí),則獲取空閑空間; 將所述空閑空間與所述第一條帶建立映射關(guān)系,將所述空閑空間作為所述第一條帶的條帶空間; 將所述寫入數(shù)據(jù)緩存在所述第一條帶的條帶空間中; 判斷當(dāng)前控制器是否為所述第一條帶的主控制器, 若是,則將所述寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給所述第一條帶的從控制器,與所述從控制器進(jìn)行數(shù)據(jù)同步; 在接收到從控制器返回的數(shù)據(jù)同步完成的響應(yīng)之后,將所述第一條帶的條帶空間中的寫入數(shù)據(jù)寫入所述第一條帶。
4.如權(quán)利要求3所述的數(shù)據(jù)寫入方法,在判斷當(dāng)前控制器是否為所述第一條帶的主控制器,之后, 若當(dāng)前控制器不是所述第一條帶的主控制器,則將所述寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)給所述第一條帶的主控制器; 所述第一條帶的主控制器將所述寫數(shù)據(jù)請(qǐng)求中的所述寫入數(shù)據(jù)寫入所述第一條帶。
5.如權(quán)利要求3所述的數(shù)據(jù)寫入方法,其特征在于,所述若在當(dāng)前控制器的緩存中不存在空閑空間時(shí),則獲取空閑空間,進(jìn)一步包括: 判斷所述緩存中是否存在第一條帶空間,所述第一條帶空間位干凈的條帶空間,該第一條帶空間中的數(shù)據(jù)已經(jīng)被存儲(chǔ)到磁盤中; 若存在第一條帶空間,則釋放第一條帶空間為空閑空間,用于緩存所述寫入數(shù)據(jù); 若不存在所述第一條帶空間,則選擇第二條帶空間進(jìn)行倒盤,所述第二條帶空間為臟的條帶空間,所述第二條帶空間中的數(shù)據(jù)沒有被存儲(chǔ)到該第二條帶空間對(duì)應(yīng)的磁盤中的條帶中,所述倒盤是指將所述第二條帶空間中的數(shù)據(jù)存儲(chǔ)到所述磁盤中與該第二條帶空間對(duì)應(yīng)的條帶中; 將所述第二條帶空間釋放,獲取用于緩存搓成寫入數(shù)據(jù)的空閑空間。
6.如權(quán)利要求5所述的數(shù)據(jù)寫入方法,其特征在于,所述選擇第二條帶空間進(jìn)行倒盤進(jìn)一步包括: 選取訪問次數(shù)和訪問時(shí)間都滿足設(shè)定閾值的一個(gè)備選條帶空間作為第二條帶空間,當(dāng)前控制器為該備選條帶空間對(duì)應(yīng)的條帶的主控制器; 向所述備選條帶空間對(duì)應(yīng)的磁盤中的條帶發(fā)送寫數(shù)據(jù)請(qǐng)求; 所述磁盤中的條帶將所述備選條帶中的數(shù)據(jù)寫入所述條帶; 當(dāng)前控制器在接收到所述磁盤中的所述條帶的寫操作完成的響應(yīng)之后,釋放所述備選條帶空間; 向所述備選條帶空間對(duì)應(yīng)的條帶的從控制器發(fā)送倒盤通知,所述倒盤通知中攜帶有當(dāng)前控制器的計(jì)數(shù)器值。
7.如權(quán)利要求6所述的方法,其特征在于,所述備選條帶空間對(duì)應(yīng)的條帶的從控制器接收到所述備選條帶空間對(duì)應(yīng)的條帶的主控制器發(fā)送的倒盤通知后,將從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值; 在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為干凈狀態(tài); 在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值不相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為臟狀態(tài)。
8. —種RAID子系統(tǒng)數(shù)據(jù)讀取方法,其特征在于,所述方法包括: 接收主機(jī)發(fā)送的讀數(shù)據(jù)請(qǐng)求,所述讀數(shù)據(jù)請(qǐng)求中包含所述目標(biāo)數(shù)據(jù)的地址,所述地址對(duì)應(yīng)磁盤中的第一條帶,所述RAID子系統(tǒng)包括第一控制器和第二控制器和M個(gè)磁盤,所述第一控制器和所述第二控制器互為鏡像;所述M個(gè)磁盤的全部存儲(chǔ)空間被劃分為N個(gè)條帶,每個(gè)條帶進(jìn)一步包括M個(gè)條帶單元,所述M個(gè)條帶單元分別屬于不同的磁盤,每個(gè)磁盤的存儲(chǔ)空間被劃分為N個(gè)條帶單元,所述第一條帶為所述N個(gè)條帶中的一個(gè),所述第一控制器和所述第二控制器分別包含緩存空間,所述緩存空間被可以被動(dòng)態(tài)映射到為與所述條帶一一對(duì)應(yīng)的條帶空間;所述第一控制器為所述N個(gè)條帶中的X個(gè)條帶的主控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的從控制器;所述第二控制器為所述N個(gè)條帶中的X個(gè)條帶的從控制器,同時(shí)為所述N個(gè)條帶中其余的N-X個(gè)條帶的主控制器; 若所述目標(biāo)數(shù)據(jù)沒有存儲(chǔ)在當(dāng)前控制器的緩存中與該條帶對(duì)應(yīng)的條帶空間中,則,判斷所述當(dāng)前控制器是否為所述第一條帶的主控制器; 若當(dāng)前控制器不是所述第一條帶的主控制器,則,當(dāng)前控制器將所述讀數(shù)據(jù)請(qǐng)求發(fā)送給所述第一條帶的從控制器; 接收所述從控制器返回的目標(biāo)數(shù)據(jù); 將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中; 當(dāng)前控制器向所述主機(jī)返回所述緩存中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)。
9.如權(quán)利要求8所述的數(shù)據(jù)讀取方法,其特征在于,所述接收主機(jī)發(fā)送的讀數(shù)據(jù)請(qǐng)求,所述讀數(shù)據(jù)請(qǐng)求中包含所述目標(biāo)數(shù)據(jù)的地址,之后: 若所述目標(biāo)數(shù)據(jù)存儲(chǔ)在當(dāng)前控制器的緩存中與該第一條帶對(duì)應(yīng)的條帶空間中,則當(dāng)前控制器在所述條帶空間中讀取所需數(shù)據(jù); 之后,當(dāng)前控制器向所述主機(jī)返回所述緩存中存儲(chǔ)的所述目標(biāo)數(shù)據(jù)的步驟。
10.如權(quán)利要求8所述的數(shù)據(jù)讀取方法,其特征在于,在判斷所述當(dāng)前控制器是否為所述第一條帶的主控制器,之后: 若當(dāng)前控制器為所述條帶的主控制器,則當(dāng)前控制器在所述磁盤的所述第一條帶中讀取所需數(shù)據(jù); 之后,執(zhí)行將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中的步驟。
11.如權(quán)利要求8或10所述的數(shù)據(jù)讀取方法,其特征在于,所述的,將所述目標(biāo)數(shù)據(jù)緩存在當(dāng)前控制器的緩存中的空閑空間中,進(jìn)一步包括: 在當(dāng)前控制器的緩存中存在空閑空間時(shí),將所述數(shù)據(jù)緩存在所述空閑空間中; 之后,當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟; 在當(dāng)前控制器的緩存中沒有空閑空間時(shí),判斷所述緩存中是否存在第一條帶空間,所述第一條帶空間位干凈的條帶空間,該第一條帶空間中的數(shù)據(jù)已經(jīng)被存儲(chǔ)到磁盤中;若存在第一條帶空間,則釋放第一條帶空間為空閑空間,用于緩存所述數(shù)據(jù); 之后,當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟。 若不存在所述第一條帶空間,則選擇第二條帶空間進(jìn)行倒盤,所述第二條帶空間為臟的條帶空間,所述第二條帶空間中的數(shù)據(jù)沒有被存儲(chǔ)到該第二條帶空間對(duì)應(yīng)的磁盤中的條帶中,所述倒盤是指將所述第二條帶空間中的數(shù)據(jù)存儲(chǔ)到所述磁盤中與該第二條帶空間對(duì)應(yīng)的條帶中; 將所述第二條帶空間釋放,獲取空閑空間; 將所述目標(biāo)數(shù)據(jù)緩存在所述空閑空間中; 之后,當(dāng)前控制器執(zhí)行當(dāng)前控制器執(zhí)行通過所述緩存向所述主機(jī)返回所述數(shù)據(jù)的步驟。
12.如權(quán)利要求11所述的方法,其特征在于,所述選擇第二條帶空間進(jìn)行倒盤進(jìn)一步包括: 選取訪問次數(shù)和訪問時(shí)間都滿足設(shè)定閾值的一個(gè)備選條帶空間作為第二條帶空間,當(dāng)前控制器為該備選條帶空間對(duì)應(yīng)的條帶的主控制器; 向所述備選條帶空間對(duì)應(yīng)的磁盤中的條帶發(fā)送寫數(shù)據(jù)請(qǐng)求; 所述磁盤中的條帶將所述備選條帶中的數(shù)據(jù)寫入所述條帶; 當(dāng)前控制器在接收到所述磁盤中的所述條帶的寫操作完成的響應(yīng)之后,釋放所述備選條帶空間; 向所述備選條帶空間對(duì)應(yīng)的條帶的從控制器發(fā)送倒盤通知,所述倒盤通知中攜帶有當(dāng)前控制器的計(jì)數(shù)器值。
13.如權(quán)利要求11所述的方法,其特征在于,所述備選條帶空間對(duì)應(yīng)的條帶的從控制器接收到所述備選條帶空間對(duì)應(yīng)的條帶的主控制器發(fā)送的倒盤通知后,將從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值; 在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條帶空間置為干凈狀態(tài); 在從控制器的計(jì)數(shù)值減去所述倒盤通知中的計(jì)數(shù)器值不相等時(shí),將所述從控制器中與所述備選條帶空間對(duì)應(yīng)的條 帶空間置為臟狀態(tài)。
【文檔編號(hào)】G06F3/06GK103488435SQ201310440116
【公開日】2014年1月1日 申請(qǐng)日期:2013年9月24日 優(yōu)先權(quán)日:2013年9月24日
【發(fā)明者】李佳瞵, 萬繼光, 姜濤 申請(qǐng)人:華為技術(shù)有限公司