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