本發(fā)明涉及信息技術(shù)領(lǐng)域,尤其涉及一種重復(fù)數(shù)據(jù)刪除方法和存儲(chǔ)陣列。
背景技術(shù):存儲(chǔ)陣列,一般包括一個(gè)引擎,一個(gè)引擎中包括兩個(gè)控制器,通常稱為雙控制器結(jié)構(gòu)。如圖1所示,存儲(chǔ)陣列包括輸入輸出管理器A和輸入輸出管理器B,控制器A和控制器B。輸入輸出管理器A與控制器A連接,輸入輸出管理器B與控制B連接??刂破鰽包括外圍組件快速互聯(lián)(PeripheralComponentInterconnectexpress,PCIe)交換A、中央處理單元(CentralProcessingUnit,CPU)A和內(nèi)存A;控制器B包括外圍組件快速互聯(lián)(PeripheralComponentInterconnectexpress,PCIe)交換B、中央處理單元(CentralProcessingUnit,CPU)B和內(nèi)存B。PCIe交換A與PCIe交換B連接。在圖1所示的存儲(chǔ)陣列中,在將待寫入數(shù)據(jù)寫入到硬盤之前,進(jìn)行重復(fù)數(shù)據(jù)刪除。具體過程:控制器A的CPUA將內(nèi)存A中待寫入數(shù)據(jù)分塊得到多個(gè)數(shù)據(jù)塊,并且計(jì)算每一個(gè)數(shù)據(jù)塊的特征值,通過查找控制器A的特征值索引集合中的特征值,判斷是否為重復(fù)數(shù)據(jù)塊,如果是重復(fù)數(shù)據(jù)塊,則將該數(shù)據(jù)塊刪除;如果不是重復(fù)數(shù)據(jù)塊,則將該數(shù)據(jù)塊寫入硬盤。上述存儲(chǔ)陣列重復(fù)數(shù)據(jù)刪除過程,消耗了控制器的CPU的計(jì)算能力和控制器的內(nèi)存資源,嚴(yán)重影響了存儲(chǔ)陣列的性能。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種重復(fù)數(shù)據(jù)刪除方法和存儲(chǔ)陣列。第一方面,本發(fā)明實(shí)施例提供了一種重復(fù)數(shù)據(jù)刪除方法,所述方法應(yīng)用于存儲(chǔ)陣列,所述存儲(chǔ)陣列包括交換設(shè)備、第一控制器和緩存設(shè)備;其中所述第一控制器與所述交換設(shè)備連接;所述緩存設(shè)備與所述交換設(shè)備連接;所述交換設(shè)備與所述存儲(chǔ)陣列中的硬盤連接;所述方法包括:所述第一控制器從所述緩存設(shè)備接收待重刪數(shù)據(jù)塊的特征值,在數(shù)據(jù)塊特征值索引集合查找所述待重刪數(shù)據(jù)塊的特征值;;當(dāng)在所述數(shù)據(jù)塊特征值索引集合中沒有查找到所述待重刪數(shù)據(jù)塊的特征值時(shí),所述第一控制器,通過所述交換設(shè)備,獲取所述待重刪數(shù)據(jù)塊在所述緩存設(shè)備中的緩存地址;所述第一控制器,通過所述交換設(shè)備,向目標(biāo)硬盤的控制器發(fā)送數(shù)據(jù)讀取指令;所述數(shù)據(jù)讀取指令攜帶所述緩存設(shè)備的標(biāo)識(shí)和所述緩存地址;所述目標(biāo)硬盤的控制器根據(jù)所述緩存設(shè)備的標(biāo)識(shí)和所述緩存地址,通過所述交換設(shè)備,從所述緩存地址中讀取所述待重刪數(shù)據(jù)塊;所述目標(biāo)硬盤的控制器將所述待重刪數(shù)據(jù)塊存儲(chǔ)到所述目標(biāo)硬盤。結(jié)合本發(fā)明第一方面,第一種可能的實(shí)施方式中,所述方法還包括:所述目標(biāo)硬盤的控制器,通過所述交換設(shè)備,向所述第一控制器發(fā)送目標(biāo)硬盤存儲(chǔ)地址;所述目標(biāo)硬盤存儲(chǔ)地址包括所述目標(biāo)硬盤的控制器標(biāo)識(shí)和所述目標(biāo)硬盤中存儲(chǔ)所述待重刪數(shù)據(jù)塊的邏輯存儲(chǔ)地址;所述第一控制器在所述數(shù)據(jù)塊特征值索引集合中建立所述待重刪數(shù)據(jù)塊的特征值索引;所述待重刪數(shù)據(jù)塊的特征值索引包括所述待重刪數(shù)據(jù)塊的特征值和所述目標(biāo)硬盤存儲(chǔ)地址。結(jié)合本發(fā)明第一方面,第二種可能的實(shí)施方式中,所述存儲(chǔ)陣列還包括第二控制器,所述第二控制器與所述交換設(shè)備連接;所述第二控制器存儲(chǔ)所述待重刪數(shù)據(jù)塊地址,所述第二控制器為所述待重刪數(shù)據(jù)塊所在的目標(biāo)邏輯單元的歸屬控制器;則所述第一控制器從所述緩存設(shè)備接收待重刪數(shù)據(jù)塊的特征值,具體包括:所述緩存設(shè)備通過所述交換設(shè)備,向所述第二控制器發(fā)送所述待重刪數(shù)據(jù)塊的特征值;所述第二控制器確定所述待重刪數(shù)據(jù)塊的特征值的歸屬控制器為所述第一控制器;所述第二控制器,通過所述交換設(shè)備,向所述第一控制器發(fā)送所述待重刪數(shù)據(jù)塊的特征值。結(jié)合本發(fā)明第一方面的第二種可能的實(shí)施方式,第三種可能的實(shí)施方式中,在所述數(shù)據(jù)塊特征值索引集合中沒有查找到所述待重刪數(shù)據(jù)塊的特征值時(shí),所述方法還包括:所述第一控制器,通過所述交換設(shè)備,向所述第二控制器發(fā)送通知,所述通知中攜帶所述目標(biāo)硬盤存儲(chǔ)地址;所述第二控制器根據(jù)所述通知,建立所述待重刪數(shù)據(jù)塊地址、所述待重刪數(shù)據(jù)塊的特征值和所述目標(biāo)硬盤存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。結(jié)合本發(fā)明第一方面的第二種可能的實(shí)施方式,第四種可能的實(shí)施方式中,所述方法還包括:所述第二控制器建立所述待重刪數(shù)據(jù)塊地址、所述待重刪數(shù)據(jù)塊的特征值與所述第一控制器地址的對(duì)應(yīng)關(guān)系。第二方面,本發(fā)明實(shí)施例提供了一種存儲(chǔ)陣列,所述存儲(chǔ)陣列包括交換設(shè)備、第一控制器、緩存設(shè)備;其中,所述第一控制器與所述交換設(shè)備連接;所述緩存設(shè)備與所述交換設(shè)備連接;所述交換設(shè)備與所述存儲(chǔ)陣列中的硬盤連接;所述第一控制器用于從所述緩存設(shè)備接收待重刪數(shù)據(jù)塊的特征值,在數(shù)據(jù)塊特征值索引集合查找所述待重刪數(shù)據(jù)塊的特征值;當(dāng)在所述數(shù)據(jù)塊特征值索引集合中沒有查找到所述待重刪數(shù)據(jù)塊的特征值時(shí),所述第一控制器還用于通過所述交換設(shè)備,獲取所述待重刪數(shù)據(jù)塊在所述緩存設(shè)備中的緩存地址;所述第一控制器還用于通過所述交換設(shè)備,向目標(biāo)硬盤的控制器發(fā)送數(shù)據(jù)讀取指令;所述數(shù)據(jù)讀取指令攜帶所述緩存設(shè)備的標(biāo)識(shí)和所述緩存地址;所述目標(biāo)硬盤的控制器用于根據(jù)所述緩存設(shè)備的標(biāo)識(shí)和所述緩存地址,通過所述交換設(shè)備,從所述緩存地址中讀取所述待重刪數(shù)據(jù)塊;所述目標(biāo)硬盤的控制器還用于將所述待重刪數(shù)據(jù)塊存儲(chǔ)到所述目標(biāo)硬盤。結(jié)合本發(fā)明第二方面,第一種可能的實(shí)施方式中,所述目標(biāo)硬盤的控制器還用于通過所述交換設(shè)備,向所述第一控制器發(fā)送目標(biāo)硬盤存儲(chǔ)地址;所述目標(biāo)硬盤存儲(chǔ)地址包括所述目標(biāo)硬盤的控制器標(biāo)識(shí)和所述目標(biāo)硬盤中存儲(chǔ)所述待重刪數(shù)據(jù)塊的邏輯存儲(chǔ)地址;所述第一控制器還用于在所述數(shù)據(jù)塊特征值索引集合中建立所述待重刪數(shù)據(jù)塊的特征值索引;所述待重刪數(shù)據(jù)塊的特征值索引包括所述待重刪數(shù)據(jù)塊的特征值和所述目標(biāo)硬盤存儲(chǔ)地址。結(jié)合本發(fā)明第二方面,第二種可能的實(shí)施方式中,所述存儲(chǔ)陣列還包括第二控制器,所述第二控制器與所述交換設(shè)備連接;所述第二控制器用于存儲(chǔ)所述待重刪數(shù)據(jù)塊地址,所述第二控制器為所述待重刪數(shù)據(jù)塊所在的目標(biāo)邏輯單元的歸屬控制器;則所述第一控制器從所述緩存設(shè)備接收待重刪數(shù)據(jù)塊的特征值,具體包括:所述緩存設(shè)備通過所述交換設(shè)備,向所述第二控制器發(fā)送所述待重刪數(shù)據(jù)塊的特征值;所述第二控制器確定所述待重刪數(shù)據(jù)塊的特征值的歸屬控制器為所述第一控制器;所述第二控制器,通過所述交換設(shè)備,向所述第一控制器發(fā)送所述待重刪數(shù)據(jù)塊的特征值。結(jié)合本發(fā)明第一方面的第二種可能的實(shí)施方式,第三種可能的實(shí)施方式中,在所述數(shù)據(jù)塊特征值索引集合中沒有查找到所述待重刪數(shù)據(jù)塊的特征值時(shí),所述第一控制器還用于通過所述交換設(shè)備,向所述第二控制器發(fā)送通知,所述通知中攜帶所述目標(biāo)硬盤存儲(chǔ)地址;所述第二控制器還用于根據(jù)所述通知,建立所述待重刪數(shù)據(jù)塊地址、所述待重刪數(shù)據(jù)塊的特征值和所述目標(biāo)硬盤存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。結(jié)合本發(fā)明第一方面的第二種可能的實(shí)施方式,第四種可能的實(shí)施方式中,所述第二控制器還用于建立所述待重刪數(shù)據(jù)塊地址、所述待重刪數(shù)據(jù)塊的特征值與所述第一控制器地址的對(duì)應(yīng)關(guān)系。本發(fā)明實(shí)施例提供的重復(fù)數(shù)據(jù)刪除方法和存儲(chǔ)陣列,控制器與緩存設(shè)備通過交換設(shè)備連接,第一控制器從所述緩存設(shè)備接收待重刪數(shù)據(jù)塊的特征值,在數(shù)據(jù)塊特征值索引集合查找所述待重刪數(shù)據(jù)塊的特征值,當(dāng)沒有查詢到相同的特征值時(shí),第一控制器將待重刪數(shù)據(jù)塊在緩存設(shè)備中的緩存地址發(fā)送給目標(biāo)硬盤的控制器,目標(biāo)硬盤的控制器,從待重刪數(shù)據(jù)塊的緩存地址中讀取該待重刪數(shù)據(jù)塊。由緩存設(shè)備實(shí)現(xiàn)待重刪數(shù)據(jù)塊指紋的計(jì)算,節(jié)省了控制器的計(jì)算資源。在將待重刪數(shù)據(jù)塊存儲(chǔ)到目標(biāo)硬盤過程,控制器只提供待重刪數(shù)據(jù)塊緩存地址,由目標(biāo)硬盤的控制器直接從緩存地址中讀取待重刪數(shù)據(jù)塊,節(jié)省了控制器的計(jì)算資源數(shù)據(jù)和內(nèi)存資源,提高了存儲(chǔ)陣列的性能。附圖說明為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡單地介紹,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,還可以根據(jù)這些附圖獲得其他的附圖。圖1為現(xiàn)有技術(shù)存儲(chǔ)陣列結(jié)構(gòu)圖;圖2為本發(fā)明實(shí)施例存儲(chǔ)陣列結(jié)構(gòu)圖;圖3為本發(fā)明實(shí)施例數(shù)據(jù)寫請(qǐng)求處理流程圖;圖4為本發(fā)明實(shí)施例數(shù)據(jù)寫請(qǐng)求處理流程圖;圖5為本發(fā)明實(shí)施例數(shù)據(jù)讀請(qǐng)求處理流程圖;圖6為數(shù)據(jù)塊特征值索引集合示意圖;圖7為本發(fā)明實(shí)施例重復(fù)數(shù)據(jù)刪除處理流程圖。具體實(shí)施例下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明提供的實(shí)施例所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例提供的存儲(chǔ)陣列,如圖2所示的存儲(chǔ)陣列中,包括輸入輸出管理器A、控制器A、輸入輸出管理器B、控制器B、交換設(shè)備A、交換設(shè)備B和緩存設(shè)備M。其中,控制器A包括CPUA和內(nèi)存A,CPUA和內(nèi)存A通過總線進(jìn)行通信;控制器B包括CPUB和內(nèi)存B,CPUB和內(nèi)存B通過總線進(jìn)行通信。輸入輸出管理器A分別與交換設(shè)備A和交換設(shè)備B連接,輸入輸出管理器B分別與交換設(shè)備A和交換設(shè)備B連接。交換設(shè)備A與交換設(shè)備B互連連接。交換設(shè)備A和交換設(shè)備B均與緩存設(shè)備M連接。關(guān)于緩存設(shè)備M下面將詳細(xì)描述。控制器A分別與交換設(shè)備A和交換設(shè)備B連接,控制器B分別與交換設(shè)備A和交換設(shè)備B連接?;谏鲜雒枋?,圍繞交換設(shè)備A和交換設(shè)備B,組成了輸入輸出管理器A、輸入輸出管理器B、控制器A和控制器B的全互連架構(gòu)。圖2所示存儲(chǔ)陣列中,交換設(shè)備A與所有硬盤連接,交換設(shè)備B也與所有硬盤連接??刂破鰽與控制器B分別與圖2中所示的所有硬盤通信。具體地,控制器A通信交換設(shè)備A與所有硬盤通信,控制器B通信交換設(shè)備B與所有硬盤通信??刂破鰽用于將硬盤虛擬化,形成邏輯單元LUA,提供給主機(jī)A使用,主機(jī)A掛載LUA,主機(jī)A通過控制器A對(duì)該LUA進(jìn)行數(shù)據(jù)訪問操作,這里稱該LUA歸屬控制器A,即控制器A是LUA的歸屬控制器。同理,控制器B用于將硬盤虛擬化,形成邏輯單元LUB,提供給主機(jī)B使用,主機(jī)B掛載LUB,主機(jī)B通過控制器B對(duì)該LUB進(jìn)行數(shù)據(jù)訪問操作,這里稱該LUB歸屬控制器B,即控制器B是LUB的歸屬控制器。這里的主機(jī)可以為物理主機(jī)(或稱物理服務(wù)器),也可以為虛擬主機(jī)(或稱虛擬服務(wù)器)。邏輯單元LU,業(yè)界通常稱為邏輯單元號(hào)(LogicalUnitNumber,LUN)。分配給主機(jī)LUN,實(shí)際是指將某一LU的標(biāo)識(shí)分配給主機(jī),以使主機(jī)掛載該LU,因此,這里L(fēng)U與LUN具有相同含義。圖2所示的存儲(chǔ)陣列中,交換設(shè)備A和B可以為PCIe交換設(shè)備,也可以為非易失性存儲(chǔ)介質(zhì)的高速傳輸總線(Non-VolatileMemoryexpress,NVMe)交換設(shè)備或者串行小型計(jì)算機(jī)系統(tǒng)接口(SerialattachedSCSI,SAS)交換設(shè)備等,本發(fā)明實(shí)施例不作限定。當(dāng)交換設(shè)備A和B為PCIe交換設(shè)備時(shí),則與PCIe交換設(shè)備連接的硬盤為PCIe協(xié)議接口的硬盤;當(dāng)交換設(shè)備A和B為NVMe交換設(shè)備時(shí),則與NVMe交換設(shè)備連接的硬盤為NVMe協(xié)議接口的硬盤;當(dāng)交換設(shè)備A和B為SAS交換設(shè)備時(shí),則與SAS交換設(shè)備連接的硬盤為SAS協(xié)議接口的硬盤;圖2所示的硬盤可以是機(jī)械硬盤,也可以是固態(tài)存儲(chǔ)硬盤(SolidStateDisk,SSD),或者其他介質(zhì)的硬盤。圖2所示的存儲(chǔ)陣列中的硬盤,不同盤的存儲(chǔ)介質(zhì)可以不同,從而組成混合硬盤存儲(chǔ)陣列,本發(fā)明實(shí)施例不作限定。緩存設(shè)備M具體可以為由易失性存儲(chǔ)介質(zhì)或非易失性存儲(chǔ)介質(zhì)組成的存儲(chǔ)設(shè)備,如相變存儲(chǔ)器(PhaseChangeMemory,PCM)等,其他適合用來作為緩存設(shè)備的非易失性存儲(chǔ)介質(zhì)也可,本發(fā)明實(shí)施例對(duì)此不作限定。緩存設(shè)備M用于緩存數(shù)據(jù)。下面將結(jié)合本發(fā)明具體實(shí)施例,對(duì)緩存設(shè)備M進(jìn)行描述。本發(fā)明實(shí)施例中以交換設(shè)備A為PCIe交換設(shè)備,交換設(shè)備B為PCIe交換設(shè)備,硬盤為PCIe協(xié)議接口SSD為例。圖2所示的存儲(chǔ)陣列,輸入輸出管理器A接收主機(jī)發(fā)送的數(shù)據(jù)寫請(qǐng)求。一種實(shí)施方式,控制器A是輸入輸出管理器A的歸屬控制器。因此,輸入輸出管理器A接收到主機(jī)發(fā)送的數(shù)據(jù)操作請(qǐng)求,在沒有改變輸入輸出管理器A的請(qǐng)求發(fā)送策略的情況下,根據(jù)數(shù)據(jù)操作請(qǐng)求,默認(rèn)向控制器A發(fā)送請(qǐng)求,則稱控制器A是輸入輸出管理器A的歸屬控制器。本發(fā)明實(shí)施例中,輸入輸出管理器A接收主機(jī)發(fā)送的數(shù)據(jù)寫請(qǐng)求,通過PCIe交換設(shè)備A或PCIe交換設(shè)備B,向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求。具體通過哪一個(gè)PCIe交換設(shè)備轉(zhuǎn)發(fā)該請(qǐng)求,可以根據(jù)預(yù)設(shè)規(guī)則,一旦選定PCIe交換設(shè)備,則后續(xù)輸入輸出管理器A均通過該P(yáng)CIe交換設(shè)備與控制器A通信。當(dāng)然輸入輸出管理器A也可隨機(jī)選擇PCIe交換設(shè)備與控制器A進(jìn)行通信,本發(fā)明實(shí)施例對(duì)此不作限定。本發(fā)明實(shí)施例以輸入輸出管理器A選定PCIe交換設(shè)備A與控制器A進(jìn)行通信為例。輸入輸出管理器A接收到的數(shù)據(jù)寫請(qǐng)求攜帶待寫入數(shù)據(jù)地址。其中待寫入數(shù)據(jù)地址包括待寫入數(shù)據(jù)的目標(biāo)LU的標(biāo)識(shí)、待寫入數(shù)據(jù)的邏輯塊地址(LogicalBlockAddress,LBA)及待寫入數(shù)據(jù)的長度。輸入輸出管理器A向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求??刂破鰽接收到數(shù)據(jù)寫請(qǐng)求,通過待寫入數(shù)據(jù)地址中的待寫入數(shù)據(jù)的目標(biāo)LU的標(biāo)識(shí)判斷控制器A是否為目標(biāo)LU的歸屬控制器。當(dāng)控制器A是目標(biāo)LU的歸屬控制器,也就是目標(biāo)LU是由控制器A通過虛擬化硬盤形成的,并向主機(jī)提供的??刂破鰽確定用于緩存待寫入數(shù)據(jù)的緩存設(shè)備,本發(fā)明實(shí)施例中為緩存設(shè)備M。一種實(shí)現(xiàn)方式為,控制器A根據(jù)數(shù)據(jù)寫請(qǐng)求,指示緩存設(shè)備M為待寫入數(shù)據(jù)分配緩存地址,緩存設(shè)備M根據(jù)待寫數(shù)據(jù)長度分配緩存地址??刂破鰽獲取緩存設(shè)備M為待寫入數(shù)據(jù)分配的緩存地址(以下稱緩存設(shè)備M為待寫入數(shù)據(jù)分配的緩存地址為緩存地址M,一種實(shí)現(xiàn)方式,緩存地址包括緩存的起始地址和長度)??刂破鰽通過PCIe交換設(shè)備A,向輸入輸出管理器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。輸入輸出管理器A接收到控制器A發(fā)送的緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,根據(jù)緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,向緩存地址M寫入待寫入數(shù)據(jù)(也可稱為直接向緩存地址M寫入待寫入數(shù)據(jù))??刂破鰽只獲取待寫入數(shù)據(jù)分配緩存地址M,輸入輸出管理器通過PCIe交換設(shè)備A,直接向緩存地址寫入待寫入數(shù)據(jù),相對(duì)于現(xiàn)有技術(shù),節(jié)省了控制器A的CPU的計(jì)算資源和控制器A的內(nèi)存資源,提高數(shù)據(jù)寫入效率??刂破鰽建立待寫入數(shù)據(jù)地址、緩存設(shè)備M的標(biāo)識(shí)以及緩存地址M的對(duì)應(yīng)關(guān)系,以供讀取該待寫入數(shù)據(jù)時(shí),控制器A向輸入輸出管理器A發(fā)送待寫入數(shù)據(jù)的緩存地址,輸入輸出管理器A可從待寫入數(shù)據(jù)的緩存地址中讀取該待寫入數(shù)據(jù)(也可稱為直接從待寫入數(shù)據(jù)的緩存地址中讀取該待寫入數(shù)據(jù)),從而節(jié)省控制器A的CPU的計(jì)算資源和控制器A的內(nèi)存資源,提高數(shù)據(jù)讀取效率。待滿足條件后,如果存儲(chǔ)陣列不進(jìn)行重復(fù)數(shù)據(jù)刪除,則緩存設(shè)備M將待寫入數(shù)據(jù)存儲(chǔ)到存儲(chǔ)陣列的目標(biāo)SSD中。目標(biāo)SSD是指存儲(chǔ)待寫入數(shù)據(jù)的SSD。待寫入數(shù)據(jù)寫入到目標(biāo)SSD的具體過程,可以是控制器A,通過PCIe交換設(shè)備A或PCIe交換設(shè)備B,向目標(biāo)SSD的控制器發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。目標(biāo)SSD的控制器根據(jù)緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,通過PCIe交換設(shè)備A或PCIe交換設(shè)備B,直接從緩存地址M中讀取待寫入數(shù)據(jù),并且存儲(chǔ)待寫入數(shù)據(jù)。目標(biāo)SSD的控制器,通過PCIe交換設(shè)備A或PCIe交換設(shè)備B,向控制器A發(fā)送待寫入數(shù)據(jù)的目標(biāo)SSD存儲(chǔ)地址。其中,待寫入數(shù)據(jù)的目標(biāo)SSD存儲(chǔ)地址包括目標(biāo)SSD的控制器標(biāo)識(shí)和目標(biāo)SSD中存儲(chǔ)待寫入數(shù)據(jù)的邏輯存儲(chǔ)地址??刂破鰽建立待寫入數(shù)據(jù)地址和待寫入數(shù)據(jù)的目標(biāo)SSD存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。上述過程,具體如圖3所示:步驟301:主機(jī)向輸入輸出管理器A發(fā)送數(shù)據(jù)寫請(qǐng)求。輸入輸出管理器A為存儲(chǔ)陣列中輸入輸出接收管理設(shè)備,負(fù)責(zé)接收主機(jī)發(fā)送數(shù)據(jù)操作請(qǐng)求,并轉(zhuǎn)發(fā)到控制器。本發(fā)明實(shí)施例中,主機(jī)向輸入輸出管理器A發(fā)送攜帶待寫入數(shù)據(jù)地址的數(shù)據(jù)寫請(qǐng)求。示例性地,數(shù)據(jù)寫請(qǐng)求可以使用小型計(jì)算機(jī)系統(tǒng)接口(SmallComputerSystemInterface,SCSI)協(xié)議,即SCSI協(xié)議數(shù)據(jù)寫請(qǐng)求,當(dāng)然還可以使用其他協(xié)議,本發(fā)明實(shí)施例對(duì)此不作限定。步驟302:向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求。本發(fā)明實(shí)施例中,輸入輸出管理器A通常與特定的一個(gè)控制器進(jìn)行通信。關(guān)于輸入輸出管理器A如何建立與某一個(gè)控制器的對(duì)應(yīng)關(guān)系,可以有多種方式,比如根據(jù)控制器的負(fù)載,或者根據(jù)特定的路徑選擇算法,本發(fā)明對(duì)此不作限定。輸入輸出管理器A接收到數(shù)據(jù)寫請(qǐng)求,通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求。本發(fā)明實(shí)施例中,以輸入輸出管理器A接收到數(shù)據(jù)寫請(qǐng)求,通過PCIe交換設(shè)備A向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求為例。步驟303:控制器A獲取待寫入數(shù)據(jù)的緩存地址??刂破鰽接收輸入輸出設(shè)備A發(fā)送的數(shù)據(jù)寫請(qǐng)求,確定緩存待寫入數(shù)據(jù)的緩存設(shè)備,本發(fā)明實(shí)施例中,為緩存設(shè)備M。一種實(shí)現(xiàn)方式,緩存設(shè)備M分配給控制器A一段緩存地址??刂破鰽在該段緩存地址中,根據(jù)待寫入數(shù)據(jù)的長度,為待寫入數(shù)據(jù)分配緩存地址M。另一種實(shí)現(xiàn)方式,控制器A通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B向緩存設(shè)備M發(fā)送指令,指令中攜帶待寫入數(shù)據(jù)的長度,指示緩存設(shè)備M為待寫入數(shù)據(jù)分配緩存地址,控制器A獲得緩存地址M。步驟304:發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M??刂破鰽獲得緩存地址M,通過PCIe交換設(shè)備A向輸入輸出管理器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。其中,緩存設(shè)備M的標(biāo)識(shí)為。步驟305:主機(jī)向輸入輸出管理器A發(fā)送待寫入數(shù)據(jù)。輸入輸出設(shè)備A接收控制器A發(fā)送的緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,接收主機(jī)發(fā)送的待寫入數(shù)據(jù)。步驟306:向緩存地址M寫入待寫入數(shù)據(jù)。輸入輸出管理器A根據(jù)緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,通過PCIe交換設(shè)備A,直接向緩存地址M中寫入待寫入數(shù)據(jù)。輸入輸出管理器A,通過PCIe交換設(shè)備A,接收緩存設(shè)備M發(fā)送的待寫入數(shù)據(jù)寫成功響應(yīng)。輸入輸出管理器A向主機(jī)發(fā)送數(shù)據(jù)寫請(qǐng)求完成響應(yīng),通知主機(jī)寫請(qǐng)求操作完成。步驟307:通知控制器A待寫入數(shù)據(jù)寫入緩存地址M。輸入輸出管理器A將待寫入數(shù)據(jù)寫入緩存地址M成功,通知控制器A待寫入數(shù)據(jù)寫入到緩存地址M。步驟308:控制器A建立待寫入數(shù)據(jù)地址、緩存設(shè)備M和緩存地址M的對(duì)應(yīng)關(guān)系??刂破鰽接收輸入輸出管理器A發(fā)送的通知,建立待寫入數(shù)據(jù)地址、緩存設(shè)備M和緩存地址M的對(duì)應(yīng)關(guān)系。緩存設(shè)備M為待寫入數(shù)據(jù)分配緩存地址M,則建立待寫入數(shù)據(jù)地址與緩存地址M的對(duì)應(yīng)關(guān)系。緩存設(shè)備M可以從控制器A發(fā)送的緩存地址分配指令中獲得待寫入數(shù)據(jù)地址,緩存設(shè)備M分配緩存地址M后,建立待寫入數(shù)據(jù)地址與緩存地址M的對(duì)應(yīng)關(guān)系。另一種實(shí)現(xiàn)方式,緩存設(shè)備M為目標(biāo)LU的專屬緩存設(shè)備,即只用來緩存目標(biāo)LU的數(shù)據(jù),則緩存設(shè)備M默認(rèn)保存目標(biāo)LU、目標(biāo)LU中的LBA和緩存地址的對(duì)應(yīng)關(guān)系。緩存設(shè)備M認(rèn)保存目標(biāo)LU、目標(biāo)LU中的LBA與緩存設(shè)備M的某一段緩存地址的對(duì)應(yīng)關(guān)系,緩存設(shè)備M在該段緩存地址中為待寫入數(shù)據(jù)分配緩存地址M。為提高存儲(chǔ)陣列的可靠性,為將待寫入數(shù)據(jù)緩存多份,在圖1所示的現(xiàn)有技術(shù)中,輸入輸出管理器A發(fā)送待寫入數(shù)據(jù),CPU將待寫入數(shù)據(jù)寫入內(nèi)存A,CPUA從內(nèi)存A中讀取待寫入數(shù)據(jù),通過PCIe交換A將待寫入數(shù)據(jù)發(fā)送到PCIe交換B,PCIe交換B將待寫入數(shù)據(jù)發(fā)送到CPUB,CPUB將待寫入數(shù)據(jù)內(nèi)存B。在本發(fā)明實(shí)施例中,防止緩存設(shè)備M中待寫入數(shù)據(jù)丟失,存儲(chǔ)陣列會(huì)將待寫入數(shù)據(jù)緩存在多個(gè)緩存設(shè)備上。因此,以在兩個(gè)緩存設(shè)備上分別緩存待寫入數(shù)據(jù)為例,圖2所示的存儲(chǔ)陣列中還包括緩存設(shè)備N。PCIe交換設(shè)備A和PCIe交換設(shè)備B均與緩存設(shè)備N連接。因此,控制器A接收到輸入輸出管理器A發(fā)送的數(shù)據(jù)寫請(qǐng)求,確定緩存設(shè)備M作為主緩存設(shè)備緩存待寫入數(shù)據(jù),緩存設(shè)備N作為備份緩存設(shè)備緩存待寫入數(shù)據(jù)。控制器A分別獲取緩存設(shè)備M和緩存設(shè)備N中為待寫入數(shù)據(jù)分配的緩存地址。一種實(shí)現(xiàn)方式,控制器A分別向緩存設(shè)備M和緩存設(shè)備N發(fā)送指令,該指令分別用于指示緩存設(shè)備M和緩存設(shè)備N為該待寫入數(shù)據(jù)分配緩存地址。其中,該指令中攜帶待寫入數(shù)據(jù)的長度。緩存設(shè)備M為待寫入數(shù)據(jù)分配緩存地址稱為緩存地址M,緩存設(shè)備N為待寫入數(shù)據(jù)分配緩存地址稱為緩存地址N??刂破鰽獲取緩存地址M和緩存地址N??刂破鰽通過PCIe交換設(shè)備A向輸入輸出管理器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和存緩存地址M,通過PCIe交換設(shè)備A向輸入輸出管理器A發(fā)送緩存設(shè)備N的標(biāo)識(shí)和緩存地址N。具體實(shí)現(xiàn)中,控制器A可以通過一條消息將緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,以及緩存設(shè)備N的標(biāo)識(shí)和緩存地址N,發(fā)送給輸入輸出管理器A。也可以通過兩條消息分別發(fā)送,這里不作限定。另一種實(shí)現(xiàn),緩存設(shè)備M為控制器A分配一段專屬緩存地址,即只用來緩存歸屬控制器A的LU的數(shù)據(jù)??刂破鰽在緩存設(shè)備M的該段緩存地址中,直接為待寫入數(shù)據(jù)分配緩存地址M;緩存設(shè)備N為控制器A分配一段專屬緩存地址,控制器A在緩存設(shè)備N的該段緩存地址中,直接為待寫入數(shù)據(jù)分配緩存地址N。輸入輸出管理器A接收到緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,以及緩存設(shè)備N的標(biāo)識(shí)和緩存地址N。輸入輸出管理器A根據(jù)緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,通過PCIe交換設(shè)備A,直接向緩存地址M寫入待寫入數(shù)據(jù);輸入輸出管理器A根據(jù)緩存設(shè)備N的標(biāo)識(shí)和緩存地址N,PCIe交換設(shè)備A,直接向緩存地址N寫入待寫入數(shù)據(jù)。輸入輸出管理器A,通過PCIe交換設(shè)備A,接收緩存地址M寫入待寫入數(shù)據(jù)成功響應(yīng),通知控制器A建立待寫入數(shù)據(jù)地址、緩存設(shè)備M的標(biāo)識(shí)以及緩存地址M的對(duì)應(yīng)關(guān)系。同理,控制器A建立待寫入數(shù)據(jù)地址、緩存設(shè)備N的標(biāo)識(shí)以及緩存地址N的對(duì)應(yīng)關(guān)系。另一種實(shí)現(xiàn)方式,控制器A通過PCIe交換設(shè)備A,向輸入輸出管理器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。輸入輸出管理器A接收到緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。輸入輸出管理器A根據(jù)緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,直接向緩存地址M寫入待寫入數(shù)據(jù)??刂破鰽通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,向緩存設(shè)備M發(fā)送數(shù)據(jù)寫入指令,數(shù)據(jù)寫入指令緩存設(shè)備N的標(biāo)識(shí)和緩存地址N。緩存設(shè)備M緩存待寫入數(shù)據(jù),緩存設(shè)備M根據(jù)數(shù)據(jù)寫入指令,通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,直接向緩存地址N寫入待寫入數(shù)據(jù)。控制器A只獲取待寫入數(shù)據(jù)分配緩存地址M和緩存地址M,即可由輸入輸出管理器A實(shí)現(xiàn)將待寫入數(shù)據(jù)緩存到緩存設(shè)備M和緩存設(shè)備N,節(jié)省了控制器A的CPU的計(jì)算資源和控制器A的內(nèi)存資源,提高數(shù)據(jù)寫入效率。另一種情況,輸入輸出管理器A接收主機(jī)的數(shù)據(jù)寫請(qǐng)求。數(shù)據(jù)寫請(qǐng)求攜帶待寫入數(shù)據(jù)地址。輸入輸出管理器A通過PCIe交換設(shè)備A轉(zhuǎn)發(fā)向控制器發(fā)送數(shù)據(jù)寫請(qǐng)求??刂破鰽接收到輸入輸出管理器A發(fā)送的數(shù)據(jù)寫請(qǐng)求,根據(jù)數(shù)據(jù)寫請(qǐng)求中攜帶的目標(biāo)LU的標(biāo)識(shí),判斷控制器A不是目標(biāo)LU的歸屬控制器,具體實(shí)施例如圖4所示。步驟401:主機(jī)向輸入輸出管理器A發(fā)送數(shù)據(jù)寫請(qǐng)求。主機(jī)向輸入輸出管理器A發(fā)送數(shù)據(jù)寫請(qǐng)求,數(shù)據(jù)寫請(qǐng)求攜帶待寫入數(shù)據(jù)地址。步驟402:向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求。本發(fā)明實(shí)施例中,控制器A是輸入輸出管理器A的歸屬控制器。輸入輸出管理器A接收到數(shù)據(jù)寫請(qǐng)求,通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求。本發(fā)明實(shí)施例中,以輸入輸出管理器A接收到數(shù)據(jù)寫請(qǐng)求,通過PCIe交換設(shè)備A,向控制器A發(fā)送數(shù)據(jù)寫請(qǐng)求為例。步驟403:判斷控制A不是目標(biāo)LU的歸屬控制器??刂破鰽接收到輸入輸出管理器A發(fā)送的數(shù)據(jù)寫請(qǐng)求,根據(jù)數(shù)據(jù)寫請(qǐng)求中攜帶的待寫入數(shù)據(jù)的目標(biāo)LU的標(biāo)識(shí),判斷控制器A不是目標(biāo)LU的歸屬控制器??刂破鰽查詢控制器與LU的對(duì)應(yīng)關(guān)系,確定控制器B為目標(biāo)LU的歸屬控制器。步驟404:向控制器B發(fā)送數(shù)據(jù)寫請(qǐng)求??刂破鰽通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,向控制器B發(fā)送數(shù)據(jù)寫請(qǐng)求。本實(shí)施例以通過PCIe交換設(shè)備B,向控制器B轉(zhuǎn)發(fā)數(shù)據(jù)寫請(qǐng)求為例。步驟405獲取待寫入數(shù)據(jù)的緩存地址??刂破鰾接收控制器A發(fā)送的數(shù)據(jù)寫請(qǐng)求,確定緩存待寫入數(shù)據(jù)的緩存設(shè)備,本發(fā)明實(shí)施例中,為緩存設(shè)備M。具體實(shí)現(xiàn)方式可以參考前述控制器A從緩存設(shè)備M中獲取待寫入數(shù)據(jù)緩存地址的方式。步驟406:向控制器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M??刂破鰾獲取緩存地址M,通過PCIe交換設(shè)備B向控制器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。另一種實(shí)現(xiàn)方式,也可以通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,直接向輸入輸出管理器A緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。步驟407:向輸入輸出管理器A發(fā)送緩存設(shè)備M的標(biāo)識(shí)和緩存地址M。控制器A收到控制器B發(fā)送的緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,通過PCIe交換設(shè)待寫入數(shù)據(jù)的緩存地址M。步驟408:主機(jī)向輸入輸出管理器A發(fā)送待寫入數(shù)據(jù)。輸入輸出管理器A收到緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,響應(yīng)主機(jī)發(fā)送的數(shù)據(jù)寫請(qǐng)求。主機(jī)向輸入輸出管理器A發(fā)送待寫入數(shù)據(jù)。步驟409:向緩存地址M寫入待寫入數(shù)據(jù)。輸入輸出管理器A接收主機(jī)發(fā)送的待寫入數(shù)據(jù),根據(jù)緩存設(shè)備M的標(biāo)識(shí)和緩存地址M,通過PCIe交換設(shè)備A,直接向緩存地址M中寫入待寫入數(shù)據(jù)。輸入輸出管理器A,通過PCIe交換設(shè)備A,接收緩存設(shè)備M發(fā)送的待寫入數(shù)據(jù)寫成功響應(yīng)。輸入輸出管理器A向主機(jī)發(fā)送數(shù)據(jù)寫請(qǐng)求完成響應(yīng),通知主機(jī)寫請(qǐng)求操作完成。步驟410:通知控制器B待寫入數(shù)據(jù)寫入緩存地址M。輸入輸出管理器A將待寫入數(shù)據(jù)寫入緩存地址M成功,通知控制器A待寫入數(shù)據(jù)寫入到緩存地址M。具體包括輸入輸出管理器A,通過PCIe交換設(shè)備A轉(zhuǎn)發(fā)該通知至控制器A,控制器A將該通知通過PCIe交換設(shè)備B轉(zhuǎn)發(fā)給控制器B。或者,輸入輸出管理器A,通過PCIe交換設(shè)備A或者PCIe交換設(shè)備B,直接向控制器B發(fā)送該通知。步驟411:控制器B建立待寫入數(shù)據(jù)地址、緩存設(shè)備M和緩存地址M的對(duì)應(yīng)關(guān)系??刂破鰾接收輸入輸出管理器A發(fā)送的通知,建立待寫入數(shù)據(jù)地址、緩存設(shè)備M和緩存地址M的對(duì)應(yīng)關(guān)...