本發(fā)明涉及數(shù)據(jù)傳輸,特別涉及一種跨pcie域數(shù)據(jù)傳輸方法、裝置、設(shè)備及介質(zhì)。
背景技術(shù):
1、pcie(peripheral?component?interconnect?express,一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn))架構(gòu)構(gòu)建了以根復(fù)合體(root?complex,rc)為樹(shù)根的總線層次結(jié)構(gòu),即pcie域。在單個(gè)pcie域內(nèi),借助pcie?switch(交換機(jī))拓展,主機(jī)的cpu(中央處理器)能通過(guò)地址或路由訪問(wèn)所有endpoint(簡(jiǎn)稱ep,端點(diǎn))設(shè)備。隨著多主機(jī)應(yīng)用場(chǎng)景的普及,跨pcie域通信需求凸顯,pcie?switch?dma(direct?memory?access,直接內(nèi)存訪問(wèn))成為高效的數(shù)據(jù)轉(zhuǎn)發(fā)方式。switch可劃分為多個(gè)vs(virtual?switch,虛擬交換機(jī)),各個(gè)vs之間是邏輯隔離的,表現(xiàn)為相互獨(dú)立的pcie域。每個(gè)pcie域包含dma控制器,在域內(nèi)作為主機(jī)端口ep設(shè)備,各個(gè)域之間的dma?ep之間實(shí)現(xiàn)pcie域間通信.
2、在跨pcie域的dma數(shù)據(jù)傳輸過(guò)程中,數(shù)據(jù)會(huì)在不同的dma控制器間流轉(zhuǎn)。圖1為多pcie域間dma數(shù)據(jù)流的示意圖,如圖1所示,主機(jī)a有三個(gè)dma任務(wù),分別向主機(jī)b、主機(jī)c、主機(jī)d傳輸數(shù)據(jù),dma_ep_a從主機(jī)a讀取數(shù)據(jù),在其data?buffer(數(shù)據(jù)緩存)緩存排隊(duì),依次向主機(jī)b、主機(jī)c、主機(jī)d發(fā)送,這個(gè)過(guò)程中,dma_ep_a并不感知host_b、host_c、host_d的狀態(tài),當(dāng)某個(gè)接收buffer遇到內(nèi)存讀取請(qǐng)求的速度超過(guò)數(shù)據(jù)消耗的速度時(shí),此時(shí)該接收buffer的剩余存儲(chǔ)空間不足,就會(huì)反壓發(fā)送方,從而造成擁塞。如圖1所示,雖然data_c、data_d接收隊(duì)列并沒(méi)有滿載,但因?yàn)閐ata_b隊(duì)列已滿,使得整個(gè)發(fā)送隊(duì)列的阻塞,這種現(xiàn)象即成為隊(duì)首阻塞,隊(duì)首阻塞會(huì)阻止dma控制器獲取新的工作項(xiàng),導(dǎo)致總線上的空閑時(shí)間和永遠(yuǎn)無(wú)法恢復(fù)的帶寬損失。
3、針對(duì)上述問(wèn)題,常規(guī)解決方法存在不足。限制outstanding?reads(未完成的讀請(qǐng)求)數(shù)目雖能緩解,但會(huì)導(dǎo)致帶寬損失,且在跨主機(jī)域場(chǎng)景下,源端和目標(biāo)端速率匹配困難,因?yàn)殡y以實(shí)時(shí)獲取接收方狀態(tài)。采用如圖2所示的多隊(duì)列方式,雖理論上能解決隊(duì)首阻塞問(wèn)題,但會(huì)極大增加緩存資源用量,還需增加仲裁控制邏輯,并且有限的數(shù)據(jù)隊(duì)列會(huì)限制dma連接數(shù)量,實(shí)際實(shí)施難度大。
4、綜上,如何避免多個(gè)pcie域之間并發(fā)dma通信過(guò)程中出現(xiàn)的隊(duì)首阻塞是目前有待解決的問(wèn)題。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明的目的在于提供一種跨pcie域數(shù)據(jù)傳輸方法、裝置、設(shè)備及介質(zhì),能夠避免多個(gè)pcie域之間并發(fā)dma通信過(guò)程中出現(xiàn)的隊(duì)首阻塞。其具體方案如下:
2、第一方面,本技術(shù)公開(kāi)了一種跨pcie域數(shù)據(jù)傳輸方法,應(yīng)用于第一pcie域中的第一dma控制器,第一dma控制器與第一主機(jī)連接,包括:
3、解析第一主機(jī)發(fā)送的數(shù)據(jù)傳輸任務(wù)以得到任務(wù)類型和與第一主機(jī)進(jìn)行通信的第二主機(jī),并基于任務(wù)類型在第一主機(jī)和第二主機(jī)中確定出數(shù)據(jù)接收端;
4、若第一主機(jī)為數(shù)據(jù)接收端,則將數(shù)據(jù)傳輸任務(wù)拆分為若干個(gè)第一讀請(qǐng)求,并在監(jiān)測(cè)到本地的第一數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件時(shí),向第二主機(jī)對(duì)應(yīng)的第二pcie域中的第二dma控制器發(fā)送第一讀請(qǐng)求,以便接收第二dma控制器從第二主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù);
5、若第二主機(jī)為數(shù)據(jù)接收端,則將數(shù)據(jù)傳輸任務(wù)發(fā)送至第二dma控制器,以便獲取第二dma控制器在監(jiān)測(cè)到其本地的第二數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件后,發(fā)送的第二讀請(qǐng)求,然后響應(yīng)第二讀請(qǐng)求,以將從第一主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù)發(fā)送至第二dma控制器;第二讀請(qǐng)求為第二dma控制器將數(shù)據(jù)傳輸任務(wù)拆分得到。
6、可選的,解析第一主機(jī)發(fā)送的數(shù)據(jù)傳輸任務(wù)以得到任務(wù)類型和與第一主機(jī)進(jìn)行通信的第二主機(jī),并基于任務(wù)類型在第一主機(jī)和第二主機(jī)中確定出數(shù)據(jù)接收端,包括:
7、從第一主機(jī)的任務(wù)隊(duì)列中獲取數(shù)據(jù)傳輸任務(wù),并將數(shù)據(jù)傳輸任務(wù)緩存至本地的工作隊(duì)列;
8、對(duì)工作隊(duì)列中緩存的數(shù)據(jù)傳輸任務(wù)的任務(wù)描述符進(jìn)行解析,以確定任務(wù)類型和與第一主機(jī)進(jìn)行通信的第二主機(jī);其中,任務(wù)描述符包括目標(biāo)數(shù)據(jù)當(dāng)前所在的源地址和待寫入的目標(biāo)地址、與源地址對(duì)應(yīng)的pcie域標(biāo)識(shí)與目標(biāo)地址對(duì)應(yīng)的pcie域標(biāo)識(shí)、和數(shù)據(jù)傳輸長(zhǎng)度;任務(wù)類型為數(shù)據(jù)讀取任務(wù)和數(shù)據(jù)寫入任務(wù)中的任一種;
9、若任務(wù)類型為數(shù)據(jù)讀取任務(wù),則第一主機(jī)為數(shù)據(jù)接收端,第二主機(jī)為數(shù)據(jù)發(fā)送端;
10、若任務(wù)類型為數(shù)據(jù)寫入任務(wù),則第一主機(jī)為數(shù)據(jù)發(fā)送端,第二主機(jī)為數(shù)據(jù)接收端。
11、可選的,接收第二dma控制器從第二主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù),包括:
12、通過(guò)第二dma控制器基于源地址從第二主機(jī)的內(nèi)存中讀取目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)緩存至第二數(shù)據(jù)緩存;
13、獲取第二dma控制器基于預(yù)設(shè)消息格式發(fā)送的第二數(shù)據(jù)緩存中存儲(chǔ)的目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)寫入至第一主機(jī)的內(nèi)存中的目標(biāo)地址;
14、相應(yīng)的,響應(yīng)第二讀請(qǐng)求,以將從第一主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù)發(fā)送至第二dma控制器,包括:
15、響應(yīng)第二讀請(qǐng)求,并將第二讀請(qǐng)求轉(zhuǎn)換為本地的內(nèi)存讀請(qǐng)求;
16、基于內(nèi)存讀請(qǐng)求和源地址從第一主機(jī)的內(nèi)存中讀取目標(biāo)數(shù)據(jù),并將目標(biāo)數(shù)據(jù)緩存至第一數(shù)據(jù)緩存;
17、基于預(yù)設(shè)消息格式將第一數(shù)據(jù)緩存中存儲(chǔ)的目標(biāo)數(shù)據(jù)依次傳輸至第二dma控制器,以便第二dma控制器將目標(biāo)數(shù)據(jù)寫入至第二主機(jī)的內(nèi)存中的目標(biāo)地址。
18、可選的,將目標(biāo)數(shù)據(jù)寫入至第一主機(jī)的內(nèi)存中的目標(biāo)地址之后,還包括:
19、向第一主機(jī)的完成隊(duì)列中發(fā)送用于表征任務(wù)執(zhí)行完成的消息;
20、相應(yīng)的,第二dma控制器將目標(biāo)數(shù)據(jù)寫入至第二主機(jī)的內(nèi)存中的目標(biāo)地址之后,還包括:
21、獲取第二dma控制器發(fā)送的用于表征數(shù)據(jù)已寫入完成的消息,并向第一主機(jī)的完成隊(duì)列中發(fā)送用于表征任務(wù)執(zhí)行完成的消息。
22、可選的,第一dma控制器和第二dma控制器將數(shù)據(jù)傳輸任務(wù)拆分為若干個(gè)讀請(qǐng)求的過(guò)程,包括:
23、基于pcie協(xié)議將數(shù)據(jù)傳輸任務(wù)拆分為若干個(gè)基于傳輸層的讀請(qǐng)求,并將各讀請(qǐng)求存入預(yù)設(shè)的讀請(qǐng)求隊(duì)列;其中,每個(gè)讀請(qǐng)求的起始地址符合預(yù)設(shè)4k頁(yè)邊界條件,每個(gè)讀請(qǐng)求的數(shù)據(jù)量不超過(guò)預(yù)設(shè)數(shù)據(jù)量閾值,每個(gè)讀請(qǐng)求的攜帶的有效載荷不超過(guò)預(yù)設(shè)載荷閾值。
24、可選的,在監(jiān)測(cè)到本地的第一數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件時(shí),向第二主機(jī)對(duì)應(yīng)的第二pcie域中的第二dma控制器發(fā)送第一讀請(qǐng)求,包括:
25、獲取數(shù)據(jù)傳輸任務(wù)對(duì)應(yīng)的數(shù)據(jù)傳輸總量;
26、持續(xù)監(jiān)測(cè)本地的第一數(shù)據(jù)緩存的剩余存儲(chǔ)空間,當(dāng)剩余存儲(chǔ)空間大于數(shù)據(jù)傳輸總量所需的目標(biāo)存儲(chǔ)空間,且剩余存儲(chǔ)空間與目標(biāo)存儲(chǔ)空間之間的大小差值超過(guò)預(yù)設(shè)閾值時(shí),則判定第一數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件;
27、從本地的讀請(qǐng)求隊(duì)列中取出各第一讀請(qǐng)求,并基于預(yù)設(shè)消息格式將各第一讀請(qǐng)求發(fā)送至第二主機(jī)對(duì)應(yīng)的第二pcie域中的第二dma控制器。
28、可選的,本技術(shù)的跨pcie域數(shù)據(jù)傳輸方法,還包括:
29、確定當(dāng)前已發(fā)送至所述第一主機(jī)的目標(biāo)讀請(qǐng)求的數(shù)量;所述目標(biāo)讀請(qǐng)求為已發(fā)送至所述第一主機(jī),但未收到所述第一主機(jī)的應(yīng)答數(shù)據(jù)的讀請(qǐng)求,所述目標(biāo)讀請(qǐng)求為所述第二主機(jī)發(fā)送的讀請(qǐng)求;
30、基于目標(biāo)讀請(qǐng)求的數(shù)量預(yù)測(cè)應(yīng)答數(shù)據(jù)所需的存儲(chǔ)空間大小,并基于存儲(chǔ)空間大小設(shè)置預(yù)設(shè)閾值。
31、第二方面,本技術(shù)公開(kāi)了一種跨pcie域數(shù)據(jù)傳輸裝置,應(yīng)用于第一pcie域中的第一dma控制器,第一dma控制器與第一主機(jī)連接,裝置包括:
32、解析模塊,用于解析第一主機(jī)發(fā)送的數(shù)據(jù)傳輸任務(wù)以得到任務(wù)類型和與第一主機(jī)進(jìn)行通信的第二主機(jī),并基于任務(wù)類型在第一主機(jī)和第二主機(jī)中確定出數(shù)據(jù)接收端;
33、數(shù)據(jù)接收模塊,用于若第一主機(jī)為數(shù)據(jù)接收端,則將數(shù)據(jù)傳輸任務(wù)拆分為若干個(gè)第一讀請(qǐng)求,并在監(jiān)測(cè)到本地的第一數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件時(shí),向第二主機(jī)對(duì)應(yīng)的第二pcie域中的第二dma控制器發(fā)送第一讀請(qǐng)求,以便接收第二dma控制器從第二主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù);
34、數(shù)據(jù)發(fā)送模塊,用于若第二主機(jī)為數(shù)據(jù)接收端,則將數(shù)據(jù)傳輸任務(wù)發(fā)送至第二dma控制器,以便獲取第二dma控制器在監(jiān)測(cè)到其本地的第二數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件后,發(fā)送的第二讀請(qǐng)求,然后響應(yīng)第二讀請(qǐng)求,以將從第一主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù)發(fā)送至第二dma控制器;第二讀請(qǐng)求為第二dma控制器將數(shù)據(jù)傳輸任務(wù)拆分得到。
35、第三方面,本技術(shù)公開(kāi)了一種電子設(shè)備,包括:
36、存儲(chǔ)器,用于保存計(jì)算機(jī)程序;
37、處理器,用于執(zhí)行計(jì)算機(jī)程序,以實(shí)現(xiàn)前述公開(kāi)的跨pcie域數(shù)據(jù)傳輸方法的步驟。
38、第四方面,本技術(shù)公開(kāi)了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),用于存儲(chǔ)計(jì)算機(jī)程序;其中,計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述公開(kāi)的跨pcie域數(shù)據(jù)傳輸方法的步驟。
39、可見(jiàn),本技術(shù)的方法應(yīng)用于第一pcie域中的第一dma控制器,第一dma控制器與第一主機(jī)連接,第一dma控制器首先解析第一主機(jī)發(fā)送的數(shù)據(jù)傳輸任務(wù)以得到任務(wù)類型和與第一主機(jī)進(jìn)行通信的第二主機(jī),并基于任務(wù)類型在第一主機(jī)和第二主機(jī)中確定出數(shù)據(jù)接收端;若第一主機(jī)為數(shù)據(jù)接收端,則將數(shù)據(jù)傳輸任務(wù)拆分為若干個(gè)第一讀請(qǐng)求,并在監(jiān)測(cè)到本地的第一數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件時(shí),向第二主機(jī)對(duì)應(yīng)的第二pcie域中的第二dma控制器發(fā)送第一讀請(qǐng)求,以便接收第二dma控制器從第二主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù);若第二主機(jī)為數(shù)據(jù)接收端,則將數(shù)據(jù)傳輸任務(wù)發(fā)送至第二dma控制器,以便獲取第二dma控制器在監(jiān)測(cè)到其本地的第二數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件后,發(fā)送的第二讀請(qǐng)求,然后響應(yīng)第二讀請(qǐng)求,以將從第一主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù)發(fā)送至第二dma控制器;第二讀請(qǐng)求為第二dma控制器將數(shù)據(jù)傳輸任務(wù)拆分得到。
40、有益效果:本技術(shù)中當(dāng)?shù)谝籶cie域中的第一dma控制器獲取到與之連接的第一主機(jī)發(fā)送的數(shù)據(jù)傳輸任務(wù)后,需要先對(duì)數(shù)據(jù)傳輸任務(wù)進(jìn)行解析以得到任務(wù)類型和與第一主機(jī)進(jìn)行通信的第二主機(jī)。也即本技術(shù)首先需要確定通信雙方,以及確定通信雙方中,誰(shuí)是數(shù)據(jù)傳輸任務(wù)對(duì)應(yīng)的數(shù)據(jù)接收端。如果第一主機(jī)為數(shù)據(jù)接收端,則需要將數(shù)據(jù)傳輸任務(wù)拆分為若干個(gè)第一讀請(qǐng)求,并且第一dma控制器可以實(shí)時(shí)監(jiān)測(cè)本地的第一數(shù)據(jù)緩存的狀態(tài)信息,當(dāng)監(jiān)測(cè)到本地的第一數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件時(shí),則向第二主機(jī)對(duì)應(yīng)的第二pcie域中的第二dma控制器發(fā)送第一讀請(qǐng)求,以便接收第二dma控制器從第二主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù)。也即,當(dāng)所在域的第一數(shù)據(jù)緩存允許接收數(shù)據(jù)時(shí),才向第二dma控制器發(fā)送讀請(qǐng)求,以接收第二主機(jī)傳輸?shù)臄?shù)據(jù)。如果第二主機(jī)為數(shù)據(jù)接收端,此時(shí)則需要將數(shù)據(jù)傳輸任務(wù)發(fā)送至第二dma控制器,而第二dma控制器可以監(jiān)測(cè)器本地的第二數(shù)據(jù)緩存的狀態(tài),當(dāng)?shù)诙ma控制器在監(jiān)測(cè)到其本地的第二數(shù)據(jù)緩存滿足預(yù)設(shè)數(shù)據(jù)接收條件后才向第一dma控制器發(fā)送第二讀請(qǐng)求,然后第一dma控制器再響應(yīng)第二讀請(qǐng)求,以將從第一主機(jī)的內(nèi)存中讀取到的目標(biāo)數(shù)據(jù)發(fā)送至第二dma控制器,第二讀請(qǐng)求為第二dma控制器將數(shù)據(jù)傳輸任務(wù)拆分得到。也就是說(shuō),本技術(shù)中將數(shù)據(jù)傳輸任務(wù)轉(zhuǎn)移至數(shù)據(jù)接收端對(duì)應(yīng)的dma控制器,當(dāng)該dma控制器監(jiān)測(cè)到其本地的數(shù)據(jù)緩存可以接收數(shù)據(jù)時(shí),才向其余主機(jī)的dma控制器發(fā)出讀請(qǐng)求,從而接收數(shù)據(jù)。如此一來(lái),通過(guò)在數(shù)據(jù)接收端進(jìn)行讀請(qǐng)求的調(diào)度,解決了隊(duì)首阻塞的問(wèn)題,在無(wú)需增加額外緩存資源的情況下,實(shí)現(xiàn)了dma數(shù)據(jù)的無(wú)阻塞傳輸。