本發(fā)明涉及通信技術(shù)領(lǐng)域,特別是涉及到一種基于多DMA隊列的數(shù)據(jù)傳輸方法和裝置。
背景技術(shù):
傳統(tǒng)的虛擬化技術(shù),是通過軟件模擬共享和虛擬化網(wǎng)絡適配器的一個物理端口,以滿足虛擬機的輸入/輸出(I/O)需求。模擬軟件的多個層為虛擬機作了I/O決策,因此導致環(huán)境中出現(xiàn)瓶頸并影響I/O性能,從而影響到一臺物理服務器上運行的虛擬機數(shù)量以均衡系統(tǒng)的I/O性能。隨著虛擬化技術(shù)的發(fā)展,虛擬機和容器技術(shù)希望能直接操作直接內(nèi)存訪問(Direct Memory Access,DMA)隊列來提高系統(tǒng)性能,減少時延。特別是容器技術(shù)出現(xiàn)以后,一臺物理服務器上跑的并發(fā)的應用更多,希望硬件支持更多的DMA隊列。
在基于多DMA隊列進行數(shù)據(jù)傳輸時,每個DMA隊列均參與數(shù)據(jù)傳輸和調(diào)度,即DMA隊列接收到數(shù)據(jù)后,向服務質(zhì)量(QOS)發(fā)送數(shù)據(jù)傳輸請求,QOS通過對各個DMA隊列進行調(diào)度來控制數(shù)據(jù)傳輸。雖然這些DMA隊列同時工作的時候,每個DMA隊列需要支持的吞吐量很小,但同時為了滿足傳統(tǒng)的應用場景,硬件DMA隊列設計仍然必須支持線速,這就造成硬件邏輯資源的大量消耗。
比如在40G網(wǎng)卡的應用中,設計要求支持4000個DMA隊列,每個DMA隊列按照40G線速來設計,那么一個DMA隊列的傳輸帶寬可以在1M~40G間配置,這個跨度帶來的硬件資源消耗包括:每個DMA隊列的硬件緩存需要按照40G配置,消耗的緩存與吞吐量成正比。而在對DMA隊列做限定速率的時候,速度計量器和比較器也需要按照40G來設計。除了硬件資源消耗以外,由于要考慮1M和40G的DMA隊列同時存在的不平衡性,設計上和驗證上都會有相當?shù)膹碗s性。在上述40G網(wǎng)卡的示例中,支持4000個DMA隊列所占用的硬件資源是相當巨大的,從而極大的增大了芯片的面積和功耗。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的為提供一種基于多DMA隊列的數(shù)據(jù)傳輸方法和裝置,旨在解決基于多DMA隊列進行數(shù)據(jù)傳輸時對硬件資源消耗大的技術(shù)問題。
為達以上目的,本發(fā)明提出一種基于多DMA隊列的數(shù)據(jù)傳輸方法,所述方法包括以下步驟:
配置一級DMA隊列和二級DMA隊列,為所述一級DMA隊列分配至少一個二級DMA隊列;
通過所述一級DMA隊列獲取數(shù)據(jù),將所述數(shù)據(jù)分配給所述一級DMA隊列對應的二級DMA隊列;
通過對所述二級DMA隊列進行調(diào)度來控制數(shù)據(jù)傳輸。
進一步地,所述通過對所述二級DMA隊列進行調(diào)度來控制數(shù)據(jù)傳輸?shù)牟襟E包括:
根據(jù)調(diào)度策略選擇二級DMA隊列,執(zhí)行選中的二級DMA隊列的數(shù)據(jù)傳輸請求;
判斷所述二級DMA隊列的傳輸速率是否超過了限定速率,若是,則掛起所述二級DMA隊列。
進一步地,所述將所述數(shù)據(jù)分配給所述一級DMA隊列對應的二級DMA隊列的步驟包括:
當一個數(shù)據(jù)包括至少兩個部分時,將所述數(shù)據(jù)的各個部分分配給所述一級DMA隊列對應的同一個DMA隊列。
進一步地,所述將所述數(shù)據(jù)分配給所述一級DMA隊列對應的二級DMA隊列的步驟包括:
當一個數(shù)據(jù)包括至少兩個部分時,將所述數(shù)據(jù)的各個部分分別分配給所述一級DMA隊列對應的至少兩個二級DMA隊列,并為所述數(shù)據(jù)的各個部分設置所屬二級DMA隊列之間的關(guān)聯(lián)關(guān)系。
進一步地,所述方法還包括:
當選中的二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,判斷本次傳輸?shù)臄?shù)據(jù)塊是否為一個完整的數(shù)據(jù);
若不是一個完整的數(shù)據(jù),則進一步判斷本次傳輸?shù)臄?shù)據(jù)塊是否是同一個數(shù)據(jù)的最后一部分;
若不是同一個數(shù)據(jù)的最后一部分,則自動將本次傳輸?shù)臄?shù)據(jù)塊所關(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果。
本發(fā)明同時提出一種基于多DMA隊列的數(shù)據(jù)傳輸裝置,所述裝置包括:
隊列配置模塊,用于配置一級DMA隊列和二級DMA隊列,為所述一級DMA隊列分配至少一個二級DMA隊列;
數(shù)據(jù)分配模塊,用于通過所述一級DMA隊列獲取數(shù)據(jù),將所述數(shù)據(jù)分配給所述一級DMA隊列對應的二級DMA隊列;
隊列調(diào)度模塊,用于通過對所述二級DMA隊列進行調(diào)度來控制數(shù)據(jù)傳輸。
進一步地,所述隊列調(diào)度模塊用于:
根據(jù)調(diào)度策略選擇二級DMA隊列,執(zhí)行選中的二級DMA隊列的數(shù)據(jù)傳輸請求;判斷所述二級DMA隊列的傳輸速率是否超過了限定速率,若是,則掛起所述二級DMA隊列。
進一步地,所述數(shù)據(jù)分配模塊用于:
當一個數(shù)據(jù)包括至少兩個部分時,將所述數(shù)據(jù)的各個部分分配給所述一級DMA隊列對應的同一個DMA隊列。
進一步地,所述數(shù)據(jù)分配模塊用于:
當一個數(shù)據(jù)包括至少兩個部分時,將所述數(shù)據(jù)的各個部分分別分配給所述一級DMA隊列對應的至少兩個二級DMA隊列,并為所述數(shù)據(jù)的各個部分設置所屬二級DMA隊列之間的關(guān)聯(lián)關(guān)系。
進一步地,所述隊列調(diào)度模塊還用于:
當選中的二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,判斷本次傳輸?shù)臄?shù)據(jù)塊是否為一個完整的數(shù)據(jù);若不是一個完整的數(shù)據(jù),則進一步判斷本次傳輸?shù)臄?shù)據(jù)塊是否是同一個數(shù)據(jù)的最后一部分;若不是同一個數(shù)據(jù)的最后一部分,則自動將本次傳輸?shù)臄?shù)據(jù)塊包關(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果。
本發(fā)明實施例所提供的一種基于多DMA隊列的數(shù)據(jù)傳輸方法,通過將DMA隊列配置為一級DMA隊列和二級DMA隊列,一級DMA隊列接收數(shù)據(jù)并分配給二級DMA隊列,二級DMA隊列參與后續(xù)的數(shù)據(jù)傳輸和調(diào)度,由于二級DMA隊列的數(shù)據(jù)來自于一級DMA隊列的分配,而同一個一級DMA隊列下可以有多個二級DMA隊列,因此每個二級DMA隊列只需要支持很小的速率,大大減小了每個二級DMA隊列的緩存,從而減小了對硬件資源的消耗,有效節(jié)省了芯片的面積和功耗。同時,使得增加DMA隊列的代價變得可控,可以以較低的成本實現(xiàn)更多的DMA隊列,對虛擬化應用提供了更大的靈活性,并使得硬件能夠更好的支持更細粒度的虛擬化。
附圖說明
圖1是本發(fā)明第一實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法的流程圖;
圖2是本發(fā)明實施例中DMA隊列的結(jié)構(gòu)示意圖;
圖3是本發(fā)明實施例中二級DMA隊列的狀態(tài)轉(zhuǎn)換示意圖;
圖4是本發(fā)明實施例中一級DMA隊列向二級DMA隊列分配數(shù)據(jù)的示意圖;
圖5是本發(fā)明實施例中一級DMA隊列向二級DMA隊列分配數(shù)據(jù)的另一示意圖;
圖6是本發(fā)明第二實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法的流程圖;
圖7是本發(fā)明第三實施例的基于多DMA隊列的數(shù)據(jù)傳輸裝置的模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復數(shù)形式。應該進一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應該理解,當我們稱元件被“連接”或“耦接”到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“耦接”可以包括無線連接或無線耦接。這里使用的措辭“和/或”包括一個或更多個相關(guān)聯(lián)的列出項的全部或任一單元和全部組合。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術(shù)語,應該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。
實施例一
參照圖1,提出本發(fā)明第一實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法,所述方法包括以下步驟:
S11、配置一級DMA隊列和二級DMA隊列,為一級DMA隊列分配至少一個二級DMA隊列。
本發(fā)明實施例中,將傳統(tǒng)的DMA隊列拆分成兩級DMA隊列,分別為一級DMA隊列和二級DMA隊列,可選地,可以將一級DMA隊列稱為客戶隊列,將二級DMA隊列稱為調(diào)度隊列。
一級DMA隊列提供給用戶傳統(tǒng)的DMA隊列操作界面,比如在40G網(wǎng)卡的示例中,每個一級DMA隊列依舊可以被配置成1M~40G之間的任意速率。一級DMA隊列的數(shù)量可以根據(jù)需要配置,如配置兩個、三個或多個一級DMA隊列,如圖2所示,示例性的配置了三個一級DMA隊列,分別為CQ0、CQ1和CQ2。
二級DMA隊列是真正在數(shù)據(jù)通路上參與數(shù)據(jù)傳輸和調(diào)度的隊列,是在數(shù)據(jù)通路上參與操作和仲裁的邏輯單元。換句話說,二級DMA隊列參與服務仲裁,仲裁結(jié)果決定選中哪個二級DMA隊列中的數(shù)據(jù)被執(zhí)行。為每個二級DMA隊列設置限制速率,各個二級DMA隊列的限制速率可以相同也可以不同。二級DMA隊列的數(shù)量可以和一級DMA隊列的數(shù)目一樣多,或者更多,如圖2所示,示例性的配置了六個二級DMA隊列,分別為SQ0、SQ1、SQ2、SQ3、SQ4和SQ5。每個一級隊列需要支持的最高速率=超額配置速率/二級DMA隊列的數(shù)量,超額配置速率一般會高于線速,但是不會高太多,仍然以40G網(wǎng)卡作為示例,如果設定超額配置速率為80G(2倍線速),二級DMA隊列的數(shù)量為4000,那么每個二級DMA隊列只需要支持1M~20M的速率,因此每個二級DMA隊列需要的緩存就很少,而且各二級DMA隊列之間也更均衡。
可以通過建立一級DMA隊列和二級DMA隊列的映射關(guān)系來為每一個一級DMA隊列分配二級DMA隊列,其中,一級DMA隊列和二級DMA隊列的映射關(guān)系可以由軟件來指定或者由硬件通過算法來指定。映射到同一一級DMA隊列的二級DMA隊列的隊列序號可以是連續(xù)的或者是不連續(xù)的,比如二級DMA隊列隊列1、2、3映射到一級DMA隊列1是連續(xù)的,而把二級DMA隊列1、3、5映射到一級DMA隊列1則是不連續(xù)的,連續(xù)的隊列序號映射到同一客戶隊列可以節(jié)省隊列映射的邏輯。如圖2所示,可以將二級DMA隊列SQ0分配給一級DMA隊列CQ0,將二級DMA隊列SQ1,SQ2,SQ3分配給一級DMA隊列CQ1將二級DMA隊列SQ4和SQ5配給一級DMA隊列CQ2。
映射在同一個一級DMA隊列上的所有二級DMA隊列的信用值(credit)和速率合在一起等于該一級DMA隊列的信用值和速率設定。信用值用于帶權(quán)重的優(yōu)先級仲裁或者輪詢仲裁,映射在同一個一級DMA隊列上的不同二級DMA隊列的信用值和速率值(限定速率)可以不一樣。
如圖3所示,二級DMA隊列至少有休眠、激活和掛起三種狀態(tài)。二級DMA隊列被分配給一級DMA隊列后(如在映射到一級DMA隊列后),則從休眠狀態(tài)進入激活狀態(tài);當二級DMA隊列發(fā)送數(shù)據(jù)的傳輸速率超過其限定速率時,二級DMA隊列則從激活狀態(tài)進入掛起狀態(tài);在掛起狀態(tài)下,當滿足解除掛起狀態(tài)的條件時(如掛起持續(xù)預設時間,掛起計時器計時結(jié)束時),二級DMA隊列又從掛起狀態(tài)返回激活狀態(tài);二級DMA隊列在激活和掛起兩個狀態(tài)之間來回轉(zhuǎn)換,直到與一級DMA隊列的映射關(guān)系被取消時,重新回到休眠狀態(tài)。
S12、通過一級DMA隊列獲取數(shù)據(jù),將數(shù)據(jù)分配給該一級DMA隊列對應的二級DMA隊列。
本步驟S12中,一級DMA隊列接收數(shù)據(jù),然后將接收到的數(shù)據(jù)按照預設的分配策略分配給其對應的二級DMA隊列,可選地,一級DMA隊列可以根據(jù)負載均衡原則進行數(shù)據(jù)分配,如將接收到的數(shù)據(jù)按順序分配給各個二級DMA隊列。如圖2所示,一級DMA隊列CQ1接收到D0-D5共六個數(shù)據(jù),其中,將數(shù)據(jù)D0和D3分配給二級DMA隊列SQ1,將數(shù)據(jù)D1和D4分配給二級DMA隊列SQ2,將數(shù)據(jù)D2和D5分配給二級DMA隊列SQ3。
當一個數(shù)據(jù)包括至少兩個部分時,一級DMA隊列可以采用以下兩種分配策略進行數(shù)據(jù)分配:
其一,一級DMA隊列將數(shù)據(jù)的各個部分分配給其對應的同一個DMA隊列。例如,如圖4所示,一級DMA隊列CQ1將一個由D1(1)-D1(3)三部分組成的數(shù)據(jù)打包后全部分配給二級DMA隊列SQ2。
其二,一級DMA隊列將數(shù)據(jù)的各個部分分別分配給一級DMA隊列對應的至少兩個二級DMA隊列,并為該數(shù)據(jù)的各個部分設置所屬二級DMA隊列之間的關(guān)聯(lián)關(guān)系,這種分配策略的優(yōu)點是可以使各個二級DMA隊列的負荷更均衡,而且可以節(jié)省數(shù)據(jù)緩存。例如,如圖5所示,一級DMA隊列CQ1將一個由D1(1)-D1(3)三部分組成的數(shù)據(jù)分別分配給三個二級DMA隊列,其中,D(1)分配給二級DMA隊列SQ2,D1(2)分配給二級DMA隊列SQ3,D1(3)分配給二級DMA隊列SQ1,并且將D1(1)鏈接到D1(2)所屬的二級DMA隊列SQ3,將D1(2)鏈接到D1(3)所屬的二級DMA隊列SQ1,以保證同一個數(shù)據(jù)能連續(xù)地發(fā)出。將同一個數(shù)據(jù)的不同部分按順序分配到不同的二級DMA隊列可以節(jié)省緩存數(shù)據(jù)的空間。
本發(fā)明實施例中,傳輸?shù)臄?shù)據(jù)主要是數(shù)據(jù)報,當然,也可以傳輸其它的數(shù)據(jù)。數(shù)據(jù)報存儲于物理內(nèi)存中時,以數(shù)據(jù)塊的形式存在,在傳輸數(shù)據(jù)報時,只需要傳輸數(shù)據(jù)報所對應的數(shù)據(jù)塊的描述符(或稱控制符)即可,該描述符指示了數(shù)據(jù)報在物理內(nèi)存中的存放位置,也就是說,放入一級DMA隊列和二級DMA隊列的數(shù)據(jù)是數(shù)據(jù)報的描述符。
通常的,每一個數(shù)據(jù)塊中存放一個數(shù)據(jù)報的內(nèi)容,一個指示符指示一個完整的數(shù)據(jù)報,一級DMA隊列接收各個數(shù)據(jù)報的描述符,并將各個數(shù)據(jù)報的描述符分配給對應的二級DMA隊列。
但在某些情況下,一個數(shù)據(jù)報在物理內(nèi)存里的存儲位置可能是離散的,一個數(shù)據(jù)報由至少兩個數(shù)據(jù)塊組成,因此需要至少兩個描述符才能表述一個完整的數(shù)據(jù)報。此時,一級DMA隊列可以將同一數(shù)據(jù)報的不同描述符打包后分配給其對應的同一個二級DMA隊列,也可以將同一數(shù)據(jù)報的不同描述符分別分配給其對應的不同的二級DMA隊列,將同一個數(shù)據(jù)報的不同描述符按順序分配到不同的二級DMA隊列可以節(jié)省緩存描述符的空間。通過建立鏈接關(guān)系來同步同一個數(shù)據(jù)報的不同描述符。一級DMA隊列把描述符分配到二級DMA隊列的分配方式可以隨應用不同而不同。
S13、通過對二級DMA隊列進行調(diào)度來控制數(shù)據(jù)傳輸。
本發(fā)明實施例中,由二級DMA隊列參與數(shù)據(jù)傳輸和調(diào)度。具體的,處于激活狀態(tài)的各個二級DMA隊列向隊列調(diào)度模塊(如QOS)發(fā)送數(shù)據(jù)傳輸請求,隊列調(diào)度模塊根據(jù)調(diào)度策略選擇二級DMA隊列,執(zhí)行選中的二級DMA隊列的數(shù)據(jù)傳輸請求;當該二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,隊列調(diào)度模塊判斷該二級DMA隊列的傳輸速率是否超過了限定速率,若是,則掛起該二級DMA隊列,若否,則繼續(xù)保持該二級DMA隊列處于激活狀態(tài)。處于掛起狀態(tài)的二級DMA隊列不再請求數(shù)據(jù)傳輸,直到滿足解除掛起狀態(tài)的條件時(如掛起持續(xù)預設時間,掛起計時器計時結(jié)束時),二級DMA隊列才從掛起狀態(tài)返回激活狀態(tài)。
本發(fā)明實施例所述的調(diào)度策略可以采用現(xiàn)有技術(shù)的調(diào)度策略,在此不贅述。
進一步地,為了保證被分配給不同的二級DMA隊列的同一數(shù)據(jù)能被完整連續(xù)的傳輸,當選中的二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,隊列調(diào)度模塊還判斷本次傳輸?shù)臄?shù)據(jù)塊是否為一個完整的數(shù)據(jù);若不是一個完整的數(shù)據(jù),則進一步判斷本次傳輸?shù)臄?shù)據(jù)塊是否是同一個數(shù)據(jù)的最后一部分;若不是同一個數(shù)據(jù)的最后一部分,則自動將本次傳輸?shù)臄?shù)據(jù)塊所關(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果。
舉例而言,當傳輸?shù)臄?shù)據(jù)為數(shù)據(jù)報的描述符時,當選中的二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,隊列調(diào)度模塊判斷本次傳輸?shù)拿枋龇欠裰甘玖艘粋€完整的數(shù)據(jù)報;若否,則進一步判斷本次傳輸?shù)拿枋龇欠裰甘就粋€數(shù)據(jù)報的最后一部分;若否,則自動將本次傳輸?shù)拿枋龇P(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果。
例如,在圖5中,當選中二級DMA隊列SQ2傳輸D1(1)后,下一輪調(diào)度時則自動選中二級DMA隊列SQ3傳輸D1(2),再下一輪調(diào)度時則自動選中二級DMA隊列SQ1傳輸D1(3)。
本發(fā)明實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法,通過將DMA隊列配置為一級DMA隊列和二級DMA隊列,一級DMA隊列接收數(shù)據(jù)并分配給二級DMA隊列,二級DMA隊列參與后續(xù)的數(shù)據(jù)傳輸和調(diào)度,由于二級DMA隊列的數(shù)據(jù)來自于一級DMA隊列的分配,而同一個一級DMA隊列下可以有多個二級DMA隊列,因此每個二級DMA隊列只需要支持很小的速率,大大減小了每個二級DMA隊列的緩存,從而減小了對硬件資源的消耗,有效節(jié)省了芯片的面積和功耗。同時,使得增加DMA隊列的代價變得可控,可以以較低的成本實現(xiàn)更多的DMA隊列,對虛擬化應用提供了更大的靈活性,并使得硬件能夠更好的支持更細粒度的虛擬化。
實施例二
參照圖6,提出本發(fā)明第二實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法,本實施例以傳輸數(shù)據(jù)報為例,包括以下步驟:
S21、一級DMA隊列接收數(shù)據(jù)報的描述符。
S22、一級DMA隊列將描述符分配到激活的二級DMA隊列。
其中,一個一級DMA隊列至少分配了一個二級DMA隊列,各一級DMA隊列將各自接收到的描述符分配給其對應的二級DMA隊列。當同一數(shù)據(jù)報由多個描述符指示時,一級DMA隊列可以將同一數(shù)據(jù)報的不同描述符打包后分配給其對應的同一個二級DMA隊列,也可以將同一數(shù)據(jù)報的不同描述符分別分配給其對應的不同的二級DMA隊列。
二級DMA隊列參與后續(xù)的調(diào)度,換句話說,二級DMA隊列參與隊列調(diào)度模塊的服務仲裁,仲裁結(jié)果決定選中哪個二級DMA隊列中的描述符被執(zhí)行。
S23、隊列調(diào)度模塊根據(jù)調(diào)度策略選擇二級DMA隊列,執(zhí)行選中的二級DMA隊列的數(shù)據(jù)傳輸請求。傳輸一次二級DMA隊列請求傳輸?shù)臄?shù)據(jù)報的描述符。
S24、隊列調(diào)度模塊判斷選中的二級DMA隊列的傳輸速率是否超過限定速率。當超過限定速率時,執(zhí)行步驟S25;當沒有超過限定速率時,直接跳到步驟S26。
S25、隊列調(diào)度模塊掛起選中的二級DMA隊列。然后執(zhí)行步驟S26。
處于掛起狀態(tài)的二級DMA隊列不再請求數(shù)據(jù)傳輸,直到滿足解除掛起狀態(tài)的條件時(如掛起持續(xù)預設時間,掛起計時器計時結(jié)束時),二級DMA隊列才從掛起狀態(tài)返回激活狀態(tài)。
S26、隊列調(diào)度模塊判斷本次傳輸?shù)拿枋龇欠裰甘玖艘粋€完整的數(shù)據(jù)報。若是,則返回步驟S23,進行下一輪調(diào)度;若否,則執(zhí)行步驟S27。
S27、隊列調(diào)度模塊判斷本次傳輸?shù)拿枋龇欠裰甘就粋€數(shù)據(jù)報的最后一部分。若是則返回步驟S23,進行下一輪調(diào)度;若否,則執(zhí)行步驟S28。
S28、隊列調(diào)度模塊自動將本次傳輸?shù)拿枋龇P(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果,并返回步驟S23,進行下一輪調(diào)度。
采用本發(fā)明實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法,每個二級DMA隊列只需要支持很小的速率,大大減小了每個二級DMA隊列的緩存,從而減小了對硬件資源的消耗,有效節(jié)省了芯片的面積和功耗。同時,使得增加DMA隊列的代價變得可控,可以以較低的成本實現(xiàn)更多的DMA隊列,對虛擬化應用提供了更大的靈活性,并使得硬件能夠更好的支持更細粒度的虛擬化。
實施例三
參照圖7,提出本發(fā)明第三實施例的基于多DMA隊列的數(shù)據(jù)傳輸裝置,所述裝置包括隊列配置模塊、數(shù)據(jù)分配模塊和隊列調(diào)度模塊,其中:
隊列配置模塊:用于配置一級DMA隊列和二級DMA隊列,為一級DMA隊列分配至少一個二級DMA隊列。
一級DMA隊列提供給用戶傳統(tǒng)的DMA隊列操作界面,二級DMA隊列是真正在數(shù)據(jù)通路上參與數(shù)據(jù)傳輸和隊列調(diào)度模塊的調(diào)度的隊列。隊列配置模塊為每個二級DMA隊列設置了限制速率,各個二級DMA隊列的限制速率可以相同也可以不同。
隊列配置模塊可以通過建立一級DMA隊列和二級DMA隊列的映射關(guān)系來為每一個一級DMA隊列分配二級DMA隊列。如圖2所示,隊列配置模塊可以將二級DMA隊列SQ0分配給一級DMA隊列CQ0,將二級DMA隊列SQ1,SQ2,SQ3分配給一級DMA隊列CQ1將二級DMA隊列SQ4和SQ5配給一級DMA隊列CQ2。
數(shù)據(jù)分配模塊:用于通過一級DMA隊列獲取數(shù)據(jù),將數(shù)據(jù)分配給一級DMA隊列對應的二級DMA隊列。
具體的,數(shù)據(jù)分配模塊通過一級DMA隊列接收數(shù)據(jù),然后將接收到的數(shù)據(jù)按照預設的分配策略分配給其對應的二級DMA隊列,可選地,一級DMA隊列可以根據(jù)負載均衡原則進行數(shù)據(jù)分配,如將接收到的數(shù)據(jù)按順序分配給各個二級DMA隊列。如圖2所示,一級DMA隊列CQ1接收到D0-D5共六個數(shù)據(jù),其中,將數(shù)據(jù)D0和D3分配給二級DMA隊列SQ1,將數(shù)據(jù)D1和D4分配給二級DMA隊列SQ2,將數(shù)據(jù)D2和D5分配給二級DMA隊列SQ3。
當一個數(shù)據(jù)包括至少兩個部分時,一級DMA隊列可以采用以下兩種分配策略進行數(shù)據(jù)分配:
其一,一級DMA隊列將數(shù)據(jù)的各個部分分配給其對應的同一個DMA隊列。例如,如圖4所示,一級DMA隊列CQ1將一個由D1(1)-D1(3)三部分組成的數(shù)據(jù)打包后全部分配給二級DMA隊列SQ2。
其二,一級DMA隊列將數(shù)據(jù)的各個部分分別分配給一級DMA隊列對應的至少兩個二級DMA隊列,并為該數(shù)據(jù)的各個部分設置所屬二級DMA隊列之間的關(guān)聯(lián)關(guān)系,這種分配策略的優(yōu)點是可以使各個二級DMA隊列的負荷更均衡,而且可以節(jié)省數(shù)據(jù)緩存。例如,如圖5所示,一級DMA隊列CQ1將一個由D1(1)-D1(3)三部分組成的數(shù)據(jù)分別分配給三個二級DMA隊列,其中,D(1)分配給二級DMA隊列SQ2,D1(2)分配給二級DMA隊列SQ3,D1(3)分配給二級DMA隊列SQ1,并且將D1(1)鏈接到D1(2)所屬的二級DMA隊列SQ3,將D1(2)鏈接到D1(3)所屬的二級DMA隊列SQ1,以保證同一個數(shù)據(jù)能連續(xù)地發(fā)出。
本發(fā)明實施例中,傳輸?shù)臄?shù)據(jù)主要是數(shù)據(jù)報,當然,也可以傳輸其它的數(shù)據(jù)。數(shù)據(jù)報存儲于物理內(nèi)存中時,以數(shù)據(jù)塊的形式存在,在傳輸數(shù)據(jù)報時,只需要傳輸數(shù)據(jù)報所對應的數(shù)據(jù)塊的描述符(或稱控制符)即可,該描述符指示了數(shù)據(jù)報在物理內(nèi)存中的存放位置,也就是說,放入一級DMA隊列和二級DMA隊列的數(shù)據(jù)是數(shù)據(jù)報的描述符。
通常的,每一個數(shù)據(jù)塊中存放一個數(shù)據(jù)報的內(nèi)容,如圖6所示,數(shù)據(jù)塊0-5中分別存放了數(shù)據(jù)報0-5的內(nèi)容。一級DMA隊列接收各個數(shù)據(jù)報的描述符,并將各個數(shù)據(jù)報的描述符分配給對應的二級DMA隊列。
但在某些情況下,一個數(shù)據(jù)報在物理內(nèi)存里的存儲位置可能是離散的,一個數(shù)據(jù)報由至少兩個數(shù)據(jù)塊組成,因此需要至少兩個描述符才能表述,如圖7所示,數(shù)據(jù)塊(1)-(3)組成一個數(shù)據(jù)報D1。此時,一級DMA隊列可以將同一數(shù)據(jù)報的不同描述符打包后分配給其對應的同一個二級DMA隊列,也可以將同一數(shù)據(jù)報的不同描述符分別分配給其對應的不同的二級DMA隊列。
隊列調(diào)度模塊:用于通過對二級DMA隊列進行調(diào)度來控制數(shù)據(jù)傳輸。
具體的,隊列調(diào)度模塊根據(jù)調(diào)度策略選擇二級DMA隊列,執(zhí)行選中的二級DMA隊列的數(shù)據(jù)傳輸請求;當該二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,隊列調(diào)度模塊判斷該二級DMA隊列的傳輸速率是否超過了限定速率,若是,則掛起該二級DMA隊列,若否,則繼續(xù)保持該二級DMA隊列處于激活狀態(tài)。處于掛起狀態(tài)的二級DMA隊列不再請求數(shù)據(jù)傳輸,直到滿足解除掛起狀態(tài)的條件時(如掛起持續(xù)預設時間,掛起計時器計時結(jié)束時),二級DMA隊列才從掛起狀態(tài)返回激活狀態(tài)。
本發(fā)明實施例所述的調(diào)度策略可以采用現(xiàn)有技術(shù)的調(diào)度策略,在此不贅述。
進一步地,為了保證被分配給不同的二級DMA隊列的同一數(shù)據(jù)能被完整連續(xù)的傳輸,當選中的二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,隊列調(diào)度模塊還判斷本次傳輸?shù)臄?shù)據(jù)塊是否為一個完整的數(shù)據(jù);若不是一個完整的數(shù)據(jù),則進一步判斷本次傳輸?shù)臄?shù)據(jù)塊是否是同一個數(shù)據(jù)的最后一部分;若不是同一個數(shù)據(jù)的最后一部分,則自動將本次傳輸?shù)臄?shù)據(jù)塊所關(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果。
舉例而言,當傳輸?shù)臄?shù)據(jù)為數(shù)據(jù)報的描述符時,當選中的二級DMA隊列的數(shù)據(jù)傳輸請求執(zhí)行完畢后,隊列調(diào)度模塊判斷本次傳輸?shù)拿枋龇欠裰甘玖艘粋€完整的數(shù)據(jù)報;若否,則進一步判斷本次傳輸?shù)拿枋龇欠裰甘就粋€數(shù)據(jù)報的最后一部分;若否,則自動將本次傳輸?shù)拿枋龇P(guān)聯(lián)的二級DMA隊列作為下一輪調(diào)度的選擇結(jié)果。
例如,在圖5中,當選中二級DMA隊列SQ2傳輸D1(1)后,下一輪調(diào)度時則自動選中二級DMA隊列SQ3傳輸D1(2),再下一輪調(diào)度時則自動選中二級DMA隊列SQ1傳輸D1(3)。
本發(fā)明實施例的基于多DMA隊列的數(shù)據(jù)傳輸裝置,通過將DMA隊列配置為一級DMA隊列和二級DMA隊列,一級DMA隊列接收數(shù)據(jù)并分配給二級DMA隊列,二級DMA隊列參與后續(xù)的數(shù)據(jù)傳輸和調(diào)度,由于二級DMA隊列的數(shù)據(jù)來自于一級DMA隊列的分配,而同一個一級DMA隊列下可以有多個二級DMA隊列,因此每個二級DMA隊列只需要支持很小的速率,大大減小了每個二級DMA隊列的緩存,從而減小了對硬件資源的消耗,有效節(jié)省了芯片的面積和功耗。同時,使得增加DMA隊列的代價變得可控,可以以較低的成本實現(xiàn)更多的DMA隊列,對虛擬化應用提供了更大的靈活性,并使得硬件能夠更好的支持更細粒度的虛擬化。
需要說明的是:上述實施例提供的基于多DMA隊列的數(shù)據(jù)傳輸裝置與基于多DMA隊列的數(shù)據(jù)傳輸方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,且方法實施例中的技術(shù)特征在裝置實施例中均對應適用,這里不再贅述。
本發(fā)明實施例的基于多DMA隊列的數(shù)據(jù)傳輸方法和裝置,主要應用于PCIE設備,當然也可以應用于其它設備。
本領(lǐng)域技術(shù)人員可以理解,本發(fā)明包括涉及用于執(zhí)行本申請中所述操作中的一項或多項的設備。這些設備可以為所需的目的而專門設計和制造,或者也可以包括通用計算機中的已知設備。這些設備具有存儲在其內(nèi)的計算機程序,這些計算機程序選擇性地激活或重構(gòu)。這樣的計算機程序可以被存儲在設備(例如,計算機)可讀介質(zhì)中或者存儲在適于存儲電子指令并分別耦聯(lián)到總線的任何類型的介質(zhì)中,所述計算機可讀介質(zhì)包括但不限于任何類型的盤(包括軟盤、硬盤、光盤、CD-ROM、和磁光盤)、ROM(Read-Only Memory,只讀存儲器)、RAM(Random Access Memory,隨機存儲器)、EPROM(Erasable Programmable Read-Only Memory,可擦寫可編程只讀存儲器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)、閃存、磁性卡片或光線卡片。也就是,可讀介質(zhì)包括由設備(例如,計算機)以能夠讀的形式存儲或傳輸信息的任何介質(zhì)。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以用計算機程序指令來實現(xiàn)這些結(jié)構(gòu)圖和/或框圖和/或流圖中的每個框以及這些結(jié)構(gòu)圖和/或框圖和/或流圖中的框的組合。本技術(shù)領(lǐng)域技術(shù)人員可以理解,可以將這些計算機程序指令提供給通用計算機、專業(yè)計算機或其他可編程數(shù)據(jù)處理方法的處理器來實現(xiàn),從而通過計算機或其他可編程數(shù)據(jù)處理方法的處理器來執(zhí)行本發(fā)明公開的結(jié)構(gòu)圖和/或框圖和/或流圖的框或多個框中指定的方案。
本技術(shù)領(lǐng)域技術(shù)人員可以理解,本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的步驟、措施、方案可以被交替、更改、組合或刪除。進一步地,具有本發(fā)明中已經(jīng)討論過的各種操作、方法、流程中的其他步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。進一步地,現(xiàn)有技術(shù)中的具有與本發(fā)明中公開的各種操作、方法、流程中的步驟、措施、方案也可以被交替、更改、重排、分解、組合或刪除。
以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。