本技術(shù)涉及存儲,特別是涉及一種nvme設(shè)備與主機(jī)通信的方法、裝置、設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、nvme(nonvolatile?memory?express,非易失性內(nèi)存主機(jī)控制器接口規(guī)范)協(xié)議是一種閃存和下一代固態(tài)驅(qū)動器(solid?state?disk或solid?state?drive,ssd)的全新存儲訪問和傳輸協(xié)議,主要是面向pcie?ssd開發(fā)的一套接口標(biāo)準(zhǔn)。相比傳統(tǒng)ahci標(biāo)準(zhǔn),nvme標(biāo)準(zhǔn)可以帶來多方面的性能提升。
2、在使用nvme設(shè)備的存儲系統(tǒng)中,當(dāng)主機(jī)需要向nvme設(shè)備發(fā)送命令時,會先將命令通過sqe(submission?queue?entry,提交隊(duì)列條目)寫入sq(submission?queue,提交隊(duì)列),然后向nvme設(shè)備控制器發(fā)送消息,nvme設(shè)備控制器將sqe(s)從sq隊(duì)列中讀出,將命令拿到控制器內(nèi)部處理后,將命令處理結(jié)果即cqe(completion?queue?entry,完成隊(duì)列條目)填充到cq(completion?queue,完成隊(duì)列)中,通過中斷通知主機(jī)端,然后主機(jī)端在cq隊(duì)列中提取命令執(zhí)行結(jié)果。
3、在命令執(zhí)行過程中,nvme設(shè)備控制器處理完每一條sqe后都會對應(yīng)生成一條cqe返回到主機(jī)端,主機(jī)需要等待nvme設(shè)備控制器返回的結(jié)果數(shù)據(jù)并逐條處理所有的cqe,過程中會耗費(fèi)較多計算資源,且數(shù)據(jù)處理效率低下,降低存儲系統(tǒng)的整體性能。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本技術(shù)旨在提出一種nvme設(shè)備與主機(jī)通信的方法、裝置、設(shè)備及存儲介質(zhì),以節(jié)省計算資源,提高數(shù)據(jù)處理效率。
2、為達(dá)到上述目的,本技術(shù)的技術(shù)方案如下:
3、本技術(shù)實(shí)施例第一方面提供一種nvme設(shè)備與主機(jī)通信的方法,該方法應(yīng)用于nvme設(shè)備控制器,包括:
4、從主機(jī)端的sq隊(duì)列中獲取至少兩個sqe作為本次待處理的聚合sqe;所述sq隊(duì)列用于存放nvme設(shè)備控制器需要處理的單sqe或聚合sqe;所述聚合sqe為至少兩個具有相對順序的需要一起執(zhí)行的sqe;
5、基于本次待處理的sqe,創(chuàng)建總cqe;所述總cqe用于記錄各個sqe對應(yīng)的命令執(zhí)行結(jié)果;
6、按所述sqe在所述sq隊(duì)列中的順序,解析每個sqe得到對應(yīng)的命令并執(zhí)行,得到對應(yīng)的命令執(zhí)行結(jié)果;
7、在所述總cqe中記錄所有命令執(zhí)行結(jié)果;
8、將所述總cqe返回主機(jī)端,并寫入cq隊(duì)列;所述cq隊(duì)列用于存放所述nvme設(shè)備處理sqe生成的單cqe或總cqe,所述cq隊(duì)列與所述sq隊(duì)列相對應(yīng)。
9、可選地,從主機(jī)端的sq隊(duì)列中獲取至少兩個sqe作為本次待處理的聚合sqe,包括:
10、根據(jù)所述sq隊(duì)列中當(dāng)前讀位置的sqe,確定所述sqe所屬的聚合sqe組中包含的sqe的總數(shù);
11、將所述聚合sqe的總數(shù)與第一閾值進(jìn)行比較;在所述聚合sqe的總數(shù)小于或等于第一閾值的情況下,將所述聚合sqe組作為本次待處理的sqe;
12、在所述聚合sqe的總數(shù)大于所述第一閾值的情況下,從當(dāng)前讀位置的sqe開始,將第一閾值的聚合sqe作為本次待處理的sqe。
13、可選地,基于本次待處理的sqe,創(chuàng)建總cqe,包括:
14、基于本次待處理的sqe的總數(shù),創(chuàng)建一個總cqe;
15、在所述總cqe中記錄:總cqe標(biāo)識符、本次讀取的sqe的總數(shù),本次讀取的sqe所屬的sq隊(duì)列的隊(duì)列標(biāo)識符,提交標(biāo)識符,以及本次讀取的第一個sqe的起始地址。
16、可選地,所述nvme設(shè)備與主機(jī)通信的方法,還包括:
17、在每個命令執(zhí)行完成后,判斷當(dāng)前的命令執(zhí)行結(jié)果為成功還是失?。?/p>
18、在當(dāng)前的命令執(zhí)行結(jié)果為成功的情況下,執(zhí)行以下步驟:判斷所有sqe對應(yīng)的命令是否均執(zhí)行完成;在存在未執(zhí)行的命令的情況下,繼續(xù)執(zhí)行下一條命令;在所有sqe對應(yīng)的命令均執(zhí)行完成,且所有命令執(zhí)行結(jié)果均為成功的情況下,將所述總cqe的失敗標(biāo)識符設(shè)置為空;將所述總cqe返回主機(jī)端,并寫入所述cq隊(duì)列;
19、在當(dāng)前的命令執(zhí)行結(jié)果為失敗的情況下,執(zhí)行以下步驟:停止執(zhí)行下一條命令;獲取當(dāng)前執(zhí)行失敗的命令對應(yīng)的sqe的聚合標(biāo)識符;根據(jù)所述聚合標(biāo)識符,在所述總cqe中記錄對應(yīng)的失敗標(biāo)識符;根據(jù)當(dāng)前執(zhí)行失敗的命令對應(yīng)的sqe,創(chuàng)建對應(yīng)的單cqe;所述單cqe中記錄:錯誤關(guān)聯(lián)信息、所述sqe所屬sq隊(duì)列的隊(duì)列標(biāo)識符、所述sqe的起始地址、錯誤碼、提交標(biāo)識符及sqe標(biāo)識符;將所述總cqe及所述單cqe返回主機(jī)端,并寫入所述cq隊(duì)列。
20、根據(jù)本技術(shù)實(shí)施例的第二方面,提供一種nvme設(shè)備與主機(jī)通信的方法,該方法應(yīng)用于主機(jī)端,包括:
21、創(chuàng)建sq隊(duì)列及對應(yīng)的cq隊(duì)列;所述sq隊(duì)列用于存放nvme設(shè)備控制器需要處理的單sqe或聚合sqe;所述cq隊(duì)列用于存放所述nvme設(shè)備處理sqe生成的單cqe或總cqe;
22、基于至少一個需要nvme設(shè)備控制器執(zhí)行的命令,生成對應(yīng)的sqe,并將所有sqe按照對應(yīng)命令的執(zhí)行順序?qū)懭胨鰏q隊(duì)列;其中,任一sqe為單sqe或聚合sqe組中的一個聚合sqe;
23、從cq隊(duì)列中讀取所述nvme設(shè)備控制器寫入的cqe,解析所述cqe得到至少一個sqe對應(yīng)的命令執(zhí)行結(jié)果;所述cqe為總cqe或單cqe。
24、可選地,基于至少一個需要nvme設(shè)備控制器執(zhí)行的命令,生成對應(yīng)的sqe,包括:
25、在多個命令間具有相對順序的情況下,基于所述多個命令生成至少一個聚合sqe組;
26、在每個聚合sqe中記錄:sqe標(biāo)識符及聚合標(biāo)識符;所述sqe標(biāo)識符用于唯一表示所述聚合sqe對應(yīng)的一條命令;所述聚合標(biāo)識符用于表示所述聚合sqe在所屬的聚合sqe組中的序號;
27、按照所述相對順序,將所有聚合sqe寫入所述sq隊(duì)列。
28、可選地,基于所述多個命令生成至少一個聚合sqe組,包括:
29、將所述多個命令的數(shù)量與第二閾值進(jìn)行比較;
30、在所述多個命令的數(shù)量小于或等于所述第二閾值的情況下,基于所有命令生成一個聚合sqe組;
31、在所述多個命令的數(shù)量大于所述第二閾值的情況下,基于所有命令生成多個聚合sqe組;其中,每個聚合sqe組中聚合sqe的總數(shù)不大于所述第二閾值。
32、根據(jù)本技術(shù)實(shí)施例的第三方面,提供一種nvme設(shè)備與主機(jī)通信的裝置,用于實(shí)現(xiàn)本技術(shù)實(shí)施例的第一方面所提供的nvme設(shè)備與主機(jī)通信的方法,所述裝置包括:
33、第一讀取模塊,被配置為從主機(jī)端的sq隊(duì)列中獲取至少兩個sqe作為本次待處理的聚合sqe;所述sq隊(duì)列用于存放nvme設(shè)備控制器需要處理的單sqe或聚合sqe;所述聚合sqe為至少兩個具有相對順序的需要一起執(zhí)行的sqe;
34、第一記錄模塊,被配置為基于本次待處理的sqe,創(chuàng)建總cqe;所述總cqe用于記錄各個sqe對應(yīng)的命令執(zhí)行結(jié)果;
35、第一處理模塊,按所述sqe在所述sq隊(duì)列中的順序,解析每個sqe得到對應(yīng)的命令并執(zhí)行,得到對應(yīng)的命令執(zhí)行結(jié)果;
36、所述第一記錄模塊,還被配置為在所述總cqe中記錄所有命令執(zhí)行結(jié)果;
37、第一寫入模塊,被配置為將所述總cqe返回主機(jī)端,并寫入cq隊(duì)列;所述cq隊(duì)列用于存放所述nvme設(shè)備處理sqe生成的單cqe或總cqe,所述cq隊(duì)列與所述sq隊(duì)列相對應(yīng)。
38、根據(jù)本技術(shù)實(shí)施例的第四方面,提供一種nvme設(shè)備與主機(jī)通信的裝置,用于實(shí)現(xiàn)本技術(shù)實(shí)施例的第二方面所提供的nvme設(shè)備與主機(jī)通信的方法,所述裝置包括:
39、隊(duì)列創(chuàng)建模塊,被配置為創(chuàng)建sq隊(duì)列及對應(yīng)的cq隊(duì)列;所述sq隊(duì)列用于存放nvme設(shè)備控制器需要處理的單sqe或聚合sqe;所述cq隊(duì)列用于存放所述nvme設(shè)備處理sqe生成的單cqe或總cqe;
40、第二寫入模塊,被配置為基于至少一個需要nvme設(shè)備控制器執(zhí)行的命令,生成對應(yīng)的sqe,并將所有sqe按照對應(yīng)命令的執(zhí)行順序?qū)懭胨鰏q隊(duì)列;其中,任一sqe為單sqe或聚合sqe組中的一個聚合sqe;
41、第二讀取模塊,被配置為從cq隊(duì)列中讀取所述nvme設(shè)備控制器寫入的cqe,解析所述cqe得到至少一個sqe對應(yīng)的命令執(zhí)行結(jié)果;所述cqe為總cqe或單cqe。
42、根據(jù)本技術(shù)實(shí)施例的第五方面,提供一種計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,該計算機(jī)程序被處理器執(zhí)行時,實(shí)現(xiàn)如本技術(shù)實(shí)施例第一方面或第二方面所述的nvme設(shè)備與主機(jī)通信的方法中的步驟。
43、根據(jù)本技術(shù)實(shí)施例的第六方面,提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運(yùn)行的計算機(jī)程序,其特征在于,所述處理器執(zhí)行所述計算機(jī)程序時,實(shí)現(xiàn)如本技術(shù)實(shí)施例第一方面或第二方面所述的nvme設(shè)備與主機(jī)通信的方法中的步驟。
44、采用本技術(shù)所提供的nvme設(shè)備與主機(jī)通信的方法,由nvme設(shè)備控制器從主機(jī)端的sq隊(duì)列中獲取多個sqe作為待處理的sqe,并創(chuàng)建一個總cqe用于記錄各個sqe的處理結(jié)果。對讀取出的sqe進(jìn)行解析獲得對應(yīng)的命令并執(zhí)行,在命令執(zhí)行完成后獲取命令執(zhí)行結(jié)果,并記錄到總cqe中,將總cqe返回到主機(jī)端寫入cq隊(duì)列,供主機(jī)端讀取以進(jìn)行后續(xù)處理。
45、本技術(shù)中,在nvme設(shè)備控制器處理sq隊(duì)列中的sqe時,一次性讀取出多個sqe進(jìn)行處理,并根據(jù)本次處理的所有命令的命令執(zhí)行結(jié)果記錄一個總的cqe,將該總的cqe返回到主機(jī)端。相比于現(xiàn)有的命令處理過程需要逐條讀取sqe執(zhí)行并逐條返回單cqe的方式,本技術(shù)中一次性能夠處理多條sqe,提高了命令處理效率,并且在返回cqe時以一個總cqe的形式一次性返回多條sqe的處理結(jié)果,降低了傳輸、讀取cqe的頻率和數(shù)據(jù)量,從而節(jié)省系統(tǒng)計算資源,降低數(shù)據(jù)操作時延,提升系統(tǒng)的整體性能。