本發(fā)明涉及計(jì)算機(jī),特別是涉及一種輸入輸出超時(shí)處理方法、裝置及介質(zhì)。
背景技術(shù):
1、在服務(wù)器的運(yùn)行過(guò)程中,可能因?yàn)楸姸嘁蛩貙?dǎo)致存在部分輸入/輸出(input/output,io)處理超時(shí)的問(wèn)題。若出現(xiàn)io處理超時(shí),則反映到服務(wù)端,即可能會(huì)出現(xiàn)異常告警、導(dǎo)致系統(tǒng)重啟等異常問(wèn)題。
2、目前,對(duì)于超時(shí)io的處理方案主要是通過(guò)在識(shí)別到超時(shí)io時(shí),向下層發(fā)送特殊的io指令;響應(yīng)于獨(dú)立硬盤冗余陣列(redundant?array?of?independent?disks,raid,簡(jiǎn)稱為磁盤陣列)模塊檢測(cè)到特殊io,觸發(fā)raid模塊下線;并將各模塊自身的、待由raid模塊處理的io,以離線的方式進(jìn)行處理后,將離線處理結(jié)果返回至主機(jī);從而避免了用戶主機(jī)在下發(fā)io后出現(xiàn)超長(zhǎng)時(shí)間等待返回結(jié)果的情況。
3、但是,這種方案只能針對(duì)于主機(jī)下發(fā)的io完整響應(yīng)到下層raid的場(chǎng)景,沒(méi)有辦法對(duì)由資源不足引發(fā)io超時(shí)等特殊場(chǎng)景下的異常io進(jìn)行處理。在由于資源不足而引發(fā)io超時(shí)的場(chǎng)景中,頁(yè)資源(pages)會(huì)被無(wú)法被下刷到下層的臟數(shù)據(jù)占用。所以在主機(jī)io運(yùn)行到一定規(guī)模后,下層就會(huì)被“寫滿”,部分卷離線,無(wú)法下刷數(shù)據(jù)。進(jìn)而上述方案中針對(duì)下層raid的離線響應(yīng)技術(shù)即不再使用,對(duì)于上述的特殊io超時(shí)情形無(wú)法有效解決,仍然會(huì)造成io超長(zhǎng)等待返回結(jié)果后系統(tǒng)熱重啟的異常狀態(tài)。
4、所以,現(xiàn)在本領(lǐng)域的技術(shù)人員亟需要一種輸入輸出超時(shí)處理方法,用于解決傳統(tǒng)方案無(wú)法實(shí)現(xiàn)由資源不足而引發(fā)的特殊io超時(shí)問(wèn)題。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的是提供一種輸入輸出超時(shí)處理方法、裝置及介質(zhì),以解決傳統(tǒng)方案無(wú)法實(shí)現(xiàn)由資源不足而引發(fā)的特殊io超時(shí)問(wèn)題。
2、為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種輸入輸出超時(shí)處理方法,包括:
3、監(jiān)測(cè)存儲(chǔ)池中是否有卷離線;
4、若是,則通過(guò)全鎖定檢查函數(shù)判斷所述存儲(chǔ)池是否滿足全鎖定條件;
5、若滿足,則將資源異常狀態(tài)位設(shè)置為有效狀態(tài);其中,所述資源異常狀態(tài)位為預(yù)先設(shè)置的狀態(tài)標(biāo)志位,與所述存儲(chǔ)池對(duì)應(yīng);
6、將所述資源異常狀態(tài)位的值上傳至對(duì)應(yīng)的所述存儲(chǔ)池中;
7、當(dāng)所述資源異常狀態(tài)位為有效狀態(tài)時(shí),通過(guò)所述存儲(chǔ)池中各卷數(shù)據(jù)端中的狀態(tài)機(jī)將各卷的上層路徑輸出設(shè)置為離線狀態(tài),以使卷離線。
8、在一種可能的實(shí)施例中,當(dāng)所述資源異常狀態(tài)位為有效狀態(tài)時(shí),還包括:
9、通過(guò)所述存儲(chǔ)池中各卷的控制端,向卷的業(yè)務(wù)端下發(fā)輸入/輸出清理指令,以觸發(fā)所述業(yè)務(wù)端中預(yù)先設(shè)置的卷內(nèi)離線流程;
10、其中,所述卷內(nèi)離線流程包括:
11、對(duì)卷內(nèi)各個(gè)輸入/輸出隊(duì)列上的輸入/輸出進(jìn)行結(jié)束流程處理,以結(jié)束所述輸入/輸出并使所述輸入/輸出向主機(jī)端返回離線錯(cuò)誤信息;
12、所述輸入/輸出隊(duì)列包括:活躍輸入/輸出隊(duì)列、非活躍輸入/輸出隊(duì)列和等待隊(duì)列。
13、在一種可能的實(shí)施例中,還包括:
14、依次統(tǒng)計(jì)卷內(nèi)前n個(gè)流量控制輸入/輸出的輸入/輸出規(guī)模之和,以得到流量總和;其中,n值為正整數(shù),且n值隨統(tǒng)計(jì)次數(shù)的遞增而加1;
15、判斷所述流量總和的值是否超過(guò)預(yù)設(shè)的流量閾值;
16、若否,則對(duì)本次統(tǒng)計(jì)的各所述流量控制輸入/輸出設(shè)置流量控制標(biāo)識(shí);其中,所述流量控制標(biāo)識(shí)為一個(gè)特殊符號(hào)值,用于指示當(dāng)前所述流量控制輸入/輸出為正常的所述輸入/輸出;
17、若是,則確定本次統(tǒng)計(jì)中新納入統(tǒng)計(jì)范圍的所述流量控制輸入/輸出,為首個(gè)異常輸入/輸出;并確定首個(gè)所述異常輸入/輸出之后的所述流量控制輸入/輸出為所述異常輸入/輸出;
18、將各所述異常輸入/輸出添加至對(duì)應(yīng)線程預(yù)先創(chuàng)建的流量控制輸入/輸出鏈表中;
19、所述卷內(nèi)離線流程還包括:
20、遍歷各所述線程對(duì)應(yīng)的所述流量控制輸入/輸出鏈表;
21、當(dāng)遍歷到的所述異常輸入/輸出屬于離線卷時(shí),則對(duì)該所述異常輸入/輸出進(jìn)行所述結(jié)束流程處理,以結(jié)束所述異常輸入/輸出并使所述異常輸入/輸出向主機(jī)端返回離線錯(cuò)誤信息。
22、在一種可能的實(shí)施例中,在所述遍歷各所述線程對(duì)應(yīng)的所述流量控制輸入/輸出鏈表之后,還包括:
23、當(dāng)遍歷到的所述異常輸入/輸出不屬于離線卷時(shí),則將當(dāng)前遍歷到的所述異常輸入/輸出從所述流量控制輸入/輸出鏈表的頭部摘下,并放在所述流量控制輸入/輸出鏈表的尾部。
24、在一種可能的實(shí)施例中,還包括:
25、在所述資源異常狀態(tài)位為有效狀態(tài)的所述存儲(chǔ)池被添加盤以完成擴(kuò)容池之后,判斷是否存在離線的卷重新上線;
26、若存在,則重新返回至所述通過(guò)全鎖定檢查函數(shù)判斷所述存儲(chǔ)池是否滿足全鎖定條件的步驟;
27、在所述通過(guò)全鎖定檢查函數(shù)判斷所述存儲(chǔ)池是否滿足全鎖定條件之后,還包括:
28、當(dāng)所述存儲(chǔ)池不滿足所述全鎖定條件時(shí),將所述存儲(chǔ)池中其他離線的卷的所述上層路徑輸出設(shè)置為在線狀態(tài)。
29、在一種可能的實(shí)施例中,所述通過(guò)全鎖定檢查函數(shù)判斷所述存儲(chǔ)池是否滿足全鎖定條件包括:
30、通過(guò)運(yùn)行路徑切換函數(shù)調(diào)用所述全鎖定檢查函數(shù),以判斷各所述存儲(chǔ)池是否滿足所述全鎖定條件;
31、其中,所述運(yùn)行路徑切換函數(shù)在所述存儲(chǔ)池中有卷的路徑發(fā)生變化時(shí)觸發(fā)運(yùn)行。
32、在一種可能的實(shí)施例中,判斷所述存儲(chǔ)池是否滿足全鎖定條件包括:
33、獲取所述存儲(chǔ)池內(nèi)分配的最大頁(yè)資源數(shù)、所述存儲(chǔ)池內(nèi)應(yīng)達(dá)到并維持的目標(biāo)頁(yè)資源數(shù);
34、比較所述最大頁(yè)資源數(shù)和所述目標(biāo)頁(yè)資源數(shù)的大小關(guān)系,確定其中的較小值作為當(dāng)前所述存儲(chǔ)池的頁(yè)資源代表數(shù);
35、根據(jù)所述頁(yè)資源代表數(shù)確定資源閾值;
36、判斷當(dāng)前所述存儲(chǔ)池已被占用的頁(yè)資源數(shù)是否大于所述資源閾值;
37、若是,則判斷所述存儲(chǔ)池滿足所述全鎖定條件;
38、若否,則判斷所述存儲(chǔ)池不滿足所述全鎖定條件。
39、為解決上述技術(shù)問(wèn)題,本發(fā)明還提供一種輸入輸出超時(shí)處理裝置,包括:
40、卷離線監(jiān)測(cè)模塊,用于監(jiān)測(cè)存儲(chǔ)池中是否有卷離線,若是,則觸發(fā)資源檢測(cè)模塊;
41、所述資源檢測(cè)模塊,用于通過(guò)全鎖定檢查函數(shù)判斷所述存儲(chǔ)池是否滿足全鎖定條件,若滿足,則觸發(fā)狀態(tài)置位模塊;
42、所述狀態(tài)置位模塊,用于將資源異常狀態(tài)位設(shè)置為有效狀態(tài);其中,所述資源異常狀態(tài)位為預(yù)先設(shè)置的狀態(tài)標(biāo)志位,與所述存儲(chǔ)池對(duì)應(yīng);
43、狀態(tài)上傳模塊,用于將所述資源異常狀態(tài)位的值上傳至對(duì)應(yīng)的所述存儲(chǔ)池中;
44、卷離線模塊,用于當(dāng)所述資源異常狀態(tài)位為有效狀態(tài)時(shí),通過(guò)所述存儲(chǔ)池中各卷數(shù)據(jù)端中的狀態(tài)機(jī)將各卷的上層路徑輸出設(shè)置為離線狀態(tài),以使卷離線。
45、為解決上述技術(shù)問(wèn)題,本發(fā)明還提供一種輸入輸出超時(shí)處理裝置,包括:
46、存儲(chǔ)器,用于存儲(chǔ)計(jì)算機(jī)程序;
47、處理器,用于執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)如上所述的輸入輸出超時(shí)處理方法的步驟。
48、為解決上述技術(shù)問(wèn)題,本發(fā)明還提供一種非易失性存儲(chǔ)介質(zhì),所述非易失性存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的輸入輸出超時(shí)處理方法的步驟。
49、本發(fā)明提供的一種輸入輸出超時(shí)處理方法,通過(guò)檢測(cè)存儲(chǔ)池內(nèi)的資源是否充足以控制池內(nèi)卷的路徑狀態(tài),避免出現(xiàn)io超時(shí)。具體的,由于在因?yàn)橘Y源不足而導(dǎo)致io超時(shí)這一場(chǎng)景下,是因?yàn)楫?dāng)前存儲(chǔ)池中的精簡(jiǎn)(se)池被寫滿;緩存的臟數(shù)據(jù)無(wú)法再下發(fā)到下層,使得當(dāng)前存儲(chǔ)池中的資源使用達(dá)到上限;進(jìn)而導(dǎo)致處理io時(shí)因?yàn)橘Y源不足而等待資源超時(shí);而當(dāng)se池被寫滿后,會(huì)有部分卷離線。故基于上述原理,本方法通過(guò)監(jiān)測(cè)存儲(chǔ)池中是否有卷離線實(shí)現(xiàn)存儲(chǔ)池資源是否充足的第一步判斷,以提高檢測(cè)池資源不足的效率和準(zhǔn)確性;若有卷離線,則通過(guò)全鎖定檢查(is?all?pinned)函數(shù)判斷當(dāng)前存儲(chǔ)池是否滿足全鎖定條件;全鎖定檢查函數(shù)原本用于判斷空閑列表(free-list)和替換器(replacer)是否都為空,若空閑列表和替換器均為空,則表示當(dāng)前存儲(chǔ)池中沒(méi)有空閑的頁(yè)資源,也即滿足全鎖定條件;當(dāng)滿足全鎖定條件時(shí),可確定當(dāng)前存儲(chǔ)池中會(huì)因?yàn)橘Y源不足導(dǎo)致io超時(shí)。
50、故本方法通過(guò)設(shè)置存儲(chǔ)池的資源異常狀態(tài)位并上傳,以指示存儲(chǔ)池中各卷數(shù)據(jù)端中的狀態(tài)機(jī)將存儲(chǔ)池中所有卷的上層路徑輸出設(shè)置為離線狀態(tài),以使這些卷對(duì)外離線,使這些卷不再接收io,也就不會(huì)因?yàn)闆](méi)有資源處理io而導(dǎo)致io超時(shí)。由此可見(jiàn),本方法通過(guò)檢測(cè)存儲(chǔ)池中是否出現(xiàn)資源不足的問(wèn)題,并在資源不足時(shí)間當(dāng)前存儲(chǔ)池中的所有卷離線,阻止后續(xù)io在這些資源不足的卷上處理,從而避免產(chǎn)生超時(shí)io,可以有效地避免因?yàn)橘Y源不足而導(dǎo)致的io超時(shí)問(wèn)題。
51、本發(fā)明提供的輸入輸出超時(shí)處理裝置、及非易失性存儲(chǔ)介質(zhì),與上述方法對(duì)應(yīng),效果同上。