本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,特別是涉及一種超時(shí)監(jiān)測(cè)方法及系統(tǒng)。
背景技術(shù):
在存儲(chǔ)系統(tǒng)中,主機(jī)系統(tǒng)軟件向存儲(chǔ)設(shè)備或者下層存儲(chǔ)系統(tǒng)發(fā)出io請(qǐng)求。系統(tǒng)軟件的實(shí)例包括存儲(chǔ)設(shè)備驅(qū)動(dòng)程序、用戶態(tài)驅(qū)動(dòng)程序、raid管理程序、存儲(chǔ)協(xié)議棧等。系統(tǒng)軟件需要檢查每個(gè)io請(qǐng)求是否超時(shí)。
常用的超時(shí)監(jiān)測(cè)機(jī)制有多種(參見中國(guó)專利cnl03067258b)。例如,維護(hù)發(fā)出但尚未返回的io請(qǐng)求集合,在每個(gè)io請(qǐng)求中記錄發(fā)出io請(qǐng)求的時(shí)間,定期遍歷io請(qǐng)求集合,通過(guò)io請(qǐng)求中的時(shí)間與當(dāng)前時(shí)間進(jìn)行比較來(lái)判斷是否超時(shí)。又例如,以超時(shí)時(shí)間為io請(qǐng)求建立索引,定期以當(dāng)前時(shí)間為索引查找io請(qǐng)求,找到的io請(qǐng)求為超時(shí)io請(qǐng)求。
在網(wǎng)絡(luò)通信中,主機(jī)系統(tǒng)軟件向網(wǎng)卡發(fā)出網(wǎng)絡(luò)報(bào)文。系統(tǒng)軟件也檢查每個(gè)報(bào)文是否超時(shí)。
技術(shù)實(shí)現(xiàn)要素:
目前,諸如存儲(chǔ)設(shè)備或網(wǎng)絡(luò)設(shè)備的計(jì)算機(jī)外圍設(shè)備的io處理能力越來(lái)越強(qiáng),在超時(shí)時(shí)間窗口內(nèi)被發(fā)出且尚未完成的io請(qǐng)求會(huì)多達(dá)千、萬(wàn)、億乃至更多量級(jí)。為每個(gè)未完成的io請(qǐng)求檢查超時(shí)或建立/查詢超時(shí)索引將消耗大量系統(tǒng)資源。以及當(dāng)超時(shí)事件與io請(qǐng)求同時(shí)到來(lái)時(shí),急需處理時(shí)間索引的競(jìng)爭(zhēng)問(wèn)題。
為了解決上述問(wèn)題,本申請(qǐng)?zhí)峁┮环N超時(shí)監(jiān)測(cè)方法及系統(tǒng)。
本申請(qǐng)?zhí)岢鲆环N超時(shí)監(jiān)測(cè)系統(tǒng),包括:
發(fā)送端:將待監(jiān)測(cè)內(nèi)容存入未完成集合,向接收端發(fā)送該待監(jiān)測(cè)內(nèi)容;在預(yù)先設(shè)置的超時(shí)監(jiān)測(cè)時(shí)間間隔內(nèi),判斷未完成集合中待監(jiān)測(cè)內(nèi)容的數(shù)量,做出相應(yīng)的處理;
接收端:接收發(fā)送端發(fā)送的待監(jiān)測(cè)內(nèi)容,并在完成該待監(jiān)測(cè)內(nèi)容之后,向發(fā)送端返回處理完成的消息。
具體的,待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
可選的,發(fā)送端包括多個(gè)未完成集合,以及與未完成集合相配合的計(jì)數(shù)器,計(jì)數(shù)器用于記錄未完成的待監(jiān)測(cè)內(nèi)容的數(shù)量。
可選的,發(fā)送端設(shè)置索引,通過(guò)索引能夠訪問(wèn)計(jì)數(shù)器和未完成集合。
可選的,所述未完成集合由hash表、數(shù)組、線性表或鏈表實(shí)現(xiàn)。
優(yōu)選的,所述發(fā)送端:
預(yù)先設(shè)置超時(shí)監(jiān)測(cè)時(shí)間間隔;
響應(yīng)于要向接收端發(fā)送待監(jiān)測(cè)內(nèi)容,而根據(jù)當(dāng)前時(shí)間和超時(shí)監(jiān)測(cè)時(shí)間間隔獲得當(dāng)前時(shí)間段序號(hào);將當(dāng)前時(shí)間段序號(hào)與計(jì)數(shù)器或未完成集合的數(shù)量的模作為當(dāng)前索引;
將待監(jiān)測(cè)內(nèi)容存入根據(jù)當(dāng)前索引找到與該當(dāng)前索引對(duì)應(yīng)的計(jì)數(shù)器和未完成集合。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)中待監(jiān)測(cè)內(nèi)容記錄方法,包括:
接收待監(jiān)測(cè)內(nèi)容;
根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的未完成集合;
將待監(jiān)測(cè)內(nèi)容寫入該未完成集合。
可選的,每個(gè)未完成集合都具有一個(gè)與之相配合的計(jì)數(shù)器,計(jì)數(shù)器用于記錄未完成集合中的待監(jiān)測(cè)內(nèi)容的數(shù)量。
可選的,還根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的計(jì)數(shù)器,對(duì)該計(jì)數(shù)器進(jìn)行 遞增操作。
可選的,待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
可選的,所述未完成集合由hash表、數(shù)組、線性表或鏈表實(shí)現(xiàn)。
可選的,根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的未完成集合具體為:
預(yù)先設(shè)置超時(shí)監(jiān)測(cè)時(shí)間間隔;
根據(jù)當(dāng)前時(shí)間和超時(shí)監(jiān)測(cè)時(shí)間間隔獲得當(dāng)前時(shí)間段序號(hào);
將當(dāng)前時(shí)間段序號(hào)與計(jì)數(shù)器或未完成集合的數(shù)量的模作為當(dāng)前索引。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)中刪除待監(jiān)測(cè)內(nèi)容的方法,包括:
接收接收端返回的待監(jiān)測(cè)內(nèi)容處理完成消息;
確定該待監(jiān)測(cè)內(nèi)容所對(duì)應(yīng)的未完成集合;
將待監(jiān)測(cè)內(nèi)容從該未完成集合中刪除。
可選的,獲取該待監(jiān)測(cè)內(nèi)容對(duì)應(yīng)的索引的方法,為以下之一:
從返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中提取該待監(jiān)測(cè)內(nèi)容對(duì)應(yīng)的索引,其中在發(fā)送給接收端的待監(jiān)測(cè)內(nèi)容中包含所使用的當(dāng)前索引,以及在返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中攜帶所述索引;
或者,收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷多個(gè)未完成集合,包含所收到的待監(jiān)測(cè)內(nèi)容的未完成集合的序號(hào)為與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,提供第一集合用于存儲(chǔ)待監(jiān)測(cè)內(nèi)容與索引對(duì),在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷該第一集合找到與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),從待監(jiān)測(cè)內(nèi)容的描述符中獲得與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引,其中在待監(jiān)測(cè)內(nèi)容的描述符中記錄所使用的當(dāng)前索引。
可選的,還對(duì)所述索引對(duì)應(yīng)的計(jì)數(shù)器進(jìn)行遞減操作。
可選的,待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或多種。
可選的,其特征在于,所述未完成集合由hash表、數(shù)組、線性表或鏈 表實(shí)現(xiàn)。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)處理方法,包括:
在到達(dá)預(yù)定時(shí)間間隔時(shí),根據(jù)當(dāng)前索引確定待進(jìn)行超時(shí)監(jiān)測(cè)的未完成合集;
監(jiān)測(cè)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合中待監(jiān)測(cè)內(nèi)容的數(shù)量,若數(shù)量不為零,則對(duì)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合中的待監(jiān)測(cè)內(nèi)容進(jìn)行處理;
對(duì)當(dāng)前索引進(jìn)行更新。
可選的,還包括:
根據(jù)當(dāng)前時(shí)間和超時(shí)監(jiān)測(cè)時(shí)間間隔獲得當(dāng)前時(shí)間段序號(hào);
將當(dāng)前時(shí)間段序號(hào)與計(jì)數(shù)器或未完成集合的數(shù)量的模作為當(dāng)前索引。
可選的,預(yù)定時(shí)間間隔是定時(shí)器的重置時(shí)間。
可選的,對(duì)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合中的待監(jiān)測(cè)內(nèi)容進(jìn)行處理包括:
獲取所述未完成集合中的待監(jiān)測(cè)內(nèi)容的信息;
將所述信息提示給用戶。
可選的,將所述信息提示給用戶的方式為打印。
可選的,對(duì)當(dāng)前索引進(jìn)行更新包括:
對(duì)當(dāng)前索引進(jìn)行遞增操作。
可選的,每個(gè)未完成集合都具有一個(gè)與之相配合的計(jì)數(shù)器,計(jì)數(shù)器用于記錄未完成集合中的待監(jiān)測(cè)內(nèi)容的數(shù)量。
可選的,根據(jù)當(dāng)前索引確定待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合包括:
與所述當(dāng)前索引所對(duì)應(yīng)的時(shí)間段相差一個(gè)超時(shí)時(shí)間間隔的時(shí)間段所對(duì)應(yīng)的索引為待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合索引;
根據(jù)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合索引確定待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合。
可選的,待監(jiān)測(cè)內(nèi)容為io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
可選的,所述未完成集合由hash表、數(shù)組、線性表或鏈表實(shí)現(xiàn)。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)方法,包括:
設(shè)置當(dāng)前索引;
發(fā)出第一待監(jiān)測(cè)內(nèi)容時(shí),使用當(dāng)前索引訪問(wèn)第一未完成集合,將對(duì)應(yīng)于第一待監(jiān)測(cè)內(nèi)容的信息插入第一未完成集合;
收到被處理完成的第二待監(jiān)測(cè)內(nèi)容時(shí),基于第二待監(jiān)測(cè)內(nèi)容獲取與第二待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的第二索引,并依據(jù)第二索引訪問(wèn)第二未完成集合,從第二未完成集合中刪除與第二待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的信息;
在進(jìn)入下一時(shí)間段時(shí),基于所述當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引訪問(wèn)第三未完成集合,第三未完成集合中的元素為超時(shí)內(nèi)容。
可選的,待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
可選的,基于待監(jiān)測(cè)內(nèi)容獲取與待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引的方法,為以下之一:
從返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中提取該待監(jiān)測(cè)內(nèi)容對(duì)應(yīng)的索引,其中在發(fā)送給接收端的待監(jiān)測(cè)內(nèi)容中包含所使用的當(dāng)前索引,以及在返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中攜帶所述索引;
或者,收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷多個(gè)未完成集合,包含所收到的待監(jiān)測(cè)內(nèi)容的未完成集合的序號(hào)為與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,提供第一集合用于存儲(chǔ)待監(jiān)測(cè)內(nèi)容與索引對(duì),在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷該第一集合找到與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),從待監(jiān)測(cè)內(nèi)容的描述符中獲得與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引,其中在待監(jiān)測(cè)內(nèi)容的描述符中記錄所使用的當(dāng)前索引。
可選的,當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引為與所述當(dāng)前時(shí)間段的時(shí)間間隔為超時(shí)時(shí)間間隔的時(shí)間段所對(duì)應(yīng)的索引。
可選的,包括:
獲取所述第三未完成集合中的待監(jiān)測(cè)內(nèi)容的信息;
將所述信息提示給用戶。
可選的,未完成集合中的與待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的信息為訪問(wèn)待監(jiān)測(cè)內(nèi)容的地址,以及未完成集合中的與待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的信息的索引為待監(jiān)測(cè)內(nèi)容的地址。
可選的,基于所述當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引訪問(wèn)第三未完成集合后,更新當(dāng)前索引。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)中待監(jiān)測(cè)內(nèi)容記錄裝置,包括:
信息接收單元,用于接收待監(jiān)測(cè)內(nèi)容;
定位單元,用于根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的未完成集合;
信息處理單元,用于將待監(jiān)測(cè)內(nèi)容寫入該未完成集合。
可選的,每個(gè)未完成集合都具有一個(gè)與之相配合的計(jì)數(shù)器,計(jì)數(shù)器用于記錄未完成集合中的待監(jiān)測(cè)內(nèi)容的數(shù)量。
可選的,定位單元還根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的計(jì)數(shù)器,并有信息處理單元對(duì)該計(jì)數(shù)器進(jìn)行遞增操作。
可選的,待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
可選的,所述未完成集合由hash表、數(shù)組、線性表或鏈表實(shí)現(xiàn)。
可選的,定位單元根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的未完成集合具體為:
預(yù)先設(shè)置超時(shí)監(jiān)測(cè)時(shí)間間隔;
根據(jù)當(dāng)前時(shí)間和超時(shí)監(jiān)測(cè)時(shí)間間隔獲得當(dāng)前時(shí)間段序號(hào);
將當(dāng)前時(shí)間段序號(hào)與計(jì)數(shù)器或未完成集合的數(shù)量的模作為當(dāng)前索引。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)中刪除待監(jiān)測(cè)內(nèi)容的裝置,包括:
消息接收單元,用于接收接收端返回的待監(jiān)測(cè)內(nèi)容處理完成消息;
確定單元,用于確定該待監(jiān)測(cè)內(nèi)容所對(duì)應(yīng)的未完成集合;
數(shù)據(jù)處理單元,用于將待監(jiān)測(cè)內(nèi)容從該未完成集合中刪除。
可選的,獲取該待監(jiān)測(cè)內(nèi)容對(duì)應(yīng)的索引的方法,為以下之一:
從返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中提取該待監(jiān)測(cè)內(nèi)容對(duì)應(yīng)的索引,其中在發(fā)送給接收端的待監(jiān)測(cè)內(nèi)容中包含所使用的當(dāng)前索引,以及在返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中攜帶所述索引;
或者,收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷多個(gè)未完成集合,包含所收到的待監(jiān)測(cè)內(nèi)容的未完成集合的序號(hào)為與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,提供第一集合用于存儲(chǔ)待監(jiān)測(cè)內(nèi)容與索引對(duì),在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷該第一集合找到與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),從待監(jiān)測(cè)內(nèi)容的描述符中獲得與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引,其中在待監(jiān)測(cè)內(nèi)容的描述符中記錄所使用的當(dāng)前索引。
可選的,數(shù)據(jù)處理單元還對(duì)所述索引對(duì)應(yīng)的計(jì)數(shù)器進(jìn)行遞減操作。
可選的,待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或多種。
可選的,所述未完成集合由hash表、數(shù)組、線性表或鏈表實(shí)現(xiàn)。
可選的,包括:
信息檢測(cè)單元,用于檢測(cè)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合中待監(jiān)測(cè)內(nèi)容的數(shù)量;
內(nèi)容處理單元,用于在到達(dá)預(yù)定時(shí)間間隔時(shí),根據(jù)當(dāng)前索引確定待進(jìn)行超時(shí)監(jiān)測(cè)的未完成合集,對(duì)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合中的待監(jiān)測(cè)內(nèi)容進(jìn)行處理;
索引更新單元,用于對(duì)索引進(jìn)行更新。
可選的,還包括:
根據(jù)當(dāng)前時(shí)間和超時(shí)監(jiān)測(cè)時(shí)間間隔獲得當(dāng)前時(shí)間段序號(hào);
將當(dāng)前時(shí)間段序號(hào)與計(jì)數(shù)器或未完成集合的數(shù)量的模作為當(dāng)前索引。
可選的,預(yù)定時(shí)間間隔是定時(shí)器的重置時(shí)間。
可選的,內(nèi)容處理單元對(duì)對(duì)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合中的待監(jiān)測(cè)內(nèi) 容進(jìn)行處理:
獲取所述未完成集合中的待監(jiān)測(cè)內(nèi)容的信息;
將所述信息提示給用戶。
可選的,內(nèi)容處理單元將所述信息提示給用戶的方式為打印。
可選的,索引更新單元對(duì)當(dāng)前索引進(jìn)行更新包括:
對(duì)當(dāng)前索引進(jìn)行遞增操作。
可選的,每個(gè)未完成集合都具有一個(gè)與之相配合的計(jì)數(shù)器,計(jì)數(shù)器用于記錄未完成集合中的待監(jiān)測(cè)內(nèi)容的數(shù)量;
可選的,根據(jù)當(dāng)前索引確定待進(jìn)行超時(shí)監(jiān)測(cè)的未完成合集包括:
與所述當(dāng)前索引所對(duì)應(yīng)的時(shí)間段相差一個(gè)超時(shí)時(shí)間間隔的時(shí)間段所對(duì)應(yīng)的索引為待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合索引;
根據(jù)待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合索引確定待進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合。
可選的,待監(jiān)測(cè)內(nèi)容為io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或多種。
可選的,所述未完成集合由hash表、數(shù)組、線性表或鏈表實(shí)現(xiàn)。
本申請(qǐng)還提出一種超時(shí)監(jiān)測(cè)裝置,包括:
索引確認(rèn)模塊,用于確認(rèn)當(dāng)前索引;
操作處理模塊,用于發(fā)出第一待監(jiān)測(cè)內(nèi)容時(shí),使用當(dāng)前索引訪問(wèn)第一未完成集合,將對(duì)應(yīng)于第一待監(jiān)測(cè)內(nèi)容的信息插入第一未完成集合,收到被處理完成的第二待監(jiān)測(cè)內(nèi)容時(shí),依據(jù)第二索引訪問(wèn)第二未完成集合,從第二未完成集合中刪除與第二待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的信息,在進(jìn)入下一時(shí)間段時(shí),基于所述當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引訪問(wèn)第三未完成集合,第三未完成集合中的元素為超時(shí)內(nèi)容。
可選的,所述待監(jiān)測(cè)內(nèi)容是io操作請(qǐng)求、網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
可選的,所述索引確認(rèn)模塊基于待監(jiān)測(cè)內(nèi)容獲取與待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng) 的索引,為以下之一:
從返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中提取該待監(jiān)測(cè)內(nèi)容對(duì)應(yīng)的索引,其中在發(fā)送給接收端的待監(jiān)測(cè)內(nèi)容中包含所使用的當(dāng)前索引,以及在返回的指示待監(jiān)測(cè)內(nèi)容處理完成的消息中攜帶所述索引;
或者,收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷多個(gè)未完成集合,包含所收到的待監(jiān)測(cè)內(nèi)容的未完成集合的序號(hào)為與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,提供第一集合用于存儲(chǔ)待監(jiān)測(cè)內(nèi)容與索引對(duì),在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),遍歷該第一集合找到與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引;
或者,在收到待監(jiān)測(cè)內(nèi)容處理完成消息時(shí),從待監(jiān)測(cè)內(nèi)容的描述符中獲得與該待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的索引,其中在待監(jiān)測(cè)內(nèi)容的描述符中記錄所使用的當(dāng)前索引。
可選的,當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引為與所述當(dāng)前時(shí)間段的時(shí)間間隔為超時(shí)時(shí)間間隔的時(shí)間段所對(duì)應(yīng)的索引。
可選的,包括:
獲取所述第三未完成集合中的待監(jiān)測(cè)內(nèi)容的信息;
將所述信息提示給用戶。
可選的,未完成集合中的與待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的信息為訪問(wèn)待監(jiān)測(cè)內(nèi)容的地址,以及未完成集合中的與待監(jiān)測(cè)內(nèi)容相對(duì)應(yīng)的信息的索引為待監(jiān)測(cè)內(nèi)容的地址。
可選的,基于所述當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引訪問(wèn)第三未完成集合后,更新當(dāng)前索引。
根據(jù)本發(fā)明的實(shí)施例,還提供了一種包含計(jì)算機(jī)程序代碼的計(jì)算機(jī)程序,當(dāng)被載入計(jì)算機(jī)系統(tǒng)并在計(jì)算機(jī)系統(tǒng)上執(zhí)行時(shí),所述計(jì)算機(jī)程序代碼使所述計(jì)算機(jī)系統(tǒng)執(zhí)行上面所述的方法。
根據(jù)本發(fā)明的實(shí)施例,還提供了一種包含計(jì)算機(jī)程序代碼的計(jì)算機(jī)存儲(chǔ)介質(zhì),當(dāng)所述存儲(chǔ)介質(zhì)上的計(jì)算機(jī)程序代碼被載入計(jì)算機(jī)系統(tǒng)并在計(jì)算機(jī)系統(tǒng)上執(zhí)行時(shí),所述計(jì)算機(jī)程序代碼使所述計(jì)算機(jī)系統(tǒng)執(zhí)行上面所述的 方法。
上述本發(fā)明提出的一種超時(shí)監(jiān)測(cè)方法及系統(tǒng),獲得了以下技術(shù)效果:
1、本申請(qǐng)?zhí)岢龅某瑫r(shí)監(jiān)測(cè)方法及系統(tǒng),通過(guò)使用非精確的超時(shí)檢測(cè),極大的提高超時(shí)檢測(cè)的效率。
2、本申請(qǐng)?zhí)岢龅某瑫r(shí)監(jiān)測(cè)方法及系統(tǒng),可以在檢測(cè)到待檢測(cè)內(nèi)容超時(shí)的時(shí)候打印出超時(shí)待檢測(cè)內(nèi)容的相關(guān)具體信息,從而可以幫助開發(fā)者搜集待檢測(cè)內(nèi)容的模式,最終定位超時(shí)的原因。
3、最后,本申請(qǐng)還解決了當(dāng)超時(shí)事件與io請(qǐng)求同時(shí)到來(lái)時(shí)的時(shí)間索引并發(fā)訪問(wèn)的問(wèn)題,從而使得系統(tǒng)運(yùn)行更加高效。
附圖說(shuō)明
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是根據(jù)本發(fā)明實(shí)施例的超時(shí)監(jiān)測(cè)系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是根據(jù)本發(fā)明實(shí)施例的方框圖;
圖3是根據(jù)本發(fā)明實(shí)施例的時(shí)間軸示意圖;
圖4是根據(jù)本發(fā)明實(shí)施例的超時(shí)監(jiān)測(cè)方法的流程圖;
圖5是根據(jù)本發(fā)明實(shí)施例的插入未完成集合的示意圖;
圖6是根據(jù)本發(fā)明實(shí)施例的中將待監(jiān)測(cè)內(nèi)容插入未完成集合的方法的流程圖;
圖7是根據(jù)本發(fā)明實(shí)施例的移除未完成集合元素的示意圖;
圖8是根據(jù)本發(fā)明實(shí)施例的從未完成集合移除待監(jiān)測(cè)內(nèi)容的方法的流程圖;
圖9是根據(jù)本發(fā)明實(shí)施例的檢測(cè)待監(jiān)測(cè)內(nèi)容超時(shí)的示意圖;以及
圖10是根據(jù)本發(fā)明實(shí)施例的超時(shí)監(jiān)測(cè)處理方法的流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
根據(jù)本發(fā)明實(shí)施例的超時(shí)監(jiān)測(cè)系統(tǒng),如圖1所示,包括發(fā)送端11和接收端12,由發(fā)送端11實(shí)施對(duì)待監(jiān)測(cè)內(nèi)容的監(jiān)督和判斷。發(fā)送端11可以是計(jì)算機(jī)、服務(wù)器、路由器、交換機(jī)等,接收端12可以是諸如機(jī)械硬盤、固態(tài)硬盤、u盤的計(jì)算機(jī)外圍設(shè)備、另一臺(tái)計(jì)算機(jī)、服務(wù)器或者另一臺(tái)路由器、交換機(jī)等網(wǎng)絡(luò)設(shè)備。發(fā)送端11與接收端12可通過(guò)多種通信鏈路連接,例如sata(serialadvancedtechnologyattachment,串行高級(jí)技術(shù)附件)、usb(universalserialbus,通用串行總線)、pcie(peripheralcomponentinterconnectexpress,快速外圍組件互連)、scsi(smallcomputersysteminterface,小型計(jì)算機(jī)系統(tǒng)接口)、ide(integrateddriveelectronics,集成驅(qū)動(dòng)器電子)等,發(fā)送端11與接收端12也可通過(guò)以太網(wǎng)、光纖通道、無(wú)線網(wǎng)等網(wǎng)絡(luò)耦合在一起。發(fā)送端11與接收端12之間交換數(shù)據(jù)包、網(wǎng)絡(luò)報(bào)文或io請(qǐng)求是根據(jù)本發(fā)明的實(shí)施例的待監(jiān)測(cè)內(nèi)容,通過(guò)在發(fā)送端11中實(shí)施本發(fā)明,監(jiān)測(cè)由發(fā)送端11向接收端12發(fā)送的數(shù)據(jù)包、網(wǎng)絡(luò)報(bào)文或io請(qǐng)求等待監(jiān)測(cè)內(nèi)容是否在預(yù)定時(shí)間內(nèi)沒有被從接收端12返回,即發(fā)生超時(shí)。待監(jiān)測(cè)內(nèi)容從接收端12返回,可以是發(fā)送端11收到接收端12發(fā)送的對(duì)數(shù)據(jù)包、網(wǎng)絡(luò)報(bào)文的確認(rèn)報(bào)文,或者對(duì)io請(qǐng)求執(zhí)行結(jié)果的應(yīng)答。
在圖1的實(shí)施例中,發(fā)送端11包括超時(shí)監(jiān)測(cè)裝置111與收發(fā)器112。超時(shí)監(jiān)測(cè)裝置111通過(guò)實(shí)施本發(fā)明的實(shí)施例來(lái)實(shí)現(xiàn)對(duì)待檢測(cè)內(nèi)容的超時(shí)檢測(cè)。收發(fā)器112用于向接收端12發(fā)送待監(jiān)測(cè)內(nèi)容,并接收從接收端12返回的待監(jiān)測(cè)內(nèi)容完成信息。
如圖2所示,在一個(gè)例子中發(fā)送端是主機(jī)(host)而接收端是作為存儲(chǔ)設(shè)備的固態(tài)硬盤。主機(jī)和存儲(chǔ)設(shè)備通過(guò)nvme協(xié)議通信。主機(jī)向存儲(chǔ)設(shè)備發(fā)送io請(qǐng)求,存儲(chǔ)設(shè)備將指示io請(qǐng)求處理完成的消息發(fā)送給主機(jī)。在主機(jī)的存 儲(chǔ)設(shè)備驅(qū)動(dòng)程序中實(shí)施根據(jù)本發(fā)明實(shí)施例的方法來(lái)檢測(cè)io請(qǐng)求的處理是否超時(shí)。
作為舉例,若主機(jī)向存儲(chǔ)設(shè)備發(fā)出io請(qǐng)求后,在10秒鐘內(nèi)沒有收到存儲(chǔ)設(shè)備返回的指示io請(qǐng)求處理完成的消息,認(rèn)為該io請(qǐng)求超時(shí)。并且對(duì)于主機(jī)向存儲(chǔ)設(shè)備發(fā)出的所有io請(qǐng)求,其超時(shí)時(shí)間均為10秒。
參看圖2,在主機(jī)中提供5個(gè)計(jì)數(shù)器,用于記錄未完成io的數(shù)量。主機(jī)中還提供5個(gè)未完成io集合,用于臨時(shí)存儲(chǔ)與尚未完成的io請(qǐng)求關(guān)聯(lián)的信息。未完成的io請(qǐng)求是主機(jī)已向存儲(chǔ)設(shè)備發(fā)出但尚未收到來(lái)自存儲(chǔ)設(shè)備的指示io請(qǐng)求處理完成消息的io請(qǐng)求。
主機(jī)中還提供當(dāng)前索引,通過(guò)當(dāng)前索引能夠訪問(wèn)5個(gè)計(jì)數(shù)器之一,以及5個(gè)未完成io集合之一。計(jì)數(shù)器與未完成io集合一一對(duì)應(yīng),通過(guò)當(dāng)前索引能夠訪問(wèn)計(jì)數(shù)器之一以及與該計(jì)數(shù)器相對(duì)應(yīng)的未完成io集合。通過(guò)當(dāng)前時(shí)間確定當(dāng)前索引(下面將結(jié)合圖3對(duì)當(dāng)前索引的確定進(jìn)行描述)。
主機(jī)中還提供定時(shí)器。在指定的定時(shí)時(shí)間(本例中,為每2秒),定時(shí)器產(chǎn)生超時(shí)事件并引起超時(shí)處理流程的執(zhí)行。
所屬領(lǐng)域技術(shù)人員將意識(shí)到,io請(qǐng)求的超時(shí)時(shí)間可以為其他時(shí)間,以及主機(jī)中可提供不同數(shù)量的計(jì)數(shù)器與未完成io集合。
圖3是根據(jù)本發(fā)明實(shí)施例1的時(shí)間軸示意圖。如圖3所示,時(shí)間被劃分為多個(gè)時(shí)間段,作為舉例,時(shí)間段t0、t1、t2……t5的長(zhǎng)度均為2秒。每當(dāng)定時(shí)器產(chǎn)生超時(shí)事件,意味著進(jìn)入了下一時(shí)間段。通過(guò)當(dāng)前時(shí)間段確定當(dāng)前索引。將當(dāng)前時(shí)間段與計(jì)數(shù)器或未完成io集合的數(shù)量的模作為當(dāng)前索引。系統(tǒng)初始化時(shí)的時(shí)間段的序號(hào)可以為0。
在圖2中,計(jì)數(shù)器的數(shù)量為5,未完成io集合的數(shù)量為5。以每2秒作為一個(gè)時(shí)間段,若當(dāng)前時(shí)間處于時(shí)間段t0(即0-2s的時(shí)間段),當(dāng)前時(shí)間段序號(hào)0與未完成io集合數(shù)量5的模為0(0mod5),則當(dāng)前索引為0。類似地,若當(dāng)前時(shí)間處于時(shí)間段t4,則當(dāng)前索引為4(4mod5),若當(dāng)前時(shí)間處于時(shí)間段t5,則當(dāng)前索引回繞為0(=5mod5)。在另一個(gè)例子中,若未完 成集合數(shù)量為5,以秒為單位的當(dāng)前時(shí)間為是7秒,計(jì)數(shù)器或未完成集合的切換時(shí)間間隔設(shè)定為2秒,則當(dāng)前的時(shí)間段序號(hào)是7/2=3(向下取整),則當(dāng)前時(shí)間段序號(hào)為3,與未完成集合數(shù)量的模為3(3mod5),則當(dāng)前索引為3。
根據(jù)本發(fā)明的實(shí)施例,超時(shí)io檢測(cè)是不精確的,可以在時(shí)間段內(nèi)的任何時(shí)刻設(shè)置當(dāng)前索引。在一個(gè)例子中,為設(shè)置當(dāng)前索引,獲取以秒為單位的當(dāng)前時(shí)間,并與未完成io集合數(shù)量求模,結(jié)果作為當(dāng)前索引。在另一個(gè)例子中,獲得時(shí)間段序號(hào),用時(shí)間段序號(hào)與未完成io集合數(shù)量的模作為當(dāng)前索引。
在依然另一個(gè)例子中,在初始時(shí)刻,將當(dāng)前索引設(shè)置為0,以及每當(dāng)進(jìn)入新的時(shí)間段后,使當(dāng)前索引遞增以索引下一計(jì)數(shù)器與未完成io集合(例如計(jì)數(shù)器1的下一計(jì)數(shù)器為計(jì)數(shù)器2),并且在當(dāng)前索引值超過(guò)未完成計(jì)數(shù)器或io集合數(shù)量后回繞為初始值以索引計(jì)數(shù)器0以及與其相對(duì)應(yīng)的未完成io集合0。
圖4是根據(jù)本發(fā)明實(shí)施例的超時(shí)監(jiān)測(cè)方法的流程圖。如圖4所示,根據(jù)本發(fā)明實(shí)施例的超時(shí)監(jiān)測(cè)方法可由如圖2所示的主機(jī)的存儲(chǔ)驅(qū)動(dòng)程序?qū)嵤?。在根?jù)本發(fā)明的實(shí)施例中,超時(shí)監(jiān)測(cè)的對(duì)象是io請(qǐng)求。在其他實(shí)施例中,超時(shí)監(jiān)測(cè)的對(duì)象也可以是網(wǎng)絡(luò)報(bào)文、網(wǎng)絡(luò)數(shù)據(jù)包或消息的一種或幾種。
在圖4的實(shí)施例中,響應(yīng)于不同事件的出現(xiàn),執(zhí)行不同的處理步驟。當(dāng)主機(jī)向存儲(chǔ)設(shè)備發(fā)出第一io請(qǐng)求時(shí),依照當(dāng)前索引將對(duì)應(yīng)于第一io請(qǐng)求的信息插入第一未完成集合(s410)。響應(yīng)于收到被處理完成的第二io請(qǐng)求,獲取與第二io請(qǐng)求相對(duì)應(yīng)的第二索引,依據(jù)第二索引訪問(wèn)第二未完成集合,從第二未完成集合中刪除與第二io請(qǐng)求相對(duì)應(yīng)的信息(s420)。以及響應(yīng)于時(shí)間進(jìn)入下一時(shí)間段,基于當(dāng)前時(shí)間段所對(duì)應(yīng)的第三索引訪問(wèn)第三未完成集合,第三未完成集合中的元素為超時(shí)io請(qǐng)求(s430)。步驟s410、步驟s420與步驟s430可以并行執(zhí)行,也可以在不同的時(shí)間執(zhí)行。在一個(gè)實(shí)施例中,每個(gè)步驟可以由一個(gè)線程執(zhí)行,也可以在一個(gè)線程中檢查多種事件 的出現(xiàn),并執(zhí)行相應(yīng)的步驟。在另一個(gè)實(shí)施例中,由多個(gè)線程來(lái)響應(yīng)于發(fā)出多個(gè)第一io請(qǐng)求的每個(gè)而執(zhí)行步驟s410,以及由多個(gè)線程來(lái)響應(yīng)于收到多個(gè)被處理完成的第二io請(qǐng)求來(lái)執(zhí)行步驟s420。
圖5是根據(jù)本發(fā)明實(shí)施例的插入未完成集合的示意圖。在主機(jī)向存儲(chǔ)設(shè)備發(fā)出io請(qǐng)求時(shí),將對(duì)應(yīng)于io請(qǐng)求的信息插入未完成集合(也參看圖4,步驟s410)。
圖5中,提供了5個(gè)計(jì)數(shù)器(c0、c1、…c4)與5個(gè)未完成集合(s0、s1、……s4)。未完成集合中的元素為指示主機(jī)已向存儲(chǔ)設(shè)備發(fā)出但尚未返回的io請(qǐng)求的信息,例如未完成集合s1中的元素包括標(biāo)識(shí)符為1、2……1023的同io請(qǐng)求相對(duì)應(yīng)的信息(分別記為io-1、io-2……io-1023)。圖5中,當(dāng)前索引指向計(jì)數(shù)器c1與未完成集合s1??蛇x地,省略計(jì)數(shù)器,通過(guò)遍歷未完成集合能夠得到集合中元素的數(shù)量。
如圖5所示(同時(shí)參看圖6),在接收到的要發(fā)出io請(qǐng)求或發(fā)出io請(qǐng)求(例如標(biāo)識(shí)符為1181的io請(qǐng)求)時(shí),為檢測(cè)io超時(shí),基于當(dāng)前索引使計(jì)數(shù)器遞增。在圖5中,當(dāng)前索引指向計(jì)數(shù)器c1,通過(guò)當(dāng)前索引訪問(wèn)計(jì)數(shù)器c1,并使計(jì)數(shù)器c1遞增。生成與標(biāo)識(shí)符為1181的io請(qǐng)求相對(duì)應(yīng)的信息(io-1181,1)作為未完成集合的元素,其中存儲(chǔ)了當(dāng)前索引(在本例中為1)。通過(guò)當(dāng)前索引訪問(wèn)未完成io集合s1,將元素(io-1181,1)插入到未完成集合s1。
類似地,對(duì)于每個(gè)發(fā)出的io請(qǐng)求(圖6,s610),主機(jī)根據(jù)當(dāng)前索引確定當(dāng)前索引對(duì)應(yīng)的計(jì)數(shù)器和/或未完成集合(圖6,s620),使對(duì)應(yīng)的計(jì)數(shù)器遞增,在記錄io請(qǐng)求的單元中存儲(chǔ)當(dāng)前io請(qǐng)求的標(biāo)識(shí)符,并將記錄io請(qǐng)求的單元插入由當(dāng)前索引訪問(wèn)的未完成集合(圖6,s630)。
參看圖5,5個(gè)計(jì)數(shù)器中,計(jì)數(shù)器c0的值為1023,表示對(duì)應(yīng)于計(jì)數(shù)器c0有1023個(gè)未完成的io請(qǐng)求。計(jì)數(shù)器c1的值為158,表示對(duì)應(yīng)于計(jì)數(shù)器c1有158個(gè)未完成的io請(qǐng)求。而計(jì)數(shù)器c2、計(jì)數(shù)器c3以及計(jì)數(shù)器c4均為0,表示對(duì)應(yīng)于計(jì)數(shù)器c2、c3與c4尚不存在未完成的io請(qǐng)求。相對(duì)應(yīng) 地,在未完成集合s0中,包括對(duì)應(yīng)于計(jì)數(shù)器c0的1023個(gè)記錄未完成io請(qǐng)求的單元,記為(io-1,0)(io-2,0)…(io-1023,0)。在未完成集合s2中,記錄了對(duì)應(yīng)于計(jì)數(shù)器c1的158個(gè)記錄未完成io請(qǐng)求的單元,記為(io-1024,1)(io-1025,1)…(io-1181,1)。而未完成集合s2、s3與s4為空集。
進(jìn)一步的,通過(guò)當(dāng)前索引訪問(wèn)計(jì)數(shù)器和/或未完成io集合時(shí),對(duì)計(jì)數(shù)器和/或未完成io集合加鎖,使得多個(gè)線程互斥地訪問(wèn)計(jì)數(shù)器和/或未完成io集合。
作為舉例,未完成io集合為hash表,以提供快速插入與刪除操作。以指向記錄io請(qǐng)求的單元(例如io請(qǐng)求描述符)的指針值作為hash表項(xiàng)的鍵,同樣以指向io請(qǐng)求描述符的指針值作為hash表項(xiàng)的值。
作為舉例,io請(qǐng)求描述符可包括命令操作碼、起始邏輯塊地址、邏輯塊數(shù)量等。
圖7是根據(jù)本發(fā)明實(shí)施例的移除未完成集合元素的示意圖。在收到被存儲(chǔ)設(shè)備處理完成的io請(qǐng)求時(shí),將處理完成的io請(qǐng)求從未完成集合中刪除(參看圖4,步驟s420)。
如圖7所示(也參看圖8),隨著時(shí)間流逝,當(dāng)前索引已指向了計(jì)數(shù)器c2與未完成集合s2。在收到指示io請(qǐng)求處理完成的消息時(shí)(例如指示標(biāo)識(shí)符為1100(記為io-1100)的io請(qǐng)求處理完成)時(shí),獲取與未完成io請(qǐng)求io-1100對(duì)應(yīng)的索引,在本例中,為1。在一個(gè)例子中,遍歷多個(gè)未完成集合,以包含記錄未完成io請(qǐng)求io-1100的單元(io-1100,1)的未完成集合的索引,作為與未完成io請(qǐng)求io-1100對(duì)應(yīng)的索引,進(jìn)而無(wú)需在未完成集合的元素中存儲(chǔ)與元素對(duì)應(yīng)的索引值。在另一個(gè)例子中,在隊(duì)列、鏈表或其他集合數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)未完成io請(qǐng)求或記錄未完成io請(qǐng)求的單元,從而在收到指示io請(qǐng)求處理完成的消息時(shí)基于io請(qǐng)求的標(biāo)識(shí)符高效地獲取io請(qǐng)求。在依然另一個(gè)例子中,所收到的指示io請(qǐng)求處理完成的消息中,包含與io請(qǐng)求相對(duì)應(yīng)的索引。
根據(jù)與未完成io請(qǐng)求io-1100相對(duì)應(yīng)的索引(在本例中,為1),訪問(wèn)計(jì) 數(shù)器c1,并使計(jì)數(shù)器c1遞減。如圖7所示,計(jì)數(shù)器c1的值為10,指示與計(jì)數(shù)器c1相對(duì)應(yīng)的未完成集合的元素?cái)?shù)量為10。隨著未完成io請(qǐng)求io-1100處理完成,計(jì)數(shù)器c1遞減為9,并從未完成集合s1中移除io-1100。
類似地,對(duì)于每個(gè)收到的指示io請(qǐng)求處理完成的消息(圖8,s810),主機(jī)獲取與該io請(qǐng)求對(duì)應(yīng)的索引,根據(jù)索引確定對(duì)應(yīng)的計(jì)數(shù)器和/或未完成集合(圖8,s820),將對(duì)應(yīng)的計(jì)數(shù)器遞減,以及根據(jù)索引將對(duì)應(yīng)的未完成集合中與該io請(qǐng)求對(duì)應(yīng)的單元?jiǎng)h除(圖8,s830)。
繼續(xù)參看圖7,此時(shí)若發(fā)出io請(qǐng)求(例如,標(biāo)識(shí)符為1200的io請(qǐng)求,記為io-1200)(圖6,s610),依據(jù)當(dāng)前索引訪問(wèn)計(jì)數(shù)器c2與未完成集合s2(圖6,s620),使計(jì)數(shù)器c2遞增,并根據(jù)當(dāng)前索引訪問(wèn)未完成集合s2,將與io請(qǐng)求io-1200對(duì)應(yīng)的單元(io-1200,2)插入未完成集合s2(圖6,s630)。以及可選地,與io-1200相關(guān)聯(lián)地存儲(chǔ)當(dāng)前索引的值(在本例中,為2)。
進(jìn)一步地,通過(guò)當(dāng)前索引訪問(wèn)計(jì)數(shù)器和/或未完成集合時(shí),對(duì)計(jì)數(shù)器和/或未完成集合加鎖,使得多個(gè)線程互斥地訪問(wèn)計(jì)數(shù)器和/或未完成集合。然而,無(wú)需對(duì)當(dāng)前索引加鎖。
圖9是根據(jù)本發(fā)明實(shí)施例的檢測(cè)待監(jiān)測(cè)內(nèi)容超時(shí)的示意圖。在時(shí)間進(jìn)入下一時(shí)間段后,執(zhí)行超時(shí)檢測(cè),基于當(dāng)前時(shí)間段所對(duì)應(yīng)的索引訪問(wèn)未完成集合,該未完成集合中的元素為超時(shí)io(參看圖4,步驟s430)。
如圖9所示,當(dāng)主機(jī)的定時(shí)器到時(shí),進(jìn)行io請(qǐng)求超時(shí)檢測(cè)。在本例中,超時(shí)時(shí)間為8秒(即,io請(qǐng)求被發(fā)出后,若8秒鐘后依然沒有接收到指示該io請(qǐng)求處理完成的消息,認(rèn)為該io請(qǐng)求超時(shí)),當(dāng)前索引指向計(jì)數(shù)器c4以及未完成集合s4。在定時(shí)器產(chǎn)生超時(shí)事件時(shí),在計(jì)數(shù)器c4與未完成集合s4中指示的未完成io所經(jīng)歷的時(shí)間為0-2s,在計(jì)數(shù)器c3與未完成集合s3中指示的未完成io所經(jīng)歷的時(shí)間為2-4s,在計(jì)數(shù)器c2與未完成集合s2中指示的未完成io所經(jīng)歷的時(shí)間為4-6s,在計(jì)數(shù)器c1與未完成集合s1中 指示的未完成io所經(jīng)歷的時(shí)間為6-8s,此時(shí)在計(jì)數(shù)器c0與未完成集合s0中指示的未完成io所經(jīng)歷的時(shí)間為8-10s。因而,在定時(shí)器產(chǎn)生超時(shí)事件時(shí),根據(jù)指向計(jì)數(shù)器c4與未完成集合s4的當(dāng)前索引,確定計(jì)數(shù)器c0與未完成集合s0中的元素指示了超時(shí)io(圖10,s1010)。
如圖9所示,當(dāng)前索引為4(定時(shí)器到時(shí)前),隨著定時(shí)器到時(shí),當(dāng)前時(shí)間段進(jìn)入到下一時(shí)間段,而下一時(shí)間段對(duì)應(yīng)的索引為0。通過(guò)索引計(jì)數(shù)器c0發(fā)現(xiàn)計(jì)數(shù)器c0的值為2,可知有2個(gè)未完成io請(qǐng)求的處理時(shí)間已經(jīng)超過(guò)8秒,并進(jìn)而根據(jù)索引0訪問(wèn)未完成集合s0,獲得超時(shí)io的詳細(xì)信息(圖10,s1020)。為處理超時(shí)io請(qǐng)求,可以打印每一個(gè)超時(shí)io請(qǐng)求的具體信息,例如操作碼,訪問(wèn)的第一個(gè)塊的地址和欲訪問(wèn)的塊的數(shù)量等。
在另一個(gè)例子中,若計(jì)數(shù)器c0的值為0,意味著當(dāng)前不存在處理時(shí)間超過(guò)8s的未完成io請(qǐng)求,從而無(wú)需訪問(wèn)未完成集合并獲取超時(shí)io請(qǐng)求信息。
在一個(gè)例子中,超時(shí)時(shí)間為t,而定時(shí)器超時(shí)間隔為t,則提供n=(t/t+1)(向上取整)個(gè)未完成集合,以及在發(fā)生超時(shí)事件時(shí),若當(dāng)前索引為i,則索引為(i+1)modn的未完成集合為進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合。
在又一個(gè)例子中,超時(shí)時(shí)間為t,而定時(shí)器超時(shí)間隔為t,則提供m個(gè)未完成集合(m≥n=(向上取整)(t/t+1)),以及在發(fā)生超時(shí)事件時(shí),若當(dāng)前索引為i,則索引為(i+m-n+1)modm的未完成集合為進(jìn)行超時(shí)監(jiān)測(cè)的未完成集合。
需要指出的是,在上面的例子中,超時(shí)時(shí)間為8秒,而定時(shí)器超時(shí)間隔為2秒,從而在當(dāng)前索引為4時(shí),在未完成集合s0中的未完成io所經(jīng)歷的時(shí)間為8-10秒,而在未完成集合s1中的未完成io所經(jīng)歷的時(shí)間為6-8秒,即在未完成集合s0中的未完成io均已超時(shí),而在未完成集合s1-s4中的未完成io均未超時(shí)。在另一個(gè)例子中,超時(shí)時(shí)間為7秒,而定時(shí)器超時(shí)間隔為3秒,從而在當(dāng)前索引為4時(shí),未完成集合s1中的未完成io所經(jīng)歷的時(shí)間為9-12秒,未完成集合s2中的未完成io集合所經(jīng)歷的時(shí)間為6-9秒,即 未完成集合s1中的所有未完成io均已超時(shí),而未完成io集合s2中的部分未完成io已超時(shí)。在此情況下,根據(jù)本發(fā)明的實(shí)施例,在當(dāng)前索引為4,又產(chǎn)生了超時(shí)事件時(shí),僅將未完成集合s1中的未完成io檢測(cè)為超時(shí),而不對(duì)未完成集合s2進(jìn)行超時(shí)檢測(cè)。從而提高超時(shí)檢測(cè)的效率,而不關(guān)心超時(shí)檢測(cè)的精度。
顯然,計(jì)數(shù)器不是必須的。通過(guò)遍歷未完成集合能夠確定未完成io集合中的元素?cái)?shù)量。
在一個(gè)實(shí)施例中,檢測(cè)超時(shí)io請(qǐng)求后,還更新當(dāng)前索引(圖10,s1030),使當(dāng)前索引與當(dāng)前時(shí)間段相對(duì)應(yīng)。例如,通過(guò)使當(dāng)前索引遞增來(lái)更新當(dāng)前索引。從而隨后發(fā)出io請(qǐng)求時(shí),根據(jù)更新后的當(dāng)前索引(在本例中,為0)訪問(wèn)對(duì)應(yīng)的計(jì)數(shù)器和/或未完成io請(qǐng)求。
在根據(jù)本發(fā)明的實(shí)施例中,為檢測(cè)超時(shí),在定時(shí)器到時(shí)后,先根據(jù)當(dāng)前時(shí)間段確定索引并依據(jù)索引訪問(wèn)計(jì)數(shù)器和/或未完成集合,確定是否存在超時(shí)io請(qǐng)求,并進(jìn)行相應(yīng)處理后,再更新當(dāng)前索引。從而在確定是否存在超時(shí)io請(qǐng)求時(shí),當(dāng)前索引為4,當(dāng)前并發(fā)的發(fā)出io請(qǐng)求的會(huì)引起對(duì)計(jì)數(shù)器c4與未完成集合s4的操作,而不會(huì)干擾針對(duì)計(jì)數(shù)器c0與未完成集合s0的超時(shí)檢測(cè)。
進(jìn)一步地,在更新索引時(shí),無(wú)需對(duì)索引加鎖。只要對(duì)超時(shí)io的檢查發(fā)生在更新索引之前,就無(wú)需通過(guò)加鎖來(lái)確保更新索引與發(fā)出io請(qǐng)求時(shí)使用索引的先后順序。通過(guò)減少鎖操作,將進(jìn)一步降低檢測(cè)超時(shí)io的開銷并提升性能。
可選地,發(fā)出io請(qǐng)求時(shí)的處理、收到指示io請(qǐng)求執(zhí)行完成時(shí)的處理以及定時(shí)器到時(shí)的超時(shí)檢測(cè)可以由多個(gè)線程并行執(zhí)行。即使在多線程執(zhí)行的情況下,在更新索引時(shí),無(wú)需對(duì)索引加鎖。
以上所述,僅是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭 示的技術(shù)內(nèi)容作出些許更動(dòng)或修飾為等同變化的等效實(shí)施例,但凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡(jiǎn)單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。