本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種數(shù)據(jù)處理方法和裝置。
背景技術(shù):
隨著用戶數(shù)據(jù)的不斷膨脹,信息技術(shù)的興起。各種通信設(shè)備間的帶寬越來越大。pcie(pci-express)鏈路作為一種節(jié)點(diǎn)內(nèi)主流的高速傳輸協(xié)議被廣泛的應(yīng)用。在不斷提高帶寬的同時,pcie協(xié)議逐步開始從節(jié)點(diǎn)內(nèi)中央處理器(cpu,centralprocessingunit)和外部設(shè)備之間的互聯(lián)協(xié)議中走出來,利用pcie的非透明橋(ntb,nontransparentbridge)技術(shù),pcie協(xié)議可以支持節(jié)點(diǎn)間的高速互聯(lián),互聯(lián)的節(jié)點(diǎn)間通過ntb進(jìn)行地址域的隔離。經(jīng)過ntb的地址映射后,本節(jié)點(diǎn)上的dma引擎通過訪問ntb映射過來的虛擬地址,就可以實(shí)現(xiàn)對對端的節(jié)點(diǎn)上的內(nèi)存的訪問。雖然通過ntb和存儲器直接訪問(dma,directmemoryacess)技術(shù),pcie協(xié)議物理上實(shí)現(xiàn)了直接訪問對端節(jié)點(diǎn)上的內(nèi)存,但是這離高效的節(jié)點(diǎn)間的數(shù)據(jù)交互還有一些距離。
具體來說,由于pcie的遠(yuǎn)程直接數(shù)據(jù)存取rdma(rdma,remotedirectmemoryacess)操作只在發(fā)送節(jié)點(diǎn)上進(jìn)行,因而pcie在與對端進(jìn)行交互時,例如,通過dma引擎訪問對端,或向?qū)Χ税l(fā)送數(shù)據(jù)時,就需要確切的獲取對端節(jié)點(diǎn)上的物理地址,從而實(shí)現(xiàn)在源端的一次rdma操作過程中,就將數(shù)據(jù)rdma到對端節(jié)點(diǎn)上的內(nèi)存。也就是說,在源端向?qū)Χ双@取對端節(jié)點(diǎn)上執(zhí)行rdma操作的物理地址時,還需要在節(jié)點(diǎn)間進(jìn)行多次交互,才能申請到對端節(jié)點(diǎn)上的內(nèi)存。此外,pcie交換器廠商提供的demo軟件一般都采用pcie去模擬一個以太網(wǎng)接口,但是模擬的以太網(wǎng)接口在數(shù)據(jù)傳輸時,往往需要多次的數(shù)據(jù)拷貝,不能充分利用到pcie協(xié)議提供的高帶寬。也就是說,采用現(xiàn)有技術(shù)中所提供的只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作時,將導(dǎo)致數(shù)據(jù)處理效率較低的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種數(shù)據(jù)處理方法和裝置,以至少解決相關(guān)技術(shù)中rdma只能通過底層協(xié)議棧多次交互,多次拷貝來傳輸數(shù)據(jù)的方式執(zhí)行rdma操作所導(dǎo)致的數(shù)據(jù)處理效率較低的問題。
根據(jù)本發(fā)明的一個方面,提供了一種數(shù)據(jù)處理方法,包括:獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量,其中,上述當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行遠(yuǎn)程直接數(shù)據(jù)存取rdma操作的輸入輸出i/o數(shù)據(jù);若上述當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值,則直接在與上述當(dāng) 前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作;若上述當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于上述第一預(yù)定閾值,則通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的上述頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作。
可選地,在直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作之前,還包括:從本地的頁面地址緩存池中直接獲取上述頁面地址,其中,上述頁面地址緩存池用于緩存一個或多個頁面地址。
可選地,在從本地的頁面地址緩存池中直接獲取上述頁面地址之前,包括:檢測上述頁面地址緩存池中緩存的頁面地址數(shù)量;若上述頁面地址數(shù)量小于等于第二預(yù)定閾值,則通過上述數(shù)據(jù)傳輸通道獲取新的頁面地址。
可選地,上述通過上述數(shù)據(jù)傳輸通道獲取新的頁面地址包括:將用于請求獲取上述頁面地址的獲取請求作為待傳輸數(shù)據(jù)通過上述數(shù)據(jù)傳輸通道發(fā)送給上述接收設(shè)備;獲取上述接收設(shè)備發(fā)送的上述頁面地址;添加上述頁面地址到上述頁面地址緩存池中。
可選地,上述通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的上述頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作包括:將上述當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過上述數(shù)據(jù)傳輸通道直接發(fā)送給上述接收設(shè)備,并保存在上述數(shù)據(jù)傳輸通道在上述接收設(shè)備的通道緩存器中,以使上述接收設(shè)備利用上述通道緩存器中的上述當(dāng)前待處理數(shù)據(jù)在上述頁面地址上執(zhí)行上述rdma操作。
可選地,上述接收設(shè)備利用上述通道緩存器中的上述當(dāng)前待處理數(shù)據(jù)在上述頁面地址上執(zhí)行上述rdma操作包括:上述接收設(shè)備將上述通道緩存器中的上述當(dāng)前待處理數(shù)據(jù)拷貝到與上述頁面地址對應(yīng)頁面內(nèi)存中。
可選地,在獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量之前,還包括:在發(fā)送設(shè)備與上述接收設(shè)備之間建立上述數(shù)據(jù)傳輸通道,其中,上述數(shù)據(jù)傳輸通道連接上述發(fā)送設(shè)備中的控制隊(duì)列與上述接收設(shè)備中的環(huán)形隊(duì)列,其中,上述控制隊(duì)列包括用于控制上述環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,上述在發(fā)送設(shè)備與上述接收設(shè)備之間建立上述數(shù)據(jù)傳輸通道包括:在上述控制隊(duì)列及上述環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,上述控制隊(duì)列與上述環(huán)形隊(duì)列中的上述指針?biāo)甘镜奈恢猛阶兓黄渲?,上述指針包括:?duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,上述隊(duì)列尾指針與上述隊(duì)列頭指針之間的數(shù)據(jù)用于表示上述接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);上述隊(duì)列接收指針與上述隊(duì)列尾指針之間的數(shù)據(jù)用于表示上述接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,上述控制隊(duì)列與上述環(huán)形隊(duì)列中的上述指針?biāo)甘镜奈恢猛阶兓ǎ涸谏鲜霭l(fā)送設(shè)備執(zhí)行發(fā)送操作時,上述控制隊(duì)列的上述隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將上述隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降缴鲜鼋邮赵O(shè)備的上述環(huán)形隊(duì)列中,其 中,上述n為大于等于1的自然數(shù);在上述接收設(shè)備執(zhí)行接收操作時,上述環(huán)形隊(duì)列的上述隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將上述隊(duì)列尾指針?biāo)甘镜奈恢猛降缴鲜霭l(fā)送設(shè)備的上述控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);其中,在上述發(fā)送設(shè)備的上述控制隊(duì)列中上述隊(duì)列尾指針移動到上述隊(duì)列頭指針時,更新上述隊(duì)列接收指針的位置。
根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)處理方法,包括:在發(fā)送設(shè)備獲取到的當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值時,接收上述發(fā)送設(shè)備直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作,其中,上述當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行上述rdma操作的輸入輸出i/o數(shù)據(jù);在上述當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于上述第一預(yù)定閾值時,接收通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的上述頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作。
可選地,在接收上述發(fā)送設(shè)備直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作之前,還包括:接收上述發(fā)送設(shè)備發(fā)送的用于請求獲取上述頁面地址的獲取請求;響應(yīng)上述獲取請求發(fā)送上述頁面地址。
可選地,上述通過預(yù)先建立的數(shù)據(jù)傳輸通道在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作包括:接收上述當(dāng)前待處理數(shù)據(jù);將上述待處理數(shù)據(jù)保存在上述數(shù)據(jù)傳輸通道在上述接收設(shè)備的通道緩存器中;將上述通道緩存器中的上述當(dāng)前待處理數(shù)據(jù)一次拷貝到與上述頁面地址對應(yīng)頁面內(nèi)存中。
可選地,還包括:預(yù)先在發(fā)送設(shè)備與上述接收設(shè)備之間建立上述數(shù)據(jù)傳輸通道,其中,上述數(shù)據(jù)傳輸通道連接上述發(fā)送設(shè)備中的控制隊(duì)列與上述接收設(shè)備中的環(huán)形隊(duì)列,其中,上述控制隊(duì)列包括用于控制上述環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,上述在發(fā)送設(shè)備與上述接收設(shè)備之間建立上述數(shù)據(jù)傳輸通道包括:在上述控制隊(duì)列及上述環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,上述控制隊(duì)列與上述環(huán)形隊(duì)列中的上述指針?biāo)甘镜奈恢猛阶兓黄渲?,上述指針包括:?duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,上述隊(duì)列尾指針與上述隊(duì)列頭指針之間的數(shù)據(jù)用于表示上述接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);上述隊(duì)列接收指針與上述隊(duì)列尾指針之間的數(shù)據(jù)用于表示上述接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,上述控制隊(duì)列與上述環(huán)形隊(duì)列中的上述指針?biāo)甘镜奈恢猛阶兓ǎ涸谏鲜霭l(fā)送設(shè)備執(zhí)行發(fā)送操作時,上述控制隊(duì)列的上述隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將上述隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降缴鲜鼋邮赵O(shè)備的上述環(huán)形隊(duì)列中,其中,上述n為大于等于1的自然數(shù);在上述接收設(shè)備執(zhí)行接收操作時,上述環(huán)形隊(duì)列的上述隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將上述隊(duì)列尾指針?biāo)甘镜奈恢猛降缴鲜霭l(fā)送設(shè)備的上述控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);其中,在上述發(fā)送設(shè)備的上述控制隊(duì)列中上述隊(duì)列尾指針移動到上述隊(duì)列頭指針時,更新上述隊(duì)列接 收指針的位置。
根據(jù)本發(fā)明的又一方面,提供了一種數(shù)據(jù)處理裝置,包括:第一獲取單元,用于獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量,其中,上述當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行遠(yuǎn)程直接數(shù)據(jù)存取rdma操作的輸入輸出i/o數(shù)據(jù);第一處理單元,用于在上述當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值時,直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作;第二處理單元,用于在上述當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于上述第一預(yù)定閾值時,通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的上述頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作。
可選地,上述裝置還包括:第二獲取單元,用于在直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作之前,從本地的頁面地址緩存池中直接獲取上述頁面地址,其中,上述頁面地址緩存池用于緩存一個或多個頁面地址。
可選地,上述裝置還包括:檢測單元,用于在從本地的頁面地址緩存池中直接獲取上述頁面地址之前,檢測上述頁面地址緩存池中緩存的頁面地址數(shù)量;第三獲取單元,用于在上述頁面地址數(shù)量小于等于第二預(yù)定閾值時,通過上述數(shù)據(jù)傳輸通道獲取新的頁面地址。
可選地,上述第三獲取單元包括:發(fā)送模塊,用于將用于請求獲取上述頁面地址的獲取請求作為待傳輸數(shù)據(jù)通過上述數(shù)據(jù)傳輸通道發(fā)送給上述接收設(shè)備;獲取模塊,用于獲取上述接收設(shè)備發(fā)送的上述頁面地址;添加模塊,用于添加上述頁面地址到上述頁面地址緩存池中。
可選地,上述第二處理單元包括:處理模塊,用于將上述當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過上述數(shù)據(jù)傳輸通道直接發(fā)送給上述接收設(shè)備,并保存在上述數(shù)據(jù)傳輸通道在上述接收設(shè)備的通道緩存器中,以使上述接收設(shè)備利用上述通道緩存器中的上述當(dāng)前待處理數(shù)據(jù)在上述頁面地址上執(zhí)行上述rdma操作。
可選地,還包括:建立單元,用于在獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量之前,在發(fā)送設(shè)備與上述接收設(shè)備之間建立上述數(shù)據(jù)傳輸通道,其中,上述數(shù)據(jù)傳輸通道連接上述發(fā)送設(shè)備中的控制隊(duì)列與上述接收設(shè)備中的環(huán)形隊(duì)列,其中,上述控制隊(duì)列包括用于控制上述環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,上述建立單元包括:設(shè)置模塊,用于在上述控制隊(duì)列及上述環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,上述控制隊(duì)列與上述環(huán)形隊(duì)列中的上述指針?biāo)甘镜奈恢猛阶兓?;其中,上述指針包括:?duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,上述隊(duì)列尾指針與上述隊(duì)列頭指針之間的數(shù)據(jù)用于表示上述接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);上述隊(duì)列接收指針與上述隊(duì)列尾指針之間的數(shù)據(jù)用于表示上述接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,上述設(shè)置模塊通過以下方式控制上述控制隊(duì)列與上述環(huán)形隊(duì)列中的上述指針?biāo)甘镜奈恢猛阶兓ǎ涸谏鲜霭l(fā)送設(shè)備執(zhí)行發(fā)送操作時,上述控制隊(duì)列的上述隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將上述隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降缴鲜鼋邮赵O(shè)備的上述環(huán)形隊(duì)列中,其中,上述n為大于等于1的自然數(shù);在上述接收設(shè)備執(zhí)行接收操作時,上述環(huán)形隊(duì)列的上述隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將上述隊(duì)列尾指針?biāo)甘镜奈恢猛降缴鲜霭l(fā)送設(shè)備的上述控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);其中,在上述發(fā)送設(shè)備的上述控制隊(duì)列中上述隊(duì)列尾指針移動到上述隊(duì)列頭指針時,更新上述隊(duì)列接收指針的位置。
根據(jù)本發(fā)明的又一方面,提供了一種數(shù)據(jù)處理裝置,包括:第一處理單元,用于在發(fā)送設(shè)備獲取到的當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值時,接收上述發(fā)送設(shè)備直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作,其中,上述當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行上述rdma操作的輸入輸出i/o數(shù)據(jù);第二處理單元,用于在上述當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于上述第一預(yù)定閾值時,接收通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的上述頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作。
可選地,上述裝置還包括:接收單元,用于在接收上述發(fā)送設(shè)備直接在與上述當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行上述當(dāng)前待處理數(shù)據(jù)的上述rdma操作之前,接收上述發(fā)送設(shè)備發(fā)送的用于請求獲取上述頁面地址的獲取請求;發(fā)送單元,用于響應(yīng)上述獲取請求發(fā)送上述頁面地址。
可選地,上述第二處理單元包括:接收模塊,用于接收上述當(dāng)前待處理數(shù)據(jù);保存模塊,用于將上述待處理數(shù)據(jù)保存在上述數(shù)據(jù)傳輸通道在上述接收設(shè)備的通道緩存器中;拷貝模塊,用于將上述通道緩存器中的上述當(dāng)前待處理數(shù)據(jù)拷貝到與上述頁面地址對應(yīng)頁面內(nèi)存中。
通過本發(fā)明,通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式:在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較大時,采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作,而無需每次都通過交互獲取對應(yīng)的頁面地址,從而達(dá)到減少數(shù)據(jù)交互的目的;在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較小時,直接通過數(shù)據(jù)傳輸通道在接收設(shè)備中通過內(nèi)存拷貝完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速的效果。通過根據(jù)不同的數(shù)據(jù)開銷,選擇合理的數(shù)據(jù)處理方式,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實(shí)施例的一種可選的數(shù)據(jù)處理方法的流程圖;
圖2是根據(jù)本發(fā)明實(shí)施例的一種可選的數(shù)據(jù)處理方法的示意圖;
圖3是根據(jù)本發(fā)明實(shí)施例的另一種可選的數(shù)據(jù)處理方法的示意圖;
圖4是根據(jù)本發(fā)明實(shí)施例的一種可選的數(shù)據(jù)處理方法的應(yīng)用示意圖;
圖5是根據(jù)本發(fā)明實(shí)施例的另一種可選的數(shù)據(jù)處理方法的應(yīng)用示意圖;
圖6是根據(jù)本發(fā)明實(shí)施例的又一種可選的數(shù)據(jù)處理方法的應(yīng)用示意圖;
圖7是根據(jù)本發(fā)明實(shí)施例的另一種可選的數(shù)據(jù)處理方法的流程圖;
圖8是根據(jù)本發(fā)明實(shí)施例的一種可選的數(shù)據(jù)處理裝置的示意圖;以及
圖9是根據(jù)本發(fā)明實(shí)施例的另一種可選的數(shù)據(jù)處理裝置的示意圖。
具體實(shí)施方式
下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。
需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。
實(shí)施例1
在本實(shí)施例中提供了一種數(shù)據(jù)處理方法,圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理方法的流程圖,如圖1所示,該流程包括如下步驟:
步驟s102,獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量,其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行遠(yuǎn)程直接數(shù)據(jù)存取rdma操作的輸入輸出i/o數(shù)據(jù);
步驟s104,若當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值,則直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作;
步驟s106,若當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于第一預(yù)定閾值,則通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述數(shù)據(jù)處理方法可以但不限于應(yīng)用于pcie(pci-express)鏈路的節(jié)點(diǎn)通信過程中,發(fā)送設(shè)備在獲取到當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量后,將根據(jù)上述數(shù)據(jù)量選擇不同的數(shù)據(jù)處理方式:在數(shù)據(jù)量小于等于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較小,則可以將當(dāng)前待處理數(shù)據(jù)通過預(yù)先建立的數(shù)據(jù)傳輸通道發(fā)送給接收設(shè)備,以使接收設(shè)備進(jìn)行內(nèi)存拷貝,以完成在頁面地址對應(yīng)的通道緩存上對當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù) 存取rdma操作;在數(shù)據(jù)量大于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較大,則可以在獲取目的節(jié)點(diǎn)上的頁面地址后,直接在該頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行rdma操作的輸入輸出i/o數(shù)據(jù)。通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低。
需要說明的是,由于一次發(fā)送請求并接收到請求響應(yīng)的交互時長固定,如果一次傳輸?shù)臄?shù)據(jù)量較小時,顯然將使得數(shù)據(jù)傳輸通道的利用率變低,因而,在本實(shí)施例中,當(dāng)數(shù)據(jù)量(即開銷)較小時,就可以直接通過上述數(shù)據(jù)傳輸通道將當(dāng)前待處理數(shù)據(jù)傳輸給接收設(shè)備,以使接收設(shè)備通過一次內(nèi)存拷貝完成數(shù)據(jù)處理,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速,而無需預(yù)先獲取執(zhí)行rdma操作的頁面地址,也避免了對數(shù)據(jù)的多次拷貝過程。也就是說,當(dāng)數(shù)據(jù)量較小時,數(shù)據(jù)的處理時長將根據(jù)數(shù)據(jù)的拷貝時長決定。進(jìn)一步,當(dāng)數(shù)據(jù)量(即開銷)較大時,執(zhí)行拷貝所需的時間很長,因而,則采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,在直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作之前,還需獲取頁面地址,其中,上述頁面地址的獲取方式可以包括但不限于以下至少之一:通過數(shù)據(jù)傳輸通道向接收設(shè)備發(fā)送用于獲取頁面地址的獲取請求、從本地的頁面地址緩存池中直接獲取已緩存的頁面地址。
可選地,在本實(shí)施例中,上述頁面地址緩存池中的頁面地址可以通過以下方式獲?。簷z測頁面地址緩存池中緩存的頁面地址數(shù)量;若頁面地址數(shù)量小于等于第二預(yù)定閾值,則通過數(shù)據(jù)傳輸通道獲取新的頁面地址。
需要說明的是,在本實(shí)施例中,上述頁面地址緩存池將根據(jù)當(dāng)前的緩存量,對池中的頁面地址進(jìn)行及時添加更新。從而實(shí)現(xiàn)在數(shù)據(jù)量較大時,避免每次都向接收設(shè)備請求獲取頁面地址所造成的處理延時的問題。進(jìn)一步,在獲取新的頁面地址添加到上述頁面地址緩存池時,并不影響對當(dāng)前待處理數(shù)據(jù)正常的rdma操作,也就是說,二者可以異步同時進(jìn)行,從而進(jìn)一步實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
可選地,在本實(shí)施例中,上述數(shù)據(jù)傳輸通道可以但不限于是基于直接訪問對端內(nèi)存的消息,在節(jié)點(diǎn)之間(如發(fā)送設(shè)備和接收設(shè)備之間)建立的跨節(jié)點(diǎn)通信通道。其中,上述跨節(jié)點(diǎn)建立的上述數(shù)據(jù)傳輸通道可以但不限于是基于兩側(cè)的數(shù)據(jù)隊(duì)列建立。具體而言,在接收設(shè)備設(shè)置一個環(huán)形隊(duì)列,在發(fā)送設(shè)備設(shè)置一個用于控制環(huán)形隊(duì)列控制隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。也就是說,通過直接控制發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列,實(shí)現(xiàn)對當(dāng)前待處理數(shù)據(jù)的傳輸控制。例如,同步更新發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列中的數(shù)據(jù)指針?biāo)甘镜奈恢茫赃_(dá)到準(zhǔn)確控制當(dāng)前待處理數(shù)據(jù)的傳輸狀態(tài)。
通過本申請?zhí)峁┑膶?shí)施例,通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式:在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較大時,采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作,而無需每次都通過交互獲取對應(yīng)的頁面地址,從而達(dá)到減少數(shù)據(jù)交互的目的;在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較小時,直接通過數(shù)據(jù)傳輸通道在接收設(shè)備中通過內(nèi)存拷貝完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速的效果。通過根據(jù)不同的數(shù)據(jù)開銷,選擇合理的數(shù)據(jù)處理方式,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,在直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作之前,還包括:
s1,從本地的頁面地址緩存池中直接獲取頁面地址,其中,頁面地址緩存池用于緩存一個或多個頁面地址。
可選地,在本實(shí)施例中,上述頁面地址緩存池可以但不限于根據(jù)不同的業(yè)務(wù)(也稱之為應(yīng)用)設(shè)置多個不同的頁面地址緩存池。如圖2所示,可以劃分為頁面地址緩存池202-1至頁面地址緩存池202-n。
可選地,在本實(shí)施例中,上述頁面地址緩存池中的頁面地址可以但不限于在由對端(即接收設(shè)備)獲取后,添加更新到本地頁面地址緩存池中。其中,頁面地址緩存池獲取頁面地址的方式可以包括但不限于以下至少之一:節(jié)點(diǎn)1檢測到緩存量低于預(yù)定閾值時,通過數(shù)據(jù)傳輸通道向節(jié)點(diǎn)2請求補(bǔ)充頁面地址;節(jié)點(diǎn)2通過數(shù)據(jù)傳輸通道主動按照預(yù)定周期為節(jié)點(diǎn)1補(bǔ)充新的頁面地址。
具體結(jié)合以下示例進(jìn)行說明,如圖2所示,發(fā)送設(shè)備以節(jié)點(diǎn)1為例,接收設(shè)備以節(jié)點(diǎn)2為例,如步驟s206-s208,當(dāng)節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送數(shù)據(jù)時,可以直接向頁面地址緩存池申請獲取頁面地址而無需向節(jié)點(diǎn)2發(fā)送申請獲取的請求,從而減少節(jié)點(diǎn)1每次獲取頁面地址的時間,進(jìn)而達(dá)到減少處理延時的效果。
進(jìn)一步,如步驟s202-s204,上述節(jié)點(diǎn)1為對端節(jié)點(diǎn)2可以設(shè)置多個頁面地址緩存池,如頁面地址緩存池202-1至頁面地址緩存池202-n。當(dāng)檢測到一個緩存池中的緩存量低于預(yù)定閾值時,則可以通過數(shù)據(jù)傳輸通道向?qū)Χ斯?jié)點(diǎn)2發(fā)送獲取請求,以實(shí)現(xiàn)由節(jié)點(diǎn)2為節(jié)點(diǎn)1補(bǔ)充新的頁面地址。
需要說明的是,在本示例中,上述節(jié)點(diǎn)1獲取頁面地址的過程(即步驟s202-s204)與頁面地址緩存池獲取頁面地址的過程(即步驟s206-s208)并不限于如圖所示的順序,上述兩個過程可以但不限異步同時進(jìn)行,本實(shí)施例中對此不作任何限定。
通過本申請?zhí)峁┑膶?shí)施例,通過在本地設(shè)置頁面地址緩存池,以使發(fā)送設(shè)備可以直接從本地獲取頁面地址,并直接在頁面地址上進(jìn)行rdma操作,從而達(dá)到減少對待處理 數(shù)據(jù)的處理延時。
作為一種可選的方案,在從本地的頁面地址緩存池中直接獲取所述頁面地址之前,包括:
s1,檢測頁面地址緩存池中緩存的頁面地址數(shù)量;
s2,若頁面地址數(shù)量小于等于第二預(yù)定閾值,則通過數(shù)據(jù)傳輸通道獲取新的頁面地址。
可選地,在本實(shí)施例中,上述第二預(yù)定閾值可以但不限于根據(jù)不同的應(yīng)用場景設(shè)置為不同取值。其中,節(jié)點(diǎn)1(即發(fā)送設(shè)備)可以為節(jié)點(diǎn)2設(shè)置多個頁面地址緩存池,可以設(shè)置一個第二預(yù)定閾值,即檢測所有頁面地址緩存池中頁面地址的數(shù)量的總量是否滿足第二預(yù)定閾值;也可以為每個頁面地址緩存池設(shè)置不同取值的第二預(yù)定閾值,即分別檢測各個頁面地址緩存池中頁面地址的數(shù)量是否滿足對應(yīng)的第二預(yù)定閾值,本實(shí)施例中對此不作任何限定。
可選地,在本實(shí)施例中,通過數(shù)據(jù)傳輸通道獲取新的頁面地址包括:s22,將用于請求獲取頁面地址的獲取請求作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道發(fā)送給接收設(shè)備;s24,獲取接收設(shè)備發(fā)送的頁面地址;s26,添加頁面地址到頁面地址緩存池中。
具體如圖2所示,當(dāng)檢測到頁面地址緩存池中的頁面地址數(shù)量較小時,可以執(zhí)行步驟s202-s204,向?qū)Χ斯?jié)點(diǎn)獲取頁面地址進(jìn)行補(bǔ)充。具體過程可以參見上述示例,本示例在此不再贅述。
通過本申請?zhí)峁┑膶?shí)施例,通過實(shí)時檢測頁面地址緩存池中的頁面地址的數(shù)量,實(shí)現(xiàn)對頁面地址緩存池中的頁面地址的及時補(bǔ)充,從而保證在當(dāng)前待處理數(shù)據(jù)正常執(zhí)行rdma操作的同時,還可以及時緩存新的頁面地址,進(jìn)一步實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作包括:
s1,將當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道直接發(fā)送給接收設(shè)備,并保存在數(shù)據(jù)傳輸通道在接收設(shè)備的通道緩存器中,以使接收設(shè)備利用通道緩存器中的當(dāng)前待處理數(shù)據(jù)在頁面地址上執(zhí)行rdma操作。
可選地,在本實(shí)施例中,在執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作時,還可以不獲取確切的頁面地址,將當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道直接發(fā)送給接收設(shè)備,并保存在接收設(shè)備的通道緩存器中,接收設(shè)備的應(yīng)用會直接從上述通道緩存器中將當(dāng)前待處理數(shù)據(jù)讀取出來并以此拷貝到對應(yīng)的頁面內(nèi)存中,進(jìn)行rdma操作。
可選地,在本實(shí)施例中,接收設(shè)備利用通道緩存器中的當(dāng)前待處理數(shù)據(jù)在頁面地址上執(zhí)行rdma操作包括:s12,接收設(shè)備將通道緩存器中的當(dāng)前待處理數(shù)據(jù)拷貝到與頁面 地址對應(yīng)頁面內(nèi)存中。
通過本申請?zhí)峁┑膶?shí)施例,在數(shù)據(jù)量較小時,利用數(shù)據(jù)傳輸通道的通道緩存,實(shí)現(xiàn)直接在接收設(shè)備中完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而達(dá)到提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,在獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量之前,還包括:
s1,在發(fā)送設(shè)備與接收設(shè)備之間建立數(shù)據(jù)傳輸通道,其中,數(shù)據(jù)傳輸通道連接發(fā)送設(shè)備中的控制隊(duì)列與接收設(shè)備中的環(huán)形隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,在本實(shí)施例中,在發(fā)送設(shè)備與接收設(shè)備之間建立數(shù)據(jù)傳輸通道包括:
s12,在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓?/p>
其中,上述指針包括:隊(duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,隊(duì)列尾指針與隊(duì)列頭指針之間的數(shù)據(jù)用于表示接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);隊(duì)列接收指針與隊(duì)列尾指針之間的數(shù)據(jù)用于表示接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,在本實(shí)施例中,在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置隊(duì)列頭指針head、隊(duì)列尾指針tail及隊(duì)列接收指針recv_tail,通過上述指針?biāo)甘镜奈恢玫淖兓?,?shí)現(xiàn)對待傳輸數(shù)據(jù)的傳輸控制。
需要說明的是,發(fā)送設(shè)備的新消息采用加入到頭部的方式進(jìn)行,接收設(shè)備從尾部開始接收。發(fā)送設(shè)備判定當(dāng)head等于tail時,則隊(duì)列為空,當(dāng)head+1等于recv_tail時,則隊(duì)列為滿。
通過本申請?zhí)峁┑膶?shí)施例,通過在發(fā)送和接收兩側(cè)分別建立對應(yīng)的數(shù)列,實(shí)現(xiàn)基于數(shù)列建立數(shù)據(jù)傳輸通道,以實(shí)現(xiàn)對待處理數(shù)據(jù)的靈活傳輸控制。
作為一種可選的方案,控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓ǎ?/p>
s1,在發(fā)送設(shè)備執(zhí)行發(fā)送操作時,控制隊(duì)列的隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降浇邮赵O(shè)備的環(huán)形隊(duì)列中,其中,n為大于等于1的自然數(shù);
s2,在接收設(shè)備執(zhí)行接收操作時,環(huán)形隊(duì)列的隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將隊(duì)列尾指針?biāo)甘镜奈恢猛降桨l(fā)送設(shè)備的控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);
其中,在發(fā)送設(shè)備的控制隊(duì)列中隊(duì)列尾指針移動到隊(duì)列頭指針時,更新隊(duì)列接收指針的位置。
具體結(jié)合以下示例進(jìn)行說明,如圖3所示,圖3所示的節(jié)點(diǎn)1和節(jié)點(diǎn)2之間建立的跨節(jié)點(diǎn)數(shù)據(jù)傳輸通道是基于對數(shù)據(jù)隊(duì)列的控制,具體的交互流程如下:
s1,節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送消息時,將消息數(shù)據(jù)寫入控制隊(duì)列后,將控制隊(duì)列的指針head增加,例如,指針head向前移動5個字節(jié),并將指針head所指示的位置同步給節(jié)點(diǎn)2;
s2,節(jié)點(diǎn)2收到節(jié)點(diǎn)1的中斷信號或者輪詢到指針head變化時,進(jìn)行消息處理,將消息交給節(jié)點(diǎn)2中的應(yīng)用模塊處理。消息處理后,節(jié)點(diǎn)2將環(huán)形隊(duì)列的指針tail增加,例如,指針tail向前移動2個數(shù)據(jù)字節(jié),則將指針tail所指示的位置同步給節(jié)點(diǎn)1;
s3,節(jié)點(diǎn)1收到節(jié)點(diǎn)2的中斷信號或者輪詢到指針tail變化時,說明已發(fā)送待確認(rèn)的隊(duì)列里有數(shù)據(jù),節(jié)點(diǎn)1處理已發(fā)送待確認(rèn)隊(duì)列里的消息,通知節(jié)點(diǎn)1中的應(yīng)用模塊消息處理完成,則節(jié)點(diǎn)1將更新指針recv_tail的位置,即釋放指針recv_tail的當(dāng)前位置。
需要說明的是,圖3所示的實(shí)線表示在本側(cè)執(zhí)行處理后得到的位置,虛線表示在對側(cè)執(zhí)行處理后同步得到的位置。
通過本申請?zhí)峁┑膶?shí)施例,同步兩側(cè)隊(duì)列中指針?biāo)甘镜奈恢?,從而?shí)現(xiàn)準(zhǔn)確控制所傳輸?shù)臄?shù)據(jù)的傳輸狀態(tài),達(dá)到作為數(shù)據(jù)傳輸通道準(zhǔn)確完成數(shù)據(jù)傳輸?shù)哪康摹?/p>
可選地,在本實(shí)施例中,上述數(shù)據(jù)處理方法可以但不限于應(yīng)用于如圖4所示的系統(tǒng)中,系統(tǒng)中位于發(fā)送設(shè)備的通信模塊402分別與對應(yīng)的業(yè)務(wù)模塊1至業(yè)務(wù)模塊n相連,位于接收設(shè)備的通信模塊404也分別與對應(yīng)的業(yè)務(wù)模塊1至業(yè)務(wù)模塊n相連,發(fā)送設(shè)備和接收設(shè)備通過網(wǎng)絡(luò)406實(shí)現(xiàn)rdma操作。
作為一種可選的實(shí)施方式,如圖5所示的雙節(jié)點(diǎn)系統(tǒng),節(jié)點(diǎn)1和節(jié)點(diǎn)2通過pcie鏈路直連。節(jié)點(diǎn)間通過ntb(non-transport)非透明橋進(jìn)行pcie的地址域隔離。使用節(jié)點(diǎn)上的cpu帶的dma引擎,這個dma引擎可以通過pcie交換網(wǎng)絡(luò)直接訪問其它節(jié)點(diǎn)上的內(nèi)存。
在系統(tǒng)上電時,節(jié)點(diǎn)1和節(jié)點(diǎn)2使用事先約定好的固定地址的訪問進(jìn)行訪問,獲取對端的跨節(jié)點(diǎn)消息隊(duì)列的狀態(tài)。各個業(yè)務(wù)模塊會向通信模塊注冊回調(diào)函數(shù),注冊的回調(diào)函數(shù)包含:
1)業(yè)務(wù)模塊對應(yīng)的消息處理函數(shù)將執(zhí)行以下步驟:
s1,當(dāng)通信模塊收到目的地是該業(yè)務(wù)模塊(通過模塊號或者端口號來區(qū)分)時,調(diào)用業(yè)務(wù)模塊注冊的消息處理函數(shù)處理消息接收。
2)業(yè)務(wù)模塊的頁面內(nèi)存申請、釋放函數(shù)將執(zhí)行以下步驟:
s1,通信模塊會調(diào)用業(yè)務(wù)模塊的頁面內(nèi)存申請函數(shù)申請業(yè)務(wù)模塊的內(nèi)存,并填充到對端節(jié)點(diǎn)上的頁面地址緩存池中。當(dāng)對端節(jié)點(diǎn)故障或者離線時,通信模塊會調(diào)用業(yè)務(wù)模塊的頁面釋放函數(shù)釋放分配到目的節(jié)點(diǎn)上的內(nèi)存。
3)消息發(fā)送結(jié)果通知函數(shù)將執(zhí)行以下步驟:
s1,消息發(fā)送給對端,對端回了響應(yīng)后,通信模塊會調(diào)用業(yè)務(wù)模塊注冊的消息發(fā)送結(jié)果通知函數(shù)來通知業(yè)務(wù)模塊,消息已經(jīng)送達(dá)。
業(yè)務(wù)模塊注冊成功回調(diào)函數(shù),通信模塊完成節(jié)點(diǎn)間的信息交互后,一次消息的交互過程如下:
s1,業(yè)務(wù)模塊1調(diào)用通信模塊的接口向?qū)Χ斯?jié)點(diǎn)上的業(yè)務(wù)模塊2發(fā)送消息;
s2,通信模塊接收到業(yè)務(wù)模塊1的消息,根據(jù)本端保存的對端的隊(duì)列信息,將消息發(fā)送到對端節(jié)點(diǎn)上的消息內(nèi)存中;
s3,累計(jì)發(fā)送1個或者多個消息后,待發(fā)送隊(duì)列為空時,節(jié)點(diǎn)1上的通信模塊更新節(jié)點(diǎn)2上隊(duì)列的head指針;
s4,節(jié)點(diǎn)2檢測到head指針變化,將隊(duì)列中的消息拷貝出來,根據(jù)消息的目的模塊,交給業(yè)務(wù)模塊2進(jìn)行處理;
s5,節(jié)點(diǎn)2上的接收隊(duì)列處理為空的時候,節(jié)點(diǎn)2更新節(jié)點(diǎn)1上的tail指針;
s6,節(jié)點(diǎn)1檢測到tail指針變化時,處理節(jié)點(diǎn)1上的已發(fā)送待確認(rèn)隊(duì)列,直到隊(duì)列為空,更新recv_tail指針。
作為另一種可選的實(shí)施方式,如圖6所示的多節(jié)點(diǎn)系統(tǒng),節(jié)點(diǎn)1和節(jié)點(diǎn)7通過pcie交換機(jī)進(jìn)行連接。為了保持冗余,防止單點(diǎn)故障,pcie交換機(jī)通常采用冗余的雙星架構(gòu)進(jìn)行配置。每個節(jié)點(diǎn)出兩條鏈路分別連接到兩臺pcie交換機(jī)。本實(shí)施例中以單鏈路的情況為例進(jìn)行具體描述。節(jié)點(diǎn)間通過ntb(non-transport)非透明橋進(jìn)行pcie的地址域隔離,pcie交換機(jī)會為每個節(jié)點(diǎn)分配不同的地址域。使用pcie交換器上帶的dma引擎進(jìn)行rdma操作,這個dma引擎可以通過pcie交換網(wǎng)絡(luò)直接訪問其它節(jié)點(diǎn)上的內(nèi)存。
節(jié)點(diǎn)間使用帶外(以太網(wǎng))鏈路和集群內(nèi)的其它節(jié)點(diǎn)進(jìn)行信息交互,獲取各個節(jié)點(diǎn)上跨節(jié)點(diǎn)的生產(chǎn)者消費(fèi)者隊(duì)列的地址信息,以及節(jié)點(diǎn)的狀態(tài)。各個業(yè)務(wù)模塊會向通信模塊注冊回調(diào)函數(shù),注冊的回調(diào)函數(shù)包含:
1)業(yè)務(wù)模塊對應(yīng)的消息處理函數(shù)將執(zhí)行以下步驟:
s1,當(dāng)通信模塊收到目的地是該業(yè)務(wù)模塊(通過模塊號或者端口號來區(qū)分)時,調(diào)用業(yè)務(wù)模塊注冊的消息處理函數(shù)處理消息接收。
2)業(yè)務(wù)模塊的頁面內(nèi)存申請、釋放函數(shù)執(zhí)行以下步驟:
s1,通信模塊會調(diào)用業(yè)務(wù)模塊的頁面內(nèi)存申請函數(shù)申請業(yè)務(wù)模塊的內(nèi)存,并填充到對端節(jié)點(diǎn)上的頁面內(nèi)存緩沖區(qū),圖3中的頁面池。當(dāng)對端節(jié)點(diǎn)故障或者離線時,通信模塊會調(diào)用業(yè)務(wù)模塊的頁面釋放函數(shù)釋放分配到目的節(jié)點(diǎn)上的內(nèi)存。
3)消息發(fā)送結(jié)果通知函數(shù)執(zhí)行以下步驟:
s1,消息發(fā)送給對端,對端回了響應(yīng)后,通信模塊會調(diào)用業(yè)務(wù)模塊注冊的消息發(fā)送結(jié)果通知函數(shù)來通知業(yè)務(wù)模塊,消息已經(jīng)送達(dá)。
業(yè)務(wù)模塊注冊成功回調(diào)函數(shù),通信模塊完成節(jié)點(diǎn)間的信息交互后,一次帶頁面的消息交互過程如下:
s1,節(jié)點(diǎn)1上的業(yè)務(wù)模塊1調(diào)用通信模塊的接口向節(jié)點(diǎn)7上的業(yè)務(wù)模塊2發(fā)送帶頁面數(shù)據(jù)的消息;
s2,通信模塊接收到業(yè)務(wù)模塊1的消息,向本地保存的節(jié)點(diǎn)7上的業(yè)務(wù)模塊2的頁面地址緩存池申請頁面地址;
s3,將頁面數(shù)據(jù)寫到對端的頁面內(nèi)存,并將頁面地址,消息發(fā)送到對端節(jié)點(diǎn)上的消息內(nèi)存中;
s4,累計(jì)發(fā)送1個或者多個消息后,待發(fā)送隊(duì)列為空時,節(jié)點(diǎn)1上的通信模塊更新節(jié)點(diǎn)7上隊(duì)列的head指針;
s5,節(jié)點(diǎn)7檢測到head指針變化,將隊(duì)列中的消息拷貝出來,根據(jù)消息的目的模塊,交給業(yè)務(wù)模塊2進(jìn)行處理;
s6,節(jié)點(diǎn)7上的接收隊(duì)列處理為空的時候,節(jié)點(diǎn)7更新節(jié)點(diǎn)1上的tail指針;
s7,節(jié)點(diǎn)1檢測到tail指針變化時,處理節(jié)點(diǎn)1上的已發(fā)送待確認(rèn)隊(duì)列,直到隊(duì)列為空,更新recv_tail指針。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述的方法。
實(shí)施例2
在本實(shí)施例中提供了一種數(shù)據(jù)處理方法,圖7是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理方法的流程圖,如圖7所示,該流程包括如下步驟:
s702,在發(fā)送設(shè)備獲取到的當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值時,接收發(fā)送設(shè)備直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作,其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行rdma操作的輸入輸出i/o數(shù)據(jù);
s704,在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于第一預(yù)定閾值時,接收通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述數(shù)據(jù)處理方法可以但不限于應(yīng)用于pcie(pci-express)鏈路的節(jié)點(diǎn)通信過程中,發(fā)送設(shè)備在獲取到當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量后,將根據(jù)上述數(shù)據(jù)量選擇不同的數(shù)據(jù)處理方式:在數(shù)據(jù)量小于等于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較小,則可以將當(dāng)前待處理數(shù)據(jù)通過預(yù)先建立的數(shù)據(jù)傳輸通道發(fā)送給接收設(shè)備,以使接收設(shè)備進(jìn)行內(nèi)存拷貝,以完成在頁面地址對應(yīng)的通道緩存上對當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作;在數(shù)據(jù)量大于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較大,則可以在獲取目的節(jié)點(diǎn)上的頁面地址后,直接在該頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行rdma操作的輸入輸出i/o數(shù)據(jù)。通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低。
需要說明的是,由于一次發(fā)送請求并接收到請求響應(yīng)的交互時長固定,如果一次傳輸?shù)臄?shù)據(jù)量較小時,顯然將使得數(shù)據(jù)傳輸通道的利用率變低,因而,在本實(shí)施例中,當(dāng)數(shù)據(jù)量(即開銷)較小時,就可以直接通過上述數(shù)據(jù)傳輸通道將當(dāng)前待處理數(shù)據(jù)傳輸給接收設(shè)備,以使接收設(shè)備通過一次內(nèi)存拷貝完成數(shù)據(jù)處理,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速,而無需預(yù)先獲取執(zhí)行rdma操作的頁面地址,也避免了對數(shù)據(jù)的多次拷貝過程。也就是說,當(dāng)數(shù)據(jù)量較小時,數(shù)據(jù)的處理時長將根據(jù)數(shù)據(jù)的拷貝時長決定。進(jìn)一步,當(dāng)數(shù)據(jù)量(即開銷)較大時,執(zhí)行拷貝所需的時間很長,因而,則采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述數(shù)據(jù)傳輸通道可以但不限于是基于直接訪問對端內(nèi)存的消息,在節(jié)點(diǎn)之間(如發(fā)送設(shè)備和接收設(shè)備之間)建立的跨節(jié)點(diǎn)通信通道。其中,上述跨節(jié)點(diǎn)建立的上述數(shù)據(jù)傳輸通道可以但不限于是基于兩側(cè)的數(shù)據(jù)隊(duì)列建立。具體而言,在接收設(shè)備設(shè)置一個環(huán)形隊(duì)列,在發(fā)送設(shè)備設(shè)置一個用于控制環(huán)形隊(duì)列控制隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。也就是說,通過直接控制發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列,實(shí)現(xiàn)對當(dāng)前待處理數(shù)據(jù)的傳輸控制。例如,同步更新發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列中的數(shù)據(jù)指針?biāo)甘镜奈恢?,以達(dá)到準(zhǔn)確控制當(dāng)前待處理數(shù)據(jù)的傳輸狀態(tài)。
通過本申請?zhí)峁┑膶?shí)施例,通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式:在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較大時,采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作,而無需每次都通過交互獲取對應(yīng)的頁面地址,從而達(dá)到減少數(shù)據(jù)交互的 目的;在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較小時,直接通過數(shù)據(jù)傳輸通道在接收設(shè)備中通過內(nèi)存拷貝完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速的效果。通過根據(jù)不同的數(shù)據(jù)開銷,選擇合理的數(shù)據(jù)處理方式,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,在接收發(fā)送設(shè)備直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作之前,還包括:
s1,接收發(fā)送設(shè)備發(fā)送的用于請求獲取頁面地址的獲取請求;
s2,響應(yīng)獲取請求發(fā)送頁面地址。
通過本申請?zhí)峁┑膶?shí)施例,響應(yīng)發(fā)送設(shè)備發(fā)送的獲取請求,向發(fā)送設(shè)備發(fā)送頁面地址,從而保證在當(dāng)前待處理數(shù)據(jù)正常執(zhí)行rdma操作的同時,還可以及時向發(fā)送設(shè)備緩存新的頁面地址,進(jìn)一步實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,通過預(yù)先建立的數(shù)據(jù)傳輸通道在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作包括:
s1,接收當(dāng)前待處理數(shù)據(jù);
s2,將待處理數(shù)據(jù)保存在數(shù)據(jù)傳輸通道在接收設(shè)備的通道緩存器中;
s3,將通道緩存器中的當(dāng)前待處理數(shù)據(jù)一次拷貝到與頁面地址對應(yīng)頁面內(nèi)存中。
可選地,在本實(shí)施例中,在執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作時,還可以不獲取確切的頁面地址,將當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道直接發(fā)送給接收設(shè)備,并保存在接收設(shè)備的通道緩存器中,接收設(shè)備的應(yīng)用會直接從上述通道緩存器中將當(dāng)前待處理數(shù)據(jù)讀取出來并以此拷貝到對應(yīng)的頁面內(nèi)存中,進(jìn)行rdma操作。
通過本申請?zhí)峁┑膶?shí)施例,在數(shù)據(jù)量較小時,利用數(shù)據(jù)傳輸通道的通道緩存,實(shí)現(xiàn)直接在接收設(shè)備中完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而達(dá)到提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,還包括:
s1,預(yù)先在發(fā)送設(shè)備與接收設(shè)備之間建立數(shù)據(jù)傳輸通道,其中,數(shù)據(jù)傳輸通道連接發(fā)送設(shè)備中的控制隊(duì)列與接收設(shè)備中的環(huán)形隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,在本實(shí)施例中,在發(fā)送設(shè)備與接收設(shè)備之間建立數(shù)據(jù)傳輸通道包括:
s1,在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓?/p>
其中,指針包括:隊(duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,隊(duì)列尾指針與隊(duì)列頭指針之間的數(shù)據(jù)用于表示接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);隊(duì)列接收指針與隊(duì)列尾指針之間的數(shù)據(jù)用于表示接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,在本實(shí)施例中,在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置隊(duì)列頭指針head、隊(duì)列尾指針tail及隊(duì)列接收指針recv_tail,通過上述指針?biāo)甘镜奈恢玫淖兓瑢?shí)現(xiàn)對待傳輸數(shù)據(jù)的傳輸控制。
需要說明的是,發(fā)送設(shè)備的新消息采用加入到頭部的方式進(jìn)行,接收設(shè)備從尾部開始接收。發(fā)送設(shè)備判定當(dāng)head等于tail時,則隊(duì)列為空,當(dāng)head+1等于recv_tail時,則隊(duì)列為滿。
通過本申請?zhí)峁┑膶?shí)施例,通過在發(fā)送和接收兩側(cè)分別建立對應(yīng)的數(shù)列,實(shí)現(xiàn)基于數(shù)列建立數(shù)據(jù)傳輸通道,以實(shí)現(xiàn)對待處理數(shù)據(jù)的靈活傳輸控制。
作為一種可選的方案,控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓ǎ?/p>
s1,在發(fā)送設(shè)備執(zhí)行發(fā)送操作時,控制隊(duì)列的隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降浇邮赵O(shè)備的環(huán)形隊(duì)列中,其中,n為大于等于1的自然數(shù);
s2,在接收設(shè)備執(zhí)行接收操作時,環(huán)形隊(duì)列的隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將隊(duì)列尾指針?biāo)甘镜奈恢猛降桨l(fā)送設(shè)備的控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);
其中,在發(fā)送設(shè)備的控制隊(duì)列中隊(duì)列尾指針移動到隊(duì)列頭指針時,更新隊(duì)列接收指針的位置。
具體結(jié)合以下示例進(jìn)行說明,如圖3所示,圖3所示的節(jié)點(diǎn)1和節(jié)點(diǎn)2之間建立的跨節(jié)點(diǎn)數(shù)據(jù)傳輸通道是基于對數(shù)據(jù)隊(duì)列的控制,具體的交互流程如下:
s1,節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送消息時,將消息數(shù)據(jù)寫入控制隊(duì)列后,將控制隊(duì)列的指針head增加,例如,指針head向前移動5個字節(jié),并將指針head所指示的位置同步給節(jié)點(diǎn)2;
s2,節(jié)點(diǎn)2收到節(jié)點(diǎn)1的中斷信號或者輪詢到指針head變化時,進(jìn)行消息處理,將消息交給節(jié)點(diǎn)2中的應(yīng)用模塊處理。消息處理后,節(jié)點(diǎn)2將環(huán)形隊(duì)列的指針tail增加,例如,指針tail向前移動2個數(shù)據(jù)字節(jié),則將指針tail所指示的位置同步給節(jié)點(diǎn)1;
s3,節(jié)點(diǎn)1收到節(jié)點(diǎn)2的中斷信號或者輪詢到指針tail變化時,說明已發(fā)送待確認(rèn)的隊(duì)列里有數(shù)據(jù),節(jié)點(diǎn)1處理已發(fā)送待確認(rèn)隊(duì)列里的消息,通知節(jié)點(diǎn)1中的應(yīng)用模塊消息處理完成,則節(jié)點(diǎn)1將更新指針recv_tail的位置,即釋放指針recv_tail的當(dāng)前 位置。
需要說明的是,圖3所示的實(shí)線表示在本側(cè)執(zhí)行處理后得到的位置,虛線表示在對側(cè)執(zhí)行處理后同步得到的位置。
通過本申請?zhí)峁┑膶?shí)施例,同步兩側(cè)隊(duì)列中指針?biāo)甘镜奈恢?,從而?shí)現(xiàn)準(zhǔn)確控制所傳輸?shù)臄?shù)據(jù)的傳輸狀態(tài),達(dá)到作為數(shù)據(jù)傳輸通道準(zhǔn)確完成數(shù)據(jù)傳輸?shù)哪康摹?/p>
實(shí)施例3
在本實(shí)施例中提供了一種數(shù)據(jù)處理裝置,圖8是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理裝置的示意圖,如圖8所示,該裝置包括:
1)第一獲取單元802,用于獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量,其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行遠(yuǎn)程直接數(shù)據(jù)存取rdma操作的輸入輸出i/o數(shù)據(jù);
2)第一處理單元804,用于在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值時,直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作;
3)第二處理單元806,用于在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于第一預(yù)定閾值時,通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述數(shù)據(jù)處理方法可以但不限于應(yīng)用于pcie(pci-express)鏈路的節(jié)點(diǎn)通信過程中,發(fā)送設(shè)備在獲取到當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量后,將根據(jù)上述數(shù)據(jù)量選擇不同的數(shù)據(jù)處理方式:在數(shù)據(jù)量小于等于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較小,則可以將當(dāng)前待處理數(shù)據(jù)通過預(yù)先建立的數(shù)據(jù)傳輸通道發(fā)送給接收設(shè)備,以使接收設(shè)備進(jìn)行內(nèi)存拷貝,以完成在頁面地址對應(yīng)的通道緩存上對當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作;在數(shù)據(jù)量大于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較大,則可以在獲取目的節(jié)點(diǎn)上的頁面地址后,直接在該頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行rdma操作的輸入輸出i/o數(shù)據(jù)。通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低。
需要說明的是,由于一次發(fā)送請求并接收到請求響應(yīng)的交互時長固定,如果一次傳輸?shù)臄?shù)據(jù)量較小時,顯然將使得數(shù)據(jù)傳輸通道的利用率變低,因而,在本實(shí)施例中,當(dāng)數(shù)據(jù)量(即開銷)較小時,就可以直接通過上述數(shù)據(jù)傳輸通道將當(dāng)前待處理數(shù)據(jù)傳輸給接收設(shè)備,以使接收設(shè)備通過一次內(nèi)存拷貝完成數(shù)據(jù)處理,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速,而無需預(yù)先獲取執(zhí)行rdma操作的頁面地址,也避免了對數(shù)據(jù)的多次拷貝過程。也就是說,當(dāng)數(shù)據(jù)量較小時,數(shù)據(jù)的處理時長將根據(jù)數(shù)據(jù)的拷貝時長決定。進(jìn)一步, 當(dāng)數(shù)據(jù)量(即開銷)較大時,執(zhí)行拷貝所需的時間很長,因而,則采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,在直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作之前,還需獲取頁面地址,其中,上述頁面地址的獲取方式可以包括但不限于以下至少之一:通過數(shù)據(jù)傳輸通道向接收設(shè)備發(fā)送用于獲取頁面地址的獲取請求、從本地的頁面地址緩存池中直接獲取已緩存的頁面地址。
可選地,在本實(shí)施例中,上述頁面地址緩存池中的頁面地址可以通過以下方式獲?。簷z測頁面地址緩存池中緩存的頁面地址數(shù)量;若頁面地址數(shù)量小于等于第二預(yù)定閾值,則通過數(shù)據(jù)傳輸通道獲取新的頁面地址。
需要說明的是,在本實(shí)施例中,上述頁面地址緩存池將根據(jù)當(dāng)前的緩存量,對池中的頁面地址進(jìn)行及時添加更新。從而實(shí)現(xiàn)在數(shù)據(jù)量較大時,避免每次都向接收設(shè)備請求獲取頁面地址所造成的處理延時的問題。進(jìn)一步,在獲取新的頁面地址添加到上述頁面地址緩存池時,并不影響對當(dāng)前待處理數(shù)據(jù)正常的rdma操作,也就是說,二者可以異步同時進(jìn)行,從而進(jìn)一步實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
可選地,在本實(shí)施例中,上述數(shù)據(jù)傳輸通道可以但不限于是基于直接訪問對端內(nèi)存的消息,在節(jié)點(diǎn)之間(如發(fā)送設(shè)備和接收設(shè)備之間)建立的跨節(jié)點(diǎn)通信通道。其中,上述跨節(jié)點(diǎn)建立的上述數(shù)據(jù)傳輸通道可以但不限于是基于兩側(cè)的數(shù)據(jù)隊(duì)列建立。具體而言,在接收設(shè)備設(shè)置一個環(huán)形隊(duì)列,在發(fā)送設(shè)備設(shè)置一個用于控制環(huán)形隊(duì)列控制隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。也就是說,通過直接控制發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列,實(shí)現(xiàn)對當(dāng)前待處理數(shù)據(jù)的傳輸控制。例如,同步更新發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列中的數(shù)據(jù)指針?biāo)甘镜奈恢?,以達(dá)到準(zhǔn)確控制當(dāng)前待處理數(shù)據(jù)的傳輸狀態(tài)。
通過本申請?zhí)峁┑膶?shí)施例,通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式:在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較大時,采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作,而無需每次都通過交互獲取對應(yīng)的頁面地址,從而達(dá)到減少數(shù)據(jù)交互的目的;在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較小時,直接通過數(shù)據(jù)傳輸通道在接收設(shè)備中通過內(nèi)存拷貝完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速的效果。通過根據(jù)不同的數(shù)據(jù)開銷,選擇合理的數(shù)據(jù)處理方式,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,還包括:
1)第二獲取單元,用于在直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作之前,從本地的頁面地址緩存池中直接獲取頁面地址,其中,頁面地址緩存池用于緩存一個或多個頁面地址。
可選地,在本實(shí)施例中,上述頁面地址緩存池可以但不限于根據(jù)不同的業(yè)務(wù)(也稱之為應(yīng)用)設(shè)置多個不同的頁面地址緩存池。如圖2所示,可以劃分為頁面地址緩存池202-1至頁面地址緩存池202-n。
可選地,在本實(shí)施例中,上述頁面地址緩存池中的頁面地址可以但不限于在由對端(即接收設(shè)備)獲取后,添加更新到本地頁面地址緩存池中。其中,頁面地址緩存池獲取頁面地址的方式可以包括但不限于以下至少之一:節(jié)點(diǎn)1檢測到緩存量低于預(yù)定閾值時,通過數(shù)據(jù)傳輸通道向節(jié)點(diǎn)2請求補(bǔ)充頁面地址;節(jié)點(diǎn)2通過數(shù)據(jù)傳輸通道主動按照預(yù)定周期為節(jié)點(diǎn)1補(bǔ)充新的頁面地址。
具體結(jié)合以下示例進(jìn)行說明,如圖2所示,發(fā)送設(shè)備以節(jié)點(diǎn)1為例,接收設(shè)備以節(jié)點(diǎn)2為例,如步驟s206-s208,當(dāng)節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送數(shù)據(jù)時,可以直接向頁面地址緩存池申請獲取頁面地址而無需向節(jié)點(diǎn)2發(fā)送申請獲取的請求,從而減少節(jié)點(diǎn)1每次獲取頁面地址的時間,進(jìn)而達(dá)到減少處理延時的效果。
進(jìn)一步,如步驟s202-s204,上述節(jié)點(diǎn)1為對端節(jié)點(diǎn)2可以設(shè)置多個頁面地址緩存池,如頁面地址緩存池202-1至頁面地址緩存池202-n。當(dāng)檢測到一個緩存池中的緩存量低于預(yù)定閾值時,則可以通過數(shù)據(jù)傳輸通道向?qū)Χ斯?jié)點(diǎn)2發(fā)送獲取請求,以實(shí)現(xiàn)由節(jié)點(diǎn)2為節(jié)點(diǎn)1補(bǔ)充新的頁面地址。
需要說明的是,在本示例中,上述節(jié)點(diǎn)1獲取頁面地址的過程(即步驟s202-s204)與頁面地址緩存池獲取頁面地址的過程(即步驟s206-s208)并不限于如圖所示的順序,上述兩個過程可以但不限異步同時進(jìn)行,本實(shí)施例中對此不作任何限定。
通過本申請?zhí)峁┑膶?shí)施例,通過在本地設(shè)置頁面地址緩存池,以使發(fā)送設(shè)備可以直接從本地獲取頁面地址,并直接在頁面地址上進(jìn)行rdma操作,從而達(dá)到減少對待處理數(shù)據(jù)的處理延時。
作為一種可選的方案,還包括:
1)檢測單元,用于在從本地的頁面地址緩存池中直接獲取頁面地址之前,檢測頁面地址緩存池中緩存的頁面地址數(shù)量;
2)第三獲取單元,用于在頁面地址數(shù)量小于等于第二預(yù)定閾值時,通過數(shù)據(jù)傳輸通道獲取新的頁面地址。
可選地,在本實(shí)施例中,上述第二預(yù)定閾值可以但不限于根據(jù)不同的應(yīng)用場景設(shè)置為不同取值。其中,節(jié)點(diǎn)1(即發(fā)送設(shè)備)可以為節(jié)點(diǎn)2設(shè)置多個頁面地址緩存池,可以設(shè)置一個第二預(yù)定閾值,即檢測所有頁面地址緩存池中頁面地址的數(shù)量的總量是否滿足第二預(yù)定閾值;也可以為每個頁面地址緩存池設(shè)置不同取值的第二預(yù)定閾值,即分別檢測各個頁面地址緩存池中頁面地址的數(shù)量是否滿足對應(yīng)的第二預(yù)定閾值,本實(shí)施例中對此不作任何限定。
可選地,在本實(shí)施例中,第三獲取單元包括:1)發(fā)送模塊,用于將用于請求獲取頁面地址的獲取請求作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道發(fā)送給接收設(shè)備;2)獲取模塊,用于獲取接收設(shè)備發(fā)送的頁面地址;3)添加模塊,用于添加頁面地址到頁面地址緩存池中。
具體如圖2所示,當(dāng)檢測到頁面地址緩存池中的頁面地址數(shù)量較小時,可以執(zhí)行步驟s202-s204,向?qū)Χ斯?jié)點(diǎn)獲取頁面地址進(jìn)行補(bǔ)充。具體過程可以參見上述示例,本示例在此不再贅述。
通過本申請?zhí)峁┑膶?shí)施例,通過實(shí)時檢測頁面地址緩存池中的頁面地址的數(shù)量,實(shí)現(xiàn)對頁面地址緩存池中的頁面地址的及時補(bǔ)充,從而保證在當(dāng)前待處理數(shù)據(jù)正常執(zhí)行rdma操作的同時,還可以及時緩存新的頁面地址,進(jìn)一步實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,第二處理單元包括:
1)處理模塊,用于將當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道直接發(fā)送給接收設(shè)備,并保存在數(shù)據(jù)傳輸通道在接收設(shè)備的通道緩存器中,以使接收設(shè)備利用通道緩存器中的當(dāng)前待處理數(shù)據(jù)在頁面地址上執(zhí)行rdma操作。
可選地,在本實(shí)施例中,在執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作時,還可以不獲取確切的頁面地址,將當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道直接發(fā)送給接收設(shè)備,并保存在接收設(shè)備的通道緩存器中,接收設(shè)備的應(yīng)用會直接從上述通道緩存器中將當(dāng)前待處理數(shù)據(jù)讀取出來并以此拷貝到對應(yīng)的頁面內(nèi)存中,進(jìn)行rdma操作。
通過本申請?zhí)峁┑膶?shí)施例,在數(shù)據(jù)量較小時,利用數(shù)據(jù)傳輸通道的通道緩存,實(shí)現(xiàn)直接在接收設(shè)備中完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而達(dá)到提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,還包括:
1)建立單元,用于在獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量之前,在發(fā)送設(shè)備與接收設(shè)備之間建立數(shù)據(jù)傳輸通道,其中,數(shù)據(jù)傳輸通道連接發(fā)送設(shè)備中的控制隊(duì)列與接收設(shè)備中的環(huán)形隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,在本實(shí)施例中,建立單元包括:
(1)設(shè)置模塊,用于在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓?/p>
其中,指針包括:隊(duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,隊(duì)列尾指針與隊(duì)列頭指針之間的數(shù)據(jù)用于表示接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);隊(duì)列接收指針與隊(duì)列尾指針之間的數(shù)據(jù)用于表示接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,在本實(shí)施例中,在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置隊(duì)列頭指針head、隊(duì)列 尾指針tail及隊(duì)列接收指針recv_tail,通過上述指針?biāo)甘镜奈恢玫淖兓瑢?shí)現(xiàn)對待傳輸數(shù)據(jù)的傳輸控制。
需要說明的是,發(fā)送設(shè)備的新消息采用加入到頭部的方式進(jìn)行,接收設(shè)備從尾部開始接收。發(fā)送設(shè)備判定當(dāng)head等于tail時,則隊(duì)列為空,當(dāng)head+1等于recv_tail時,則隊(duì)列為滿。
通過本申請?zhí)峁┑膶?shí)施例,通過在發(fā)送和接收兩側(cè)分別建立對應(yīng)的數(shù)列,實(shí)現(xiàn)基于數(shù)列建立數(shù)據(jù)傳輸通道,以實(shí)現(xiàn)對待處理數(shù)據(jù)的靈活傳輸控制。
作為一種可選的方案,設(shè)置模塊通過以下方式控制控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓ǎ?/p>
1)在發(fā)送設(shè)備執(zhí)行發(fā)送操作時,控制隊(duì)列的隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降浇邮赵O(shè)備的環(huán)形隊(duì)列中,其中,n為大于等于1的自然數(shù);
2)在接收設(shè)備執(zhí)行接收操作時,環(huán)形隊(duì)列的隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將隊(duì)列尾指針?biāo)甘镜奈恢猛降桨l(fā)送設(shè)備的控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);
其中,在發(fā)送設(shè)備的控制隊(duì)列中隊(duì)列尾指針移動到隊(duì)列頭指針時,更新隊(duì)列接收指針的位置。
具體結(jié)合以下示例進(jìn)行說明,如圖3所示,圖3所示的節(jié)點(diǎn)1和節(jié)點(diǎn)2之間建立的跨節(jié)點(diǎn)數(shù)據(jù)傳輸通道是基于對數(shù)據(jù)隊(duì)列的控制,具體的交互流程如下:
s1,節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送消息時,將消息數(shù)據(jù)寫入控制隊(duì)列后,將控制隊(duì)列的指針head增加,例如,指針head向前移動5個字節(jié),并將指針head所指示的位置同步給節(jié)點(diǎn)2;
s2,節(jié)點(diǎn)2收到節(jié)點(diǎn)1的中斷信號或者輪詢到指針head變化時,進(jìn)行消息處理,將消息交給節(jié)點(diǎn)2中的應(yīng)用模塊處理。消息處理后,節(jié)點(diǎn)2將環(huán)形隊(duì)列的指針tail增加,例如,指針tail向前移動2個數(shù)據(jù)字節(jié),則將指針tail所指示的位置同步給節(jié)點(diǎn)1;
s3,節(jié)點(diǎn)1收到節(jié)點(diǎn)2的中斷信號或者輪詢到指針tail變化時,說明已發(fā)送待確認(rèn)的隊(duì)列里有數(shù)據(jù),節(jié)點(diǎn)1處理已發(fā)送待確認(rèn)隊(duì)列里的消息,通知節(jié)點(diǎn)1中的應(yīng)用模塊消息處理完成,則節(jié)點(diǎn)1將更新指針recv_tail的位置,即釋放指針recv_tail的當(dāng)前位置。
需要說明的是,圖3所示的實(shí)線表示在本側(cè)執(zhí)行處理后得到的位置,虛線表示在對側(cè)執(zhí)行處理后同步得到的位置。
通過本申請?zhí)峁┑膶?shí)施例,同步兩側(cè)隊(duì)列中指針?biāo)甘镜奈恢?,從而?shí)現(xiàn)準(zhǔn)確控制所傳輸?shù)臄?shù)據(jù)的傳輸狀態(tài),達(dá)到作為數(shù)據(jù)傳輸通道準(zhǔn)確完成數(shù)據(jù)傳輸?shù)哪康摹?/p>
實(shí)施例4
在本實(shí)施例中提供了一種數(shù)據(jù)處理裝置,圖9是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理裝置的示意圖,如圖9所示,該裝置包括:
1)第一處理單元902,用于在發(fā)送設(shè)備獲取到的當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值時,接收發(fā)送設(shè)備直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作,其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行rdma操作的輸入輸出i/o數(shù)據(jù);
2)第二處理單元904,用于在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于第一預(yù)定閾值時,接收通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述數(shù)據(jù)處理方法可以但不限于應(yīng)用于pcie(pci-express)鏈路的節(jié)點(diǎn)通信過程中,發(fā)送設(shè)備在獲取到當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量后,將根據(jù)上述數(shù)據(jù)量選擇不同的數(shù)據(jù)處理方式:在數(shù)據(jù)量小于等于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較小,則可以將當(dāng)前待處理數(shù)據(jù)通過預(yù)先建立的數(shù)據(jù)傳輸通道發(fā)送給接收設(shè)備,以使接收設(shè)備進(jìn)行內(nèi)存拷貝,以完成在頁面地址對應(yīng)的通道緩存上對當(dāng)前待處理數(shù)據(jù)的遠(yuǎn)程直接數(shù)據(jù)存取rdma操作;在數(shù)據(jù)量大于第一預(yù)定閾值時,由于數(shù)據(jù)開銷較大,則可以在獲取目的節(jié)點(diǎn)上的頁面地址后,直接在該頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行rdma操作的輸入輸出i/o數(shù)據(jù)。通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低。
需要說明的是,由于一次發(fā)送請求并接收到請求響應(yīng)的交互時長固定,如果一次傳輸?shù)臄?shù)據(jù)量較小時,顯然將使得數(shù)據(jù)傳輸通道的利用率變低,因而,在本實(shí)施例中,當(dāng)數(shù)據(jù)量(即開銷)較小時,就可以直接通過上述數(shù)據(jù)傳輸通道將當(dāng)前待處理數(shù)據(jù)傳輸給接收設(shè)備,以使接收設(shè)備通過一次內(nèi)存拷貝完成數(shù)據(jù)處理,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速,而無需預(yù)先獲取執(zhí)行rdma操作的頁面地址,也避免了對數(shù)據(jù)的多次拷貝過程。也就是說,當(dāng)數(shù)據(jù)量較小時,數(shù)據(jù)的處理時長將根據(jù)數(shù)據(jù)的拷貝時長決定。進(jìn)一步,當(dāng)數(shù)據(jù)量(即開銷)較大時,執(zhí)行拷貝所需的時間很長,因而,則采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述數(shù)據(jù)傳輸通道可以但不限于是基于直接訪問對端內(nèi)存的消息,在節(jié)點(diǎn)之間(如發(fā)送設(shè)備和接收設(shè)備之間)建立的跨節(jié)點(diǎn)通信通道。其中,上 述跨節(jié)點(diǎn)建立的上述數(shù)據(jù)傳輸通道可以但不限于是基于兩側(cè)的數(shù)據(jù)隊(duì)列建立。具體而言,在接收設(shè)備設(shè)置一個環(huán)形隊(duì)列,在發(fā)送設(shè)備設(shè)置一個用于控制環(huán)形隊(duì)列控制隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。也就是說,通過直接控制發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列,實(shí)現(xiàn)對當(dāng)前待處理數(shù)據(jù)的傳輸控制。例如,同步更新發(fā)送和接收兩側(cè)的數(shù)據(jù)隊(duì)列中的數(shù)據(jù)指針?biāo)甘镜奈恢?,以達(dá)到準(zhǔn)確控制當(dāng)前待處理數(shù)據(jù)的傳輸狀態(tài)。
通過本申請?zhí)峁┑膶?shí)施例,通過根據(jù)當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量選擇合理的數(shù)據(jù)處理方式:在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較大時,采用直接在頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作,而無需每次都通過交互獲取對應(yīng)的頁面地址,從而達(dá)到減少數(shù)據(jù)交互的目的;在當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量較小時,直接通過數(shù)據(jù)傳輸通道在接收設(shè)備中通過內(nèi)存拷貝完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而實(shí)現(xiàn)對數(shù)據(jù)處理過程的硬件加速的效果。通過根據(jù)不同的數(shù)據(jù)開銷,選擇合理的數(shù)據(jù)處理方式,以克服現(xiàn)有技術(shù)中只能通過多次交互獲取對端物理地址的方式執(zhí)行rdma操作所所導(dǎo)致的數(shù)據(jù)處理效率較低,從而實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,還包括:
1)接收單元,用于在接收發(fā)送設(shè)備直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作之前,接收發(fā)送設(shè)備發(fā)送的用于請求獲取頁面地址的獲取請求;
2)發(fā)送單元,用于響應(yīng)獲取請求發(fā)送頁面地址。
通過本申請?zhí)峁┑膶?shí)施例,響應(yīng)發(fā)送設(shè)備發(fā)送的獲取請求,向發(fā)送設(shè)備發(fā)送頁面地址,從而保證在當(dāng)前待處理數(shù)據(jù)正常執(zhí)行rdma操作的同時,還可以及時向發(fā)送設(shè)備緩存新的頁面地址,進(jìn)一步實(shí)現(xiàn)提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,第二處理單元包括:
1)接收模塊,用于接收當(dāng)前待處理數(shù)據(jù);
2)保存模塊,用于將待處理數(shù)據(jù)保存在數(shù)據(jù)傳輸通道在接收設(shè)備的通道緩存器中;
3)拷貝模塊,用于將通道緩存器中的當(dāng)前待處理數(shù)據(jù)拷貝到與頁面地址對應(yīng)頁面內(nèi)存中。
可選地,在本實(shí)施例中,在執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作時,還可以不獲取確切的頁面地址,將當(dāng)前待處理數(shù)據(jù)作為待傳輸數(shù)據(jù)通過數(shù)據(jù)傳輸通道直接發(fā)送給接收設(shè)備,并保存在接收設(shè)備的通道緩存器中,接收設(shè)備的應(yīng)用會直接從上述通道緩存器中將當(dāng)前待處理數(shù)據(jù)讀取出來并以此拷貝到對應(yīng)的頁面內(nèi)存中,進(jìn)行rdma操作。
通過本申請?zhí)峁┑膶?shí)施例,在數(shù)據(jù)量較小時,利用數(shù)據(jù)傳輸通道的通道緩存,實(shí)現(xiàn) 直接在接收設(shè)備中完成對當(dāng)前待處理數(shù)據(jù)的rdma操作,從而達(dá)到提高數(shù)據(jù)處理效率的效果。
作為一種可選的方案,還包括:
1)建立單元,用于預(yù)先在發(fā)送設(shè)備與接收設(shè)備之間建立數(shù)據(jù)傳輸通道,其中,數(shù)據(jù)傳輸通道連接發(fā)送設(shè)備中的控制隊(duì)列與接收設(shè)備中的環(huán)形隊(duì)列,其中,控制隊(duì)列包括用于控制環(huán)形隊(duì)列中數(shù)據(jù)狀態(tài)變化的控制信息。
可選地,在本實(shí)施例中,建立單元包括:
1)設(shè)置模塊,用于在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置用于指示隊(duì)列中數(shù)據(jù)狀態(tài)變化的指針,其中,控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓?/p>
其中,指針包括:隊(duì)列頭指針、隊(duì)列尾指針及隊(duì)列接收指針,其中,隊(duì)列尾指針與隊(duì)列頭指針之間的數(shù)據(jù)用于表示接收設(shè)備尚未確認(rèn)接收的數(shù)據(jù);隊(duì)列接收指針與隊(duì)列尾指針之間的數(shù)據(jù)用于表示接收設(shè)備已確認(rèn)接收,且尚未處理的數(shù)據(jù)。
可選地,在本實(shí)施例中,在控制隊(duì)列及環(huán)形隊(duì)列中分別設(shè)置隊(duì)列頭指針head、隊(duì)列尾指針tail及隊(duì)列接收指針recv_tail,通過上述指針?biāo)甘镜奈恢玫淖兓?,?shí)現(xiàn)對待傳輸數(shù)據(jù)的傳輸控制。
需要說明的是,發(fā)送設(shè)備的新消息采用加入到頭部的方式進(jìn)行,接收設(shè)備從尾部開始接收。發(fā)送設(shè)備判定當(dāng)head等于tail時,則隊(duì)列為空,當(dāng)head+1等于recv_tail時,則隊(duì)列為滿。
通過本申請?zhí)峁┑膶?shí)施例,通過在發(fā)送和接收兩側(cè)分別建立對應(yīng)的數(shù)列,實(shí)現(xiàn)基于數(shù)列建立數(shù)據(jù)傳輸通道,以實(shí)現(xiàn)對待處理數(shù)據(jù)的靈活傳輸控制。
作為一種可選的方案,設(shè)置模塊通過以下方式實(shí)現(xiàn)控制隊(duì)列與環(huán)形隊(duì)列中的指針?biāo)甘镜奈恢猛阶兓ǎ?/p>
1)在發(fā)送設(shè)備執(zhí)行發(fā)送操作時,控制隊(duì)列的隊(duì)列頭指針將向前移動n個數(shù)據(jù)字節(jié),并將隊(duì)列頭指針?biāo)甘镜奈恢脤⑼降浇邮赵O(shè)備的環(huán)形隊(duì)列中,其中,n為大于等于1的自然數(shù);
2)在接收設(shè)備執(zhí)行接收操作時,環(huán)形隊(duì)列的隊(duì)列尾指針將向前移動m個數(shù)據(jù)字節(jié),并將隊(duì)列尾指針?biāo)甘镜奈恢猛降桨l(fā)送設(shè)備的控制隊(duì)列中,其中,m≤n,m為大于等于1的自然數(shù);
其中,在發(fā)送設(shè)備的控制隊(duì)列中隊(duì)列尾指針移動到隊(duì)列頭指針時,更新隊(duì)列接收指針的位置。
具體結(jié)合以下示例進(jìn)行說明,如圖3所示,圖3所示的節(jié)點(diǎn)1和節(jié)點(diǎn)2之間建立的 跨節(jié)點(diǎn)數(shù)據(jù)傳輸通道是基于對數(shù)據(jù)隊(duì)列的控制,具體的交互流程如下:
s1,節(jié)點(diǎn)1向節(jié)點(diǎn)2發(fā)送消息時,將消息數(shù)據(jù)寫入控制隊(duì)列后,將控制隊(duì)列的指針head增加,例如,指針head向前移動5個字節(jié),并將指針head所指示的位置同步給節(jié)點(diǎn)2;
s2,節(jié)點(diǎn)2收到節(jié)點(diǎn)1的中斷信號或者輪詢到指針head變化時,進(jìn)行消息處理,將消息交給節(jié)點(diǎn)2中的應(yīng)用模塊處理。消息處理后,節(jié)點(diǎn)2將環(huán)形隊(duì)列的指針tail增加,例如,指針tail向前移動2個數(shù)據(jù)字節(jié),則將指針tail所指示的位置同步給節(jié)點(diǎn)1;
s3,節(jié)點(diǎn)1收到節(jié)點(diǎn)2的中斷信號或者輪詢到指針tail變化時,說明已發(fā)送待確認(rèn)的隊(duì)列里有數(shù)據(jù),節(jié)點(diǎn)1處理已發(fā)送待確認(rèn)隊(duì)列里的消息,通知節(jié)點(diǎn)1中的應(yīng)用模塊消息處理完成,則節(jié)點(diǎn)1將更新指針recv_tail的位置,即釋放指針recv_tail的當(dāng)前位置。
需要說明的是,圖3所示的實(shí)線表示在本側(cè)執(zhí)行處理后得到的位置,虛線表示在對側(cè)執(zhí)行處理后同步得到的位置。
通過本申請?zhí)峁┑膶?shí)施例,同步兩側(cè)隊(duì)列中指針?biāo)甘镜奈恢?,從而?shí)現(xiàn)準(zhǔn)確控制所傳輸?shù)臄?shù)據(jù)的傳輸狀態(tài),達(dá)到作為數(shù)據(jù)傳輸通道準(zhǔn)確完成數(shù)據(jù)傳輸?shù)哪康摹?/p>
實(shí)施例5
本發(fā)明的實(shí)施例還提供了一種存儲介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲介質(zhì)可以被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:
s1,獲取當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量,其中,當(dāng)前待處理數(shù)據(jù)包括當(dāng)前執(zhí)行遠(yuǎn)程直接數(shù)據(jù)存取rdma操作的輸入輸出i/o數(shù)據(jù);
s2,若當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量大于第一預(yù)定閾值,則直接在與當(dāng)前待處理數(shù)據(jù)對應(yīng)的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作;
s3,若當(dāng)前待處理數(shù)據(jù)的數(shù)據(jù)量小于等于第一預(yù)定閾值,則通過預(yù)先建立的數(shù)據(jù)傳輸通道在接收設(shè)備中的頁面地址上執(zhí)行當(dāng)前待處理數(shù)據(jù)的rdma操作。
可選地,在本實(shí)施例中,上述存儲介質(zhì)可以包括但不限于:u盤、只讀存儲器(rom,read-onlymemory)、隨機(jī)存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例及可選實(shí)施方式中所描述的示例,本實(shí)施例在此不再贅述。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的 計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個的計(jì)算裝置上,或者分布在多個計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲在存儲裝置中由計(jì)算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。