[發(fā)明專利]基于隊(duì)列的消息交換方法及其裝置有效
| 申請(qǐng)?zhí)枺?/td> | 201610168927.5 | 申請(qǐng)日: | 2016-03-23 |
| 公開(公告)號(hào): | CN107045483B | 公開(公告)日: | 2019-10-18 |
| 發(fā)明(設(shè)計(jì))人: | 王祎磊;伍德斌 | 申請(qǐng)(專利權(quán))人: | 北京憶恒創(chuàng)源科技有限公司 |
| 主分類號(hào): | G06F13/16 | 分類號(hào): | G06F13/16 |
| 代理公司: | 北京卓特專利代理事務(wù)所(普通合伙) 11572 | 代理人: | 段宇 |
| 地址: | 100192 北京市海淀區(qū)西小口*** | 國(guó)省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說(shuō)明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 隊(duì)列 消息 交換 方法 及其 裝置 | ||
本發(fā)明公開了一種基于隊(duì)列的消息交換方法,該方法包括:命令處理方從提交隊(duì)列取出第一命令,對(duì)第一命令進(jìn)行處理,判定第一命令處理是否成功,如果處理成功,依據(jù)完成隊(duì)列的隊(duì)尾指針,用指示第一命令處理成功的信息填充精簡(jiǎn)完成隊(duì)列;如果處理失敗,用指示第一命令處理失敗的錯(cuò)誤信息填充完成隊(duì)列,而用指示第一命令處理失敗的錯(cuò)誤信息的部分填充精簡(jiǎn)完成隊(duì)列;命令發(fā)出方處理精簡(jiǎn)完成隊(duì)列的隊(duì)列條目,判定精簡(jiǎn)完成隊(duì)列的隊(duì)列條目指示的第一命令是否成功,如果判定成功,更新完成隊(duì)列的隊(duì)首指針;如果判定失敗,基于完成隊(duì)列的隊(duì)首指針,從完成隊(duì)列的隊(duì)首取出隊(duì)列條目,并更新完成隊(duì)列的隊(duì)首指針。
技術(shù)領(lǐng)域
本發(fā)明涉及基于隊(duì)列的消息交換方法及其裝置。
背景技術(shù)
設(shè)備之間通過(guò)隊(duì)列交換命令或消息是常用的。命令發(fā)送方將命令插入提交隊(duì)列尾部,命令接收方從隊(duì)列尾部取出命令并處理,將處理結(jié)果插入到完成隊(duì)列尾部,命令發(fā)送方從完成隊(duì)列頭部取出命令處理結(jié)果。通過(guò)隊(duì)列交換命令,能夠在發(fā)送方與接收方直接維護(hù)多個(gè)并發(fā)的命令,并且命令之間的處理速度不必一致。NVMe協(xié)議(參見“NVM ExpressRevision 1.2”,2014年11月3日,通過(guò)引用將其全文合并于本說(shuō)明書)定義了主機(jī)(Host)與設(shè)備(Device)之間交換數(shù)據(jù)的命令與數(shù)據(jù)結(jié)構(gòu)(如圖1所示)。主機(jī)中維護(hù)多個(gè)隊(duì)列,每個(gè)隊(duì)列中可填充多個(gè)命令。主機(jī)與設(shè)備基于隊(duì)列交換數(shù)據(jù)。主機(jī)將命令C填入提交隊(duì)列,設(shè)備從提交隊(duì)列中取得命令C,并按命令C的內(nèi)容進(jìn)行處理,將處理結(jié)果填入完成隊(duì)列。主機(jī)從完成隊(duì)列獲取命令C的處理結(jié)果以知曉命令C的處理完成。
依據(jù)NVMe協(xié)議,在設(shè)備端維護(hù)多個(gè)隊(duì)列的隊(duì)首與隊(duì)尾指針。主機(jī)與設(shè)備都會(huì)更新隊(duì)首與隊(duì)尾指針。主機(jī)向設(shè)備發(fā)送命令時(shí),主機(jī)將命令插入提交隊(duì)列的隊(duì)尾,并更新隊(duì)尾指針。設(shè)備端比較提交隊(duì)列的隊(duì)首指針與隊(duì)尾指針,在二者不同時(shí),確定隊(duì)列中有待處理的命令。設(shè)備端從隊(duì)列中取出命令后,更新隊(duì)首指針。主機(jī)端基于隊(duì)首指針與隊(duì)尾指針,可確定隊(duì)列中是否有空間容納新的命令。
在軟件組件之間、集成電路組件之間以及軟件與硬件之間也使用隊(duì)列交換消息或命令。
發(fā)明內(nèi)容
為了傳遞命令處理結(jié)果的多種可能情況(命令處理成功、命令處理失敗、失敗原因等),在完成隊(duì)列的一個(gè)條目中,需要有足夠大的尺寸以容納多種信息。在NVMe協(xié)議中,定義了完成隊(duì)列條目的大小為16字節(jié)。然而受限于總線寬度或cache line大小,需要多次訪存操作才能獲取一個(gè)完整的完成隊(duì)列條目,影響了隊(duì)列處理速度。
本發(fā)明希望克服訪問(wèn)完成隊(duì)列時(shí),傳輸隊(duì)列條目需要多個(gè)總線周期,訪問(wèn)速度慢;而完成隊(duì)列需要的存儲(chǔ)空間大,大容量存儲(chǔ)器的訪問(wèn)速度也難以提高。通過(guò)本發(fā)明,希望實(shí)現(xiàn)加快隊(duì)列處理速度的目的。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于隊(duì)列的消息交換方法,所述方法包括:命令處理方從提交隊(duì)列取出第一命令,對(duì)第一命令進(jìn)行處理,判定第一命令處理是否成功,如果第一命令處理成功,依據(jù)完成隊(duì)列的隊(duì)尾指針,用指示第一命令處理成功的信息填充精簡(jiǎn)完成隊(duì)列;如果第一命令處理失敗,用指示第一命令處理失敗的錯(cuò)誤信息填充完成隊(duì)列,而用指示第一命令處理失敗的錯(cuò)誤信息的部分填充精簡(jiǎn)完成隊(duì)列;命令發(fā)出方處理精簡(jiǎn)完成隊(duì)列的隊(duì)列條目,判定所述精簡(jiǎn)完成隊(duì)列的隊(duì)列條目指示的第一命令是否成功,如果判定精簡(jiǎn)完成隊(duì)列的所述隊(duì)列條目指示第一命令成功,更新完成隊(duì)列的隊(duì)首指針;如果判定所述精簡(jiǎn)完成隊(duì)列的隊(duì)列條目指示第一命令失敗,基于所述完成隊(duì)列的所述隊(duì)首指針,從所述完成隊(duì)列的隊(duì)首取出隊(duì)列條目,并更新完成隊(duì)列的隊(duì)首指針。
根據(jù)本發(fā)明的一個(gè)實(shí)施方式,進(jìn)一步包括:命令發(fā)出方從取出的完成隊(duì)列的隊(duì)列條目中獲取第一命令處理失敗的信息,并進(jìn)行錯(cuò)誤處理。
根據(jù)本發(fā)明的一個(gè)實(shí)施方式,進(jìn)一步包括:命令發(fā)出方依據(jù)提交隊(duì)列的隊(duì)尾指針指示的位置,向提交隊(duì)列的隊(duì)尾填充第一命令,更新提交隊(duì)列的隊(duì)尾指針。
根據(jù)本發(fā)明的一個(gè)實(shí)施方式,其中,命令發(fā)出方基于精簡(jiǎn)完成隊(duì)列的隊(duì)尾指針和隊(duì)首指針確定精簡(jiǎn)完成隊(duì)列非空,并從精簡(jiǎn)完成隊(duì)列的隊(duì)首取出隊(duì)列條目。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京憶恒創(chuàng)源科技有限公司,未經(jīng)北京憶恒創(chuàng)源科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201610168927.5/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
- 隊(duì)列調(diào)度系統(tǒng)及方法
- 一種從多隊(duì)列節(jié)點(diǎn)獲取消息的方法及系統(tǒng)
- 隊(duì)列請(qǐng)求處理方法和裝置
- 一種隊(duì)列清空方法以及相關(guān)設(shè)備
- 一種基于Linux通用塊層多隊(duì)列的優(yōu)化系統(tǒng)及方法
- 一種分離存儲(chǔ)的隊(duì)列實(shí)現(xiàn)方法及裝置
- 一種數(shù)據(jù)處理方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 一種接口擁塞時(shí)延的計(jì)算方法及裝置
- 一種報(bào)文調(diào)度方法及裝置
- RDMA網(wǎng)絡(luò)下的網(wǎng)卡隊(duì)列創(chuàng)建方法以及裝置





