專利名稱:一種處理i/o超時的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種處理i/o超時的方法和裝置。
背景技術(shù):
為了提高數(shù)據(jù)傳輸?shù)目煽啃?,避免單點(diǎn)故障,應(yīng)用服務(wù)器與存儲系統(tǒng)之間往往采用多條路徑相連的方式。多路徑軟件負(fù)責(zé)管理多條路徑,在首選路徑發(fā)生故障時切換到備用路徑,以保證業(yè)務(wù)不中斷。
從路徑故障發(fā)生到I/O (Input/Output,輸入/輸出)請求切換到備用路徑的這段時間,下發(fā)I/o請求的上層應(yīng)用將一直處于阻塞狀態(tài),等待I/O請求返回給多路徑軟件處理,因此多路徑軟件處理I/O請求切換的時間將影響到上層應(yīng)用被阻塞的時間,是多路徑軟件的一項重要技術(shù)指標(biāo)。
其中,路徑故障通常包括路徑斷連和I/O請求超時。在路徑斷連的場景下, HBA(Host Bus Adapter,主機(jī)總線適配器)可以明確感知到路徑中斷,并立即返回I/O請求失敗,通知多路徑軟件切換到備用路徑重新處理,所以多路徑軟件可以快速切換I/O請求到備用路徑。
在I/O請求超時的場景下,多路徑軟件必須等到超時時間達(dá)到上層應(yīng)用預(yù)設(shè)的超時時間之后才能觸發(fā)I/o請求超時錯誤,同時切換I/O請求到備用路徑,這通常需要30s以上,針對這種情況下I/O請求切換時間過長的問題,現(xiàn)有技術(shù)提出了如下解決方法
通過多路徑軟件設(shè)置下發(fā)給HBA的超時時間,通過減小設(shè)置的I/O請求的超時時間,可以更早返回I/o請求的超時錯誤,進(jìn)而縮短切換到備用路徑的時間。例如多路徑軟件設(shè)置下發(fā)給HBA的超時時間為5S,當(dāng)超時發(fā)生后,所述HBA向所述存儲陣列下發(fā)abort task(取消任務(wù))任務(wù)管理命令取消該I/O請求,當(dāng)所述存儲陣列返回I/O請求取消成功后,所述HBA還要清除自身內(nèi)部該I/O請求的信息后再給所述多路徑軟件返回I/O請求的超時錯誤。
該方法雖然可以縮短在路徑由于誤碼、丟幀的原因?qū)е碌腎/O請求超時的場景下 I/O請求切換時間過長的問題,但是I/O請求超時也可能在存儲陣列內(nèi)部壓力大或異常時出現(xiàn),在這種情況下,上述方法不僅不能解決I/o請求超時的問題,反而會頻頻觸發(fā)I/O請求超時,使那些正在存儲陣列內(nèi)部處理的I/o請求被取消并重新處理,進(jìn)一步加重存儲陣列的處理負(fù)擔(dān),增加I/o超時的概率。發(fā)明內(nèi)容
本發(fā)明的實施例提供一種處理I/o超時的方法和裝置,能夠減少I/O超時的概率, 同時減輕處理I/o請求的負(fù)擔(dān)。
為達(dá)到上述目的,本發(fā)明的實施例采用如下技術(shù)方案
第一方面,提供了一種處理輸入/輸出I/o超時的方法,該方法包括
接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/O請求;
接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/O 請求,執(zhí)行所述通過第一路徑發(fā)送的I/o請求所請求的讀寫操作,并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;
接收所述服務(wù)器通過第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/O請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求為超時重試的I/O 請求;
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同, 則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑;
將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
在第一種可能的實現(xiàn)方式中,根據(jù)第一方面,該方法還包括
接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的 I/o請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息;
在接收所述服務(wù)器通過所述第二路徑發(fā)送的I/O請求后,還包括
若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作;
將所述通過第二路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
在第二種可能的實現(xiàn)方式中,根據(jù)第一方面或第一種可能的實現(xiàn)方式,若確定接收到所述通過第一路徑發(fā)送的I/o請求后,還包括
對所述通過第一路徑發(fā)送的I/O請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/O請求為被取消的I/O請求;
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同, 則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑;
若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
在第三種可能的實現(xiàn)方式中,根據(jù)第二種可能的實現(xiàn)方式,若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求相同,還包括
刪除與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的第二標(biāo)記。
在第四種可能的實現(xiàn)方式中,根據(jù)第一方面至第三種可能的實現(xiàn)方式,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同。
第二方面,一種處理輸入輸出I/O超時的裝置,所述裝置包括接收單元、處理單元、發(fā)送單元;
所述接收單元,用于接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求;
所述處理單元,用于在所述接收單元接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作;
所述發(fā)送單元,用于向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;
所述接收單元,還用于接收所述服務(wù)器通過第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O 請求為超時重試的I/o請求;
所述處理單元,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑;
所述發(fā)送單元,還用于將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
在第一種可能的實現(xiàn)方式中,根據(jù)第二方面,所述發(fā)送單元,還用于在所述接收單元接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的I/O請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息;
所述處理單元,還用于在所述接收單元接收所述服務(wù)器通過所述第二路徑發(fā)送的 I/o請求后,若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作;
所述發(fā)送單元,還用于將所述通過第二路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
在第二種可能的實現(xiàn)方式中,根據(jù)第二方面或第一種可能的實現(xiàn)方式,所述處理單元,還用于若確定接收到所述通過第一路徑發(fā)送的I/O請求后,還對所述通過第一路徑發(fā)送的I/o請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/O請求為被取消的I/o請求;
所述處理單元,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑;
所述處理單元,還用于若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
在第三種可能的實現(xiàn)方式中,根據(jù)第二種可能的實現(xiàn)方式,所述處理單元,還用于若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求相同,刪除與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的第二標(biāo)記。
在第四種可能的實現(xiàn)方式中,根據(jù)第二方面至第三種可能的實現(xiàn)方式,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同。
基于上述技術(shù)方案的描述,本發(fā)明實施例提供了一種處理I/O超時的方法和裝置。所述方法包括接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求;在接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作, 并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;接收所述服器通過第二路徑發(fā)送的I/o請求,所述通過第二路徑發(fā)送的 I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/o請求;若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑;最后將所述通過第一路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
該方法由于在接收到所述取消任務(wù)請求消息后,并沒有真正取消所述通過第一路徑發(fā)送的I/o請求,從而在接收服務(wù)器通過第二路徑發(fā)送的攜帶有第一標(biāo)記的I/O請求后, 通過信息匹配,匹配到所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O 請求相同,進(jìn)而繼承所述通過第一路徑發(fā)送的I/o請求的處理狀態(tài),減少了 I/O超時的概率,同時減輕了處理I/o請求的負(fù)擔(dān)。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖I為一種部署了多路徑軟件的環(huán)境;
圖2為本發(fā)明實施例提供的一種處理I/O超時的方法;
圖3為本發(fā)明實施例提供的另一種處理I/O超時的方法;
圖4為本發(fā)明實施例提供的一種處理I/O超時的裝置;
圖5為本發(fā)明實施例提供的另一種處理I/O超時的裝置。
具體實施方式
8
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
在部署了多路徑軟件的環(huán)境中,如圖I所示,上層應(yīng)用、多路徑軟件、主機(jī)總線適配器HBA均存在于服務(wù)器中。其中,所述多路徑軟件負(fù)責(zé)管理多條路徑,當(dāng)首選路徑發(fā)生故障時切換到備用路徑,以保證業(yè)務(wù)不中斷;所述主機(jī)總線適配器是一個在應(yīng)用服務(wù)器和存儲陣列間提供I/O處理和物理連接的電路板和/或集成電路適配器。
在對I/O請求操作時,在服務(wù)器的內(nèi)部,上層應(yīng)用首先下發(fā)相應(yīng)的I/O請求給多路徑軟件,然后通過所述多路徑軟件選擇所述I/O請求的第一路徑。在所述服務(wù)器確定所述第一路徑后,通過所述第一路徑發(fā)送所述I/O請求給存儲陣列,由所述存儲陣列執(zhí)行所述 I/O請求所請求的讀寫操作,最后將操作結(jié)果通過所述第一路徑返回給所述服務(wù)器。
在發(fā)生I/O請求超時的問題時,通過所述存儲陣列與所述服務(wù)器的交互,完成整個處理過程。其中,在此過程中,在所述服務(wù)器的內(nèi)部,需要所述主機(jī)總線適配器的驅(qū)動和多路徑軟件進(jìn)行交互,完成第一路徑到第二路徑的切換過程。
需要說明的是,本發(fā)明實施例中提到的所述第一路徑和所述第二路徑不具有任何特殊的含義,僅指代是不同的路徑。
實施例一、
本發(fā)明實施例提供了一種處理I/O超時的方法,具體如圖2所示,該方法包括
201、接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/O請求。
在所述服務(wù)器通過第一路徑發(fā)送I/O請求后,若存在誤碼、丟幀的問題使I/O請求無法到達(dá)存儲陣列,或I/o請求雖然到達(dá)所述存儲陣列,但存儲陣列內(nèi)部壓力大,都會觸發(fā) I/o超時的問題,這種情況下,所述服務(wù)器會向所述存儲陣列發(fā)送取消任務(wù)請求消息,請求取消通過第一路徑發(fā)送的I/O請求。
202、接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的 I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作,并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。
對于所述服務(wù)器來說,在下發(fā)所述I/O請求時,所述I/O請求的內(nèi)容具體包括三部分第一,請求到達(dá)存儲陣列;第二,請求由所述存儲陣列對所述I/o請求執(zhí)行讀寫操作;第三,請求在所述讀寫操作結(jié)束時返回操作結(jié)果。其中,第一部分和第三部分屬于所述存儲陣列與所述服務(wù)器之間的交互,第二部分是由所述存儲陣列單獨(dú)完成的。第二部分即所述存儲陣列執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作。
在接收到服務(wù)器發(fā)送的取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/O請求,說明該I/O請求超時是由于存儲陣列自身壓力大、處理慢造成的。此時所述存儲陣列并沒有真正的取消對所述I/O請求的讀寫操作,而是在向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息的同時,繼續(xù)執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的操作。
根據(jù)SCSI協(xié)議,I/O請求超時后啟動器(啟動器是SCSI的概念,其實體就是服務(wù)器中的HBA)需要向目標(biāo)器(其實體就是存儲陣列)發(fā)送取消任務(wù)請求消息,請求取消該I/ O請求,當(dāng)目標(biāo)器返回所述I/O請求取消成功后,為了避免對同一個I/O請求重復(fù)處理而導(dǎo)致數(shù)據(jù)破壞的問題,所述啟動器還要清除自身內(nèi)部該I/o請求的信息,即保證該I/O請求從啟動器到目標(biāo)器的整個流程都取消,然后再發(fā)送第一路徑I/o請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/o請求切換到第二路徑。
本實施例提供的處理I/O請求超時的方法,可以遵循SCSI協(xié)議的處理流程,在標(biāo)準(zhǔn)環(huán)境下使用(即不影響HBA和操作系統(tǒng)的行為,不以來定制的HBA或操作系統(tǒng)進(jìn)行修改)。所以此時,在所述服務(wù)器接收所述取消任務(wù)請求消息的響應(yīng)消息后,服務(wù)器內(nèi)部的 HBA還要清除自身內(nèi)部該I/O請求的信息,然后再發(fā)送第一路徑I/O請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/O請求切換到第二路徑。
關(guān)于所述服務(wù)器內(nèi)部的處理與交互過程,本發(fā)明實施例不作具體限定。
203、接收所述服務(wù)器通過所述第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/O請求。
其中,所述第一標(biāo)記是在所述I/O請求的⑶B(CommamdDescriptor Block,命令描述塊)中設(shè)置的,以標(biāo)識該I/o請求為超時重發(fā)的I/O請求。
204、若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑。
所述存儲陣列通過所述CDB識別出該I/O請求為超時重發(fā)的I/O請求,就會將該 I/O請求和所述正處理的I/O請求進(jìn)行匹配,其中,匹配可通過該I/O請求要訪問的磁盤對象、讀寫方向、訪問地址、長度進(jìn)行匹配,匹配成功后,將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑,即該I/O請求消息不再關(guān)聯(lián)之前的第一路徑,而是關(guān)聯(lián)現(xiàn)在的第二路徑。
需要說明的是,所述I/O請求的返回路徑是指當(dāng)所述存儲陣列執(zhí)行完所述I/O請求所請求的讀寫操作后,將操作結(jié)果返回給服務(wù)器時所經(jīng)過的路徑。
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同, 說明所述存儲陣列之前接收到所述I/o請求,則本次I/O請求超時是由于存儲陣列自身內(nèi)部壓力大、處理慢造成的。
205、將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
基于上述技術(shù)方案的描述,本發(fā)明實施例提供了一種處理I/O超時的方法。所述方法包括接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/O請求;在接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/O請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作,并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;接收所述服務(wù)器通過第二路徑發(fā)送的I/o請求,所述通過第二路徑發(fā)送的I/O請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求為超時重試的I/O請求;若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑;最后將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
該方法由于在接收到所述取消任務(wù)請求消息后,并沒有真正取消所述通過第一路徑發(fā)送的I/O請求,從而在接收服務(wù)器通過第二路徑發(fā)送的攜帶有第一標(biāo)記的I/O請求后, 通過信息匹配,匹配到所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O 請求相同,進(jìn)而繼承所述通過第一路徑發(fā)送的I/O請求的處理狀態(tài),減少了 I/O超時的概率,同時減輕了處理I/O請求的負(fù)擔(dān)。
實施例二、
本發(fā)明實施例提供了一種處理I/O超時的方法,具體如圖3所示,該方法包括
301、接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/O請求。
在所述服務(wù)器通過第一路徑發(fā)送I/O請求后,若存在誤碼、丟幀的問題使I/O請求無法到達(dá)存儲陣列,或I/o請求雖然到達(dá)所述存儲陣列,但存儲陣列內(nèi)部壓力大,都會觸發(fā) I/o超時的問題,這種情況下,所述服務(wù)器會向所述存儲陣列發(fā)送取消任務(wù)請求消息,請求取消通過第一路徑發(fā)送的I/O請求。
302、接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的 I/O請求,對所述通過第一路徑發(fā)送的I/O請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/O請求為被取消的I/O請求。
在接收到服務(wù)器發(fā)送的取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,說明該I/O請求超時是由于存儲陣列自身壓力大、處理慢造成的。
這里對所述通過第一路徑發(fā)送的I/O請求設(shè)置第二標(biāo)記是為了后續(xù)進(jìn)行匹配時, 有針對性的進(jìn)行匹配。
303、執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作,并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。
對于所述服務(wù)器來說,在下發(fā)所述I/O請求時,所述I/O請求的內(nèi)容具體包括三部分第一,請求到達(dá)存儲陣列;第二,請求由所述存儲陣列對所述I/o請求執(zhí)行讀寫操作;第三,請求在所述讀寫操作結(jié)束時返回操作結(jié)果。其中,第一部分和第三部分屬于所述存儲陣列與所述服務(wù)器之間的交互,第二部分是由所述存儲陣列單獨(dú)完成的,第二部分即所述存儲陣列執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作。
在接收到服務(wù)器發(fā)送的取消任務(wù)請求消息之后,所述存儲陣列并沒有真正的取消對所述I/o請求的讀寫操作,而是在向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息的同時,繼續(xù)執(zhí)行所述通過第一路徑發(fā)送的I/o請求所請求的操作。
根據(jù)SCSI協(xié)議,I/O請求超時后啟動器(啟動器是SCSI的概念,其實體就是服務(wù)器中的HBA)需要向目標(biāo)器(其實體就是存儲陣列)發(fā)送取消任務(wù)請求消息,請求取消該I/ O請求,當(dāng)目標(biāo)器返回所述I/O請求取消成功后,為了避免對同一個I/O請求重復(fù)處理而導(dǎo)致數(shù)據(jù)破壞的問題,所述啟動器還要清除自身內(nèi)部該I/o請求的信息,即保證該I/O請求從啟動器到目標(biāo)器的整個流程都取消,然后再發(fā)送第一路徑I/o請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/o請求切換到第二路徑。
本實施例提供的處理I/O請求超時的方法,可以遵循SCSI協(xié)議的處理流程,在標(biāo)準(zhǔn)環(huán)境下使用(即不影響HBA和操作系統(tǒng)的行為,不以來定制的HBA或操作系統(tǒng)進(jìn)行修改)。所以此時,在所述服務(wù)器接收所述取消任務(wù)請求消息的響應(yīng)消息后,服務(wù)器內(nèi)部的 HBA還要清除自身內(nèi)部該I/O請求的信息,然后再發(fā)送第一路徑I/O請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/O請求切換到第二路徑。
關(guān)于所述服務(wù)器內(nèi)部的處理與交互過程,本發(fā)明實施例不作具體限定。
304、接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的I/o請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息。
接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的 I/O請求,說明該I/O請求超時是由于誤碼、丟幀導(dǎo)致的,此時存儲陣列直接向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。。
305、接收所述服務(wù)器通過所述第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/O請求。
其中,所述第一標(biāo)記是在所述I/O請求的⑶B(CommamdDescriptor Block,命令描述塊)中設(shè)置的,以標(biāo)識該I/o請求為超時重發(fā)的I/O請求。
306、若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑。
所述存儲陣列通過所述CDB識別出該I/O請求為超時重發(fā)的I/O請求,就會將該 I/O請求和所述存儲陣列中設(shè)置取消標(biāo)記的I/O請求進(jìn)行匹配,其中,匹配可通過該I/O請求要訪問的磁盤對象、讀寫方向、訪問地址、長度進(jìn)行匹配,匹配成功后,將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑,即該I/O請求消息不再關(guān)聯(lián)之前的第一路徑,而是關(guān)聯(lián)現(xiàn)在的第二路徑。
這里將所述通過第二路徑發(fā)送的I/O請求和所述存儲陣列中設(shè)置第二標(biāo)記的I/ O請求進(jìn)行匹配,縮小了匹配的范圍,使所述通過第二路徑發(fā)送的I/O請求在匹配時更有針對性,節(jié)省了匹配的時間。
需要說明的是,所述I/O請求的返回路徑是指當(dāng)所述存儲陣列執(zhí)行完所述I/O請求所請求的讀寫操作后,將操作結(jié)果返回給服務(wù)器時所經(jīng)過的路徑。
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同, 說明所述存儲陣列之前接收到所述I/o請求,則本次I/O請求超時是由于存儲陣列自身內(nèi)部壓力大、處理慢造成的。
307、刪除與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的第二標(biāo)記。
刪除與所述通過第二路徑發(fā)送的I/O請求匹配成功的I/O請求的第二標(biāo)記,使之不再關(guān)聯(lián)其它的I/o請求,這樣可以防止誤操作。
當(dāng)然,也可以有其它的方式使之不再關(guān)聯(lián)其它的I/O請求,本發(fā)明實施例對此不作具體限定。
308、將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
309、若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
若將所述通過第二路徑發(fā)送的I/O請求和所述存儲陣列中設(shè)置第二標(biāo)記的I/O請求進(jìn)行匹配時,沒有匹配成功,說明所述存儲陣列并沒有接收到所述I/o請求,進(jìn)而說明本次的I/o請求超時是由于誤碼、丟幀引起的。
310、將所述通過第二路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
基于上述實施例的描述,當(dāng)出現(xiàn)所述存儲陣列由于內(nèi)部壓力大造成I/O請求超時的問題時,執(zhí)行步驟301、302、303、305、306、307、308 ;當(dāng)出現(xiàn)由于誤碼、丟幀的原因造成I/ O請求超時的問題時,執(zhí)行步驟301、304、305、309、310。
可選的,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/o 請求與所述通過第一路徑發(fā)送的I/o請求相同。
通過判斷所述操作結(jié)果是否攜帶第三標(biāo)記,可以準(zhǔn)確識別I/O請求超時的路徑故障,若所述操作結(jié)果攜帶第三標(biāo)記,說明本次I/o請求超時是由于所述存儲陣列內(nèi)部壓力大、處理慢造成的;
若所述操作結(jié)果沒有攜帶第三標(biāo)記,說明本次i/o請求超時是由于誤碼、丟幀的原因造成的。
在識別出路徑故障后,可以更加有效的管理路徑,例如如果是所述存儲陣列內(nèi)部壓力大、處理慢造成的I/o請求超時,就可以控制I/O請求發(fā)送的速度或采用更為有效的方式進(jìn)行管理,本發(fā)明實施例旨在說明一種處理I/o超時的方法,對如何管理路徑不作具體限定。
當(dāng)然,在出現(xiàn)誤碼、丟幀造成的I/o請求超時的問題時,現(xiàn)有技術(shù)也可以解決,采用本方案重點(diǎn)在于解決因存儲陣列內(nèi)部壓力大造成的I/o請求超時的問題,在解決存儲陣列因內(nèi)部壓力大造成的I/o請求超時的問題的同時,也可以解決誤碼、丟幀造成的I/O請求超時的問題,同時可以準(zhǔn)確識別是何種I/o請求的超時的故障,帶來了進(jìn)一步的有益效果。
基于上述技術(shù)方案的描述,本發(fā)明實施例提供了一種處理I/O超時的方法。所述方法包括接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/O請求;在接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/O請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作,并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;接收所述服務(wù)器通過第二路徑發(fā)送的I/o請求,所述通過第二路徑發(fā)送的I/O請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求為超時重試的I/O請求;若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑;最后將所述通過第一路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
該方法由于在接收到所述取消任務(wù)請求消息后,并沒有真正取消所述通過第一路徑發(fā)送的I/o請求,從而在接收服務(wù)器通過第二路徑發(fā)送的攜帶有第一標(biāo)記的I/O請求后, 通過信息匹配,匹配到所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O 請求相同,進(jìn)而繼承所述通過第一路徑發(fā)送的I/o請求的處理狀態(tài),減少了 I/O超時的概13率,同時減輕了處理I/O請求的負(fù)擔(dān)。
實施例三、
本發(fā)明實施例提供了一種處理I/O超時的裝置40,具體如圖4所示,所述裝置40 包括接收單元41、處理單元42、發(fā)送單元43。
所述接收單元41,用于接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求。
在所述服務(wù)器通過第一路徑發(fā)送I/O請求后,若存在誤碼、丟幀的問題使I/O請求無法到達(dá)所述裝置40,或I/O請求雖然到達(dá)所述裝置40,但所述裝置40內(nèi)部壓力大,都會觸發(fā)I/O超時的問題,這種情況下,所述服務(wù)器會向所述裝置40發(fā)送取消任務(wù)請求消息,請求取消通過第一路徑發(fā)送的I/O請求。
所述處理單元42,用于在所述接收單元41接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作。
對于所述服務(wù)器來說,在下發(fā)所述I/O請求時,所述I/O請求的內(nèi)容具體包括三部分第一,請求到達(dá)所述裝置40 ;第二,請求由所述裝置40對所述I/O請求執(zhí)行讀寫操作; 第三,請求在所述讀寫操作結(jié)束時返回操作結(jié)果。其中,第一部分和第三部分屬于所述裝置 40與所述服務(wù)器之間的交互,第二部分是由所述裝置40單獨(dú)完成的。第二部分即所述裝置 40執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作。
所述發(fā)送單元43,用于向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。
在所述接收單元41接收到服務(wù)器發(fā)送的取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,說明該I/O請求超時是由于所述裝置40自身壓力大、 處理慢造成的。此時所述裝置40并沒有真正的取消對所述I/O請求的讀寫操作,而是在向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息的同時,繼續(xù)執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的操作。
根據(jù)SCSI協(xié)議,I/O請求超時后啟動器(啟動器是SCSI的概念,其實體就是服務(wù)器中的HBA)需要向目標(biāo)器(其實體就是存儲陣列)發(fā)送取消任務(wù)請求消息,請求取消該I/ O請求,當(dāng)目標(biāo)器返回所述I/O請求取消成功后,為了避免對同一個I/O請求重復(fù)處理而導(dǎo)致數(shù)據(jù)破壞的問題,所述啟動器還要清除自身內(nèi)部該I/o請求的信息,即保證該I/O請求從啟動器到目標(biāo)器的整個流程都取消,然后再發(fā)送第一路徑I/o請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/o請求切換到第二路徑。
本實施例提供的處理I/O請求超時的方法,可以遵循SCSI協(xié)議的處理流程,在標(biāo)準(zhǔn)環(huán)境下使用(即不影響HBA和操作系統(tǒng)的行為,不以來定制的HBA或操作系統(tǒng)進(jìn)行修改)。所以此時,在所述服務(wù)器接收所述取消任務(wù)請求消息的響應(yīng)消息后,服務(wù)器內(nèi)部的 HBA還要清除自身內(nèi)部該I/O請求的信息,然后再發(fā)送第一路徑I/O請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/O請求切換到第二路徑。
關(guān)于所述服務(wù)器內(nèi)部的處理與交互過程,本發(fā)明實施例不作具體限定。
所述接收單元41,還用于接收所述服務(wù)器通過第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/O請求。
其中,所述第一標(biāo)記是在所述I/O請求的⑶B(CommamdDescriptor Block,命令描述塊)中設(shè)置的,以標(biāo)識該I/o請求為超時重發(fā)的I/O請求。
所述處理單元42,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑。
所述處理單元42通過所述⑶B識別出該I/O請求為超時重發(fā)的I/O請求,就會將該I/o請求和所述正處理的I/O請求進(jìn)行匹配,其中,匹配可通過該I/O請求要訪問的磁盤對象、讀寫方向、訪問地址、長度進(jìn)行匹配,匹配成功后,將與所述通過第二路徑發(fā)送的I/o 請求相同的I/o請求的返回路徑更新為所述第二路徑,即該I/O請求消息不再關(guān)聯(lián)之前的第一路徑,而是關(guān)聯(lián)現(xiàn)在的第二路徑。
需要說明的是,所述I/O請求的返回路徑是指當(dāng)所述處理單元42執(zhí)行完所述I/O 請求所請求的讀寫操作后,將操作結(jié)果返回給服務(wù)器時所經(jīng)過的路徑。
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同, 說明所述接收單元41之前接收到所述I/O請求,則本次I/O請求超時是由于所述裝置40 自身內(nèi)部壓力大、處理慢造成的。
所述發(fā)送單元43,還用于將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
可選的,所述發(fā)送單元43,還用于在所述接收單元41接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的I/o請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息。
接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的 I/O請求,說明該I/O請求超時是由于誤碼、丟幀導(dǎo)致的,此時所述裝置40直接向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。
所述處理單元42,還用于在所述接收單元41接收所述服務(wù)器通過所述第二路徑發(fā)送的I/o請求后,若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的 I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
若將所述通過第二路徑發(fā)送的I/O請求和所述裝置40中的I/O請求進(jìn)行匹配時, 沒有匹配成功,說明所述裝置40并沒有接收到所述I/O請求,進(jìn)而說明本次的I/O請求超時是由于誤碼、丟幀引起的。
所述發(fā)送單元43,還用于將所述通過第二路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
可選的,所述處理單元42,還用于若確定接收到所述通過第一路徑發(fā)送的I/O請求,還對所述通過第一路徑發(fā)送的I/O請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/O請求為被取消的I/O請求。
所述處理單元42,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路更新為所述第二路徑。
所述處理單元42,還用于若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
這里將所述通過第一路徑發(fā)送的I/O請求設(shè)置第二標(biāo)記,然后在所述通過第二路徑發(fā)送的I/o請求進(jìn)行匹配時,將所述通過第二路徑發(fā)送的I/O請求和所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求進(jìn)行匹配,縮小了匹配的范圍,使所述通過第二路徑發(fā)送的I/o請求在匹配時更有針對性,節(jié)省了匹配的時間。
可選的,所述處理單元42,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求相同,刪除與所述通過第二路徑發(fā)送的I/O請求相同的I/0請求的第二標(biāo)記。
刪除與所述通過第二路徑發(fā)送的I/O請求匹配成功的I/O請求的第二標(biāo)記,使之不再關(guān)聯(lián)其它的I/o請求,這樣可以防止誤操作。
當(dāng)然,也可以有其它的方式使之不再關(guān)聯(lián)其它的I/O請求,本發(fā)明實施例對此不作具體限定。
可選的,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/o 請求與所述通過第一路徑發(fā)送的I/o請求相同。
通過判斷所述操作結(jié)果是否攜帶第三標(biāo)記,可以準(zhǔn)確識別I/O請求超時的路徑故障,若所述操作結(jié)果攜帶第三標(biāo)記,說明本次I/o請求超時是由于所述裝置40內(nèi)部壓力大、 處理慢造成的;
若所述操作結(jié)果沒有攜帶第三標(biāo)記,說明本次I/O請求超時是由于誤碼、丟幀的原因造成的。
在識別出路徑故障后,可以更加有效的管理路徑,例如如果是所述裝置40內(nèi)部壓力大、處理慢造成的I/O請求超時,就可以控制I/O請求發(fā)送的速度或采用更為有效的方式進(jìn)行管理,本發(fā)明實施例旨在說明一種處理I/o超時的方法,對如何管理路徑不作具體限定。
當(dāng)然,在出現(xiàn)誤碼、丟幀造成的I/O請求超時的問題時,現(xiàn)有技術(shù)也可以解決,采用本方案重點(diǎn)在于解決因所述裝置40內(nèi)部壓力大造成的I/O請求超時的問題,在解決所述裝置40因內(nèi)部壓力大造成的I/O請求超時的問題的同時,也可以解決誤碼、丟幀造成的I/ O請求超時的問題,同時可以準(zhǔn)確識別是何種I/O請求的超時的故障故障,帶來了進(jìn)一步的有益效果。
需要說明的是,所述裝置40具體為存儲陣列。
本發(fā)明實施例提供了一種處理I/O超時的裝置,所述裝置包括接收單元、處理單元、發(fā)送單元。所述接收單元接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息16請求取消通過第一路徑發(fā)送的I/O請求;所述處理單元在所述接收單元接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/O請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作,并且所述發(fā)送單元向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;所述接收單元還接收所述服務(wù)器通過第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/O請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/O請求;若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述處理單元還將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑;最后所述發(fā)送單元將所述通過第一路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
該裝置由于在接收到所述取消任務(wù)請求消息后,并沒有真正取消所述通過第一路徑發(fā)送的I/o請求,從而在接收服務(wù)器通過第二路徑發(fā)送的攜帶有第一標(biāo)記的I/O請求后, 通過信息匹配,匹配到所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O 請求相同,進(jìn)而繼承所述通過第一路徑發(fā)送的I/o請求的處理狀態(tài),減少了 I/O超時的概率,同時減輕了處理I/o請求的負(fù)擔(dān)。
實施例四、
本發(fā)明實施例還提供了一種處理I/O超時的裝置50,具體如圖5所示,所述裝置 50包括輸入接口 51、處理器52、輸出接口 53。
所述輸入接口 51,用于接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求。
在所述服務(wù)器通過第一路徑發(fā)送I/O請求后,若存在誤碼、丟幀的問題使I/O請求無法到達(dá)所述裝置50,或I/O請求雖然到達(dá)所述裝置50,但所述裝置50內(nèi)部壓力大,都會觸發(fā)I/O超時的問題,這種情況下,所述服務(wù)器會向所述裝置50發(fā)送取消任務(wù)請求消息,請求取消通過第一路徑發(fā)送的I/O請求。
所述處理器52,用于在所述輸入接口 51接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作。
對于所述服務(wù)器來說,在下發(fā)所述I/O請求時,所述I/O請求的內(nèi)容具體包括三部分第一,請求到達(dá)所述裝置50 ;第二,請求由所述裝置50對所述I/O請求執(zhí)行讀寫操作; 第三,請求在所述讀寫操作結(jié)束時返回操作結(jié)果。其中,第一部分和第三部分屬于所述裝置 50與所述服務(wù)器之間的交互,第二部分是由所述裝置50單獨(dú)完成的。第二部分即所述裝置 50執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作在所述輸入接口 51接收到所述HBA發(fā)送的取消任務(wù)請求消息后,所述處理器52并沒有真正的取消I/O請求,而是繼續(xù)處理所述通過第一路徑發(fā)送的I/O請求。
所述輸出接口 53,用于向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。
在所述輸入接口 51接收到服務(wù)器發(fā)送的取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,說明該I/O請求超時是由于所述裝置50自身壓力大、 處理慢造成的。此時所述裝置50并沒有真正的取消對所述I/O請求的讀寫操作,而是在向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息的同時,繼續(xù)執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的操作。
根據(jù)SCSI協(xié)議,I/O請求超時后啟動器(啟動器是SCSI的概念,其實體就是服務(wù)器中的HBA)需要向目標(biāo)器(其實體就是存儲陣列)發(fā)送取消任務(wù)請求消息,請求取消該I/ O請求,當(dāng)目標(biāo)器返回所述I/O請求取消成功后,為了避免對同一個I/O請求重復(fù)處理而導(dǎo)致數(shù)據(jù)破壞的問題,所述啟動器還要清除自身內(nèi)部該I/o請求的信息,即保證該I/O請求從啟動器到目標(biāo)器的整個流程都取消,然后再發(fā)送第一路徑I/o請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/o請求切換到第二路徑。
本實施例提供的處理I/O請求超時的方法,可以遵循SCSI協(xié)議的處理流程,在標(biāo)準(zhǔn)環(huán)境下使用(即不影響HBA和操作系統(tǒng)的行為,不以來定制的HBA或操作系統(tǒng)進(jìn)行修改)。所以此時,在所述服務(wù)器接收所述取消任務(wù)請求消息的響應(yīng)消息后,服務(wù)器內(nèi)部的 HBA還要清除自身內(nèi)部該I/O請求的信息,然后再發(fā)送第一路徑I/O請求超時錯誤給所述多路徑軟件,使所述多路徑軟件將所述I/O請求切換到第二路徑。
關(guān)于所述服務(wù)器內(nèi)部的處理與交互過程,本發(fā)明實施例不作具體限定。
所述輸入接口 51,還用于接收通過所述第二路徑發(fā)送的I/O請求,所述通過第二路徑發(fā)送的I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/O請求。
其中,所述第一標(biāo)記是在所述I/O請求的⑶B(CommamdDescriptor Block,命令描述塊)中設(shè)置的,以標(biāo)識該I/o請求為超時重發(fā)的I/O請求。
所述處理器52,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑。
所述處理器52通過所述⑶B識別出該I/O請求為超時重發(fā)的I/O請求,就會將該 I/O請求和所述正處理的I/O請求進(jìn)行匹配,其中,匹配可通過該I/O請求要訪問的磁盤對象、讀寫方向、訪問地址、長度進(jìn)行匹配,匹配成功后,將與所述通過第二路徑發(fā)送的I/o請求相同的I/o請求的返回路徑更新為所述第二路徑,即該I/O請求消息不再關(guān)聯(lián)之前的第一路徑,而是關(guān)聯(lián)現(xiàn)在的第二路徑。
需要說明的是,所述I/O請求的返回路徑是指當(dāng)所述處理器52執(zhí)行完所述I/O請求所請求的讀寫操作后,將操作結(jié)果返回給服務(wù)器時所經(jīng)過的路徑。
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同, 說明所述輸入接口 51之前接收到所述I/O請求,則本次I/O請求超時是由于所述裝置50 自身內(nèi)部壓力大、處理慢造成的。
所述輸出接口 53,還用于將所述通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
可選的,所述輸出接口 53,還用于在所述輸入接口 51接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的I/O請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息。
接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的 I/O請求,說明該I/O請求超時是由于誤碼、丟幀導(dǎo)致的,此時所述裝置50直接向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功。
所述處理器52,還用于在所述輸入接口 51接收所述服務(wù)器通過所述第二路徑發(fā)送的I/O請求后,若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/ O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
若將所述通過第二路徑發(fā)送的I/O請求和所述裝置50中的I/O請求進(jìn)行匹配時, 沒有匹配成功,說明所述裝置50并沒有接收到所述I/O請求,進(jìn)而說明本次的I/O請求超時是由于誤碼、丟幀引起的。
所述輸出接口 53,還用于將所述通過第二路徑發(fā)送的I/O請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
可選的,所述處理器52,還用于若確定接收到所述通過第一路徑發(fā)送的I/O請求, 還對所述通過第一路徑發(fā)送的I/o請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/o請求為被取消的I/O請求。
所述處理器52,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑。
所述處理器52,還用于若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作具體包括
若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作。
這里將所述通過第一路徑發(fā)送的I/O請求設(shè)置第二標(biāo)記,然后在所述通過第二路徑發(fā)送的I/o請求進(jìn)行匹配時,將所述通過第二路徑發(fā)送的I/O請求和所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求進(jìn)行匹配,縮小了匹配的范圍,使所述通過第二路徑發(fā)送的I/o請求在匹配時更有針對性,節(jié)省了匹配的時間。
可選的,所述處理器52,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求相同,刪除與所述通過第二路徑發(fā)送的I/O請求相同的I/o請求的第二標(biāo)記。
刪除與所述通過第二路徑發(fā)送的I/O請求匹配成功的I/O請求的第二標(biāo)記,使之不再關(guān)聯(lián)其它的I/o請求,這樣可以防止誤操作。
當(dāng)然,也可以有其它的方式使之不再關(guān)聯(lián)其它的I/O請求,本發(fā)明實施例對此不作具體限定。
可選的,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/o 請求與所述通過第一路徑發(fā)送的I/o請求相同。
通過判斷所述操作結(jié)果是否攜帶第三標(biāo)記,可以準(zhǔn)確識別I/O請求超時的路徑故障,若所述操作結(jié)果攜帶第三標(biāo)記,說明本次I/O請求超時是由于所述裝置50內(nèi)部壓力大、 處理慢造成的;
若所述操作結(jié)果沒有攜帶第三標(biāo)記,說明本次I/O請求超時是由于誤碼、丟幀的原因造成的。
在識別出路徑故障后,可以更加有效的管理路徑,例如如果是所述裝置50內(nèi)部壓力大、處理慢造成的I/O請求超時,就可以控制I/O請求發(fā)送的速度或采用更為有效的方式進(jìn)行管理,本發(fā)明實施例旨在說明一種處理I/o超時的方法,對如何管理路徑不作具體限定。
當(dāng)然,在出現(xiàn)誤碼、丟幀造成的I/O請求超時的問題時,現(xiàn)有技術(shù)也可以解決,采用本方案重點(diǎn)在于解決因所述裝置50內(nèi)部壓力大造成的I/O請求超時的問題,在解決所述裝置50因內(nèi)部壓力大造成的I/O請求超時的問題的同時,也可以解決誤碼、丟幀造成的I/ O請求超時的問題,同時可以準(zhǔn)確識別是何種I/O請求的超時的故障故障,帶來了進(jìn)一步的有益效果。
需要說明的是,所述裝置50具體為存儲陣列。
本發(fā)明實施例提供了一種處理I/O超時的裝置,所述裝置包括輸入接口、處理器、輸出接口。所述輸入接口接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求;所述處理器在所述輸入接口接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/o請求所請求的讀寫操作,并且所述輸出接口向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功;所述輸入接口還接收所述服務(wù)器通過第二路徑發(fā)送的I/o請求,所述通過第二路徑發(fā)送的I/O請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求為超時重試的I/O請求;若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述處理器還將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑;最后所述輸出接口將所述通過第一路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
該裝置由于在接收到所述取消任務(wù)請求消息后,并沒有真正取消所述通過第一路徑發(fā)送的I/o請求,從而在接收服務(wù)器通過第二路徑發(fā)送的攜帶有第一標(biāo)記的I/O請求后, 通過信息匹配,匹配到所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O 請求相同,進(jìn)而繼承所述通過第一路徑發(fā)送的I/o請求的處理狀態(tài),減少了 I/O超時的概率,同時減輕了處理I/o請求的負(fù)擔(dān)。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種處理輸入/輸出I/o超時的方法,其特征在于,該方法包括 接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求; 接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/o請求所請求的讀寫操作,并向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功; 接收所述服務(wù)器通過第二路徑發(fā)送的I/o請求,所述通過第二路徑發(fā)送的I/O請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求為超時重試的I/O請求; 若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑;將所述通過第一路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括 接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的I/o請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息; 在接收所述服務(wù)器通過所述第二路徑發(fā)送的I/o請求后,還包括 若所述通過所述第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作; 將所述通過第二路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,若確定接收到所述通過第一路徑發(fā)送的I/o請求后,該方法還包括 對所述通過第一路徑發(fā)送的I/o請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/o請求為被取消的I/O請求; 若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑具體包括 若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑; 若所述通過所述第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作具體包括 若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,還包括 刪除與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的第二標(biāo)記。
5.根據(jù)權(quán)利要求1-4任一項所述的方法,其特征在于,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同。
6.一種處理輸入輸出I/O超時的裝置,其特征在于,所述裝置包括接收單元、處理單元、發(fā)送單元; 所述接收單元,用于接收服務(wù)器發(fā)送的取消任務(wù)請求消息,所述取消任務(wù)請求消息請求取消通過第一路徑發(fā)送的I/o請求; 所述處理單元,用于在所述接收單元接收到所述取消任務(wù)請求消息之后,若確定接收到所述通過第一路徑發(fā)送的I/o請求,執(zhí)行所述通過第一路徑發(fā)送的I/O請求所請求的讀寫操作; 所述發(fā)送單元,用于向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息,所述響應(yīng)消息用于指示所述第一路徑取消成功; 所述接收單元,還用于接收所述服務(wù)器通過第二路徑發(fā)送的I/o請求,所述通過第二路徑發(fā)送的I/o請求攜帶第一標(biāo)記,所述第一標(biāo)記指示所述通過第二路徑發(fā)送的I/O請求為超時重試的I/o請求; 所述處理單元,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑; 所述發(fā)送單元,還用于將所述通過第一路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于, 所述發(fā)送單元,還用于在所述接收單元接收到所述取消任務(wù)請求消息之后,若確定沒有接收到所述通過第一路徑發(fā)送的I/o請求,則向所述服務(wù)器發(fā)送所述取消任務(wù)請求消息的響應(yīng)消息; 所述處理單元,還用于在所述接收單元接收所述服務(wù)器通過所述第二路徑發(fā)送的I/O請求后,若所述通過所述第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作; 所述發(fā)送單元,還用于將所述通過第二路徑發(fā)送的I/o請求的操作結(jié)果,通過所述第二路徑發(fā)送給所述服務(wù)器。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于, 所述處理單元,還用于若確定接收到所述通過第一路徑發(fā)送的I/O請求后,還對所述通過第一路徑發(fā)送的I/o請求設(shè)置第二標(biāo)記,所述第二標(biāo)記指示所述通過第一路徑發(fā)送的I/o請求為被取消的I/O請求; 所述處理單元,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求相同,則將與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為所述第二路徑具體包括 若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求相同,則將與所述通過第二路徑發(fā)送的I/o請求相同的I/O請求的返回路徑更新為所述第二路徑; 所述處理單元,還用于若所述通過所述第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/o請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/O請求所請求的讀寫操作具體包括 若所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/O請求不相同,執(zhí)行所述通過第二路徑發(fā)送的I/o請求所請求的讀寫操作。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于, 所述處理單元,還用于若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的設(shè)置第二標(biāo)記的I/o請求相同,刪除與所述通過第二路徑發(fā)送的I/O請求相同的I/O請求的第二標(biāo)記。
10.根據(jù)權(quán)利要求6-9任一項所述的裝置,其特征在于,若所述通過第二路徑發(fā)送的I/O請求與所述通過第一路徑發(fā)送的I/O請求相同,則所述操作結(jié)果還攜帶第三標(biāo)記,所述第三標(biāo)記指示所述通過第二路徑發(fā)送的I/o請求與所述通過第一路徑發(fā)送的I/O請求相同。
全文摘要
本發(fā)明實施例提供了一種處理I/O超時的方法和裝置,能夠減少I/O超時的概率,同時減輕處理I/O請求的負(fù)擔(dān)。所述方法包括接收服務(wù)器發(fā)送的取消任務(wù)請求消息;在接收到取消任務(wù)請求消息后,若確定接收到通過第一路徑發(fā)送的I/O請求,執(zhí)行通過第一路徑發(fā)送的I/O請求所請求的讀寫操作,并向服務(wù)器發(fā)送取消任務(wù)請求消息的響應(yīng)消息;接收服務(wù)器通過第二路徑發(fā)送的I/O請求;若通過第二路徑發(fā)送的I/O請求與通過第一路徑發(fā)送的I/O請求相同,將與通過第二路徑發(fā)送的I/O請求相同的I/O請求的返回路徑更新為第二路徑;最后將通過第一路徑發(fā)送的I/O請求的操作結(jié)果,通過第二路徑發(fā)送給服務(wù)器。本發(fā)明應(yīng)用于計算機(jī)領(lǐng)域。
文檔編號H04L12/24GK102984002SQ20121049069
公開日2013年3月20日 申請日期2012年11月27日 優(yōu)先權(quán)日2012年11月27日
發(fā)明者張力 申請人:華為技術(shù)有限公司