徐金波,常俊勝,李 琰
(國防科技大學計算機學院,湖南 長沙 410073)
隨著高性能計算機系統HPC(High Performance Computer)計算速度從千萬億次級(P級,Petascale)向百億億次級(E級,Exascale)的不斷提升[1 - 3],微處理器芯片和互連網絡芯片所需處理的數據量呈指數級上升。通常每個ASIC(Application Specific Integrated Circuit)芯片需要使用多個處理部件對多個輸入數據源進行處理,這涉及到多個數據隊列的調度問題。
數據隊列調度的類型和調度方法有多種分類方式[4 - 6]。按照輸出隊列數量來分類,有多輸入單輸出調度、多輸入多輸出調度;按照服務質量來分類,有優先級隊列PQ(Priority Queueing)、公平隊列FQ(Fair Queueing)[7]、加權公平隊列WFQ(Weighted Fair Queueing)[8 - 10]、加權循環調度WRR(Weighted Round Robin)[11]、差額加權循環調度DWRR(Deficit Weighted Round Robin)[12]、可變加權循環調度VWRR(Variably Weighted Round Robin)[13]、通用循環調度URR(Uniform Round Robin)[14]等。對于ASIC芯片片內的多輸入多輸出調度問題,已有的調度方法存在一定的限制或不足。有的方法僅能完成單輸出的調度;有的方法不能保證所有輸入數據都能夠得到合理的資源,甚至會餓死;有的方法無法使高優先級的輸入隊列得到優先調度;有的方法由于算法較復雜而不適合于ASIC芯片邏輯實現。
本文針對高性能計算領域的芯片內數據傳輸問題,提出一種支持多優先級多輸出通道的數據隊列調度方法,用于將多個輸入數據源的數據流根據多個輸出隊列的資源占用情況進行科學調度,實現公平高效和支持多種服務等級的任務分發。本文方法的主要優勢如下:
(1)適用范圍廣。通過調整配置參數,該方法既可以實現完全公平均衡的隨機分發模式,也可以實現多種優先級的區分服務質量的模式。
(2)對于隨機模式,隨機分發模式下處于空閑狀態的多個輸出通道將會輪流接收輸入源的輸入數據。
(3)對于區分服務質量模式,所有輸入源、輸出通道被劃分為不同優先級,使某組輸出通道只接收對應優先級的輸入源的數據。
(4)硬件實現簡單,代價小。將所有輸出通道的資源狀態信息整合在同一個仲裁器中,從而使得所有輸入數據源只使用一個仲裁器即可實現向所有輸出通道的任務調度,適用于ASIC芯片邏輯實現。
通過將所有輸出通道的資源狀態信息整合在同一個仲裁器中,從而使得所有輸入數據源只使用一個仲裁器即可實現向所有輸出通道的任務調度。該仲裁器在對多個請求進行仲裁的時候,需要以輸出通道的資源狀態信息為指導,以決定應該將仲裁應答返回給哪一個請求,以及該得到應答的輸入數據應該分發到哪一個輸出通道。對于隨機分發模式,所有輸出通道的資源狀態信息將對所有的輸入源有指導意義,處于空閑狀態的輸出通道將會輪流接收輸入數據;對于區分服務質量的模式,不同的輸出通道具有不同的優先級,某一優先級的輸出通道的資源狀態信息只對對應優先級的輸入源有效,這一輸出通道只接收對應優先級的輸入源的數據。
記輸入數據源的數量為n,n個輸入源依次為{I0,I1,I2,…,In-1};輸出通道的數量為m,m個輸出通道依次為{O0,O1,O2,…,Om-1}。根據控制參數mode_sel選擇采用隨機分發模式或區分服務質量模式進行調度。控制參數mode_sel為0時,指示當前工作模式為隨機通道模式(Random模式),即處于空閑狀態的輸出通道將會輪流接收輸入數據;控制參數mode_sel為1時,指示當前工作模式為區分服務質量QoS(Quality of Service)模式,即所有輸出通道被劃分為多組具有不同優先級的通道,每組通道的優先級相同,不同組的通道的優先級不同,某組輸出通道將只接收對應優先級的輸入源的數據。記共有d個不同的優先級,配置參數priority_vector0用于配置每個輸入數據源的優先級,依次為{p0,p1,p2,…,pn-1}(其中pi= 0,1,2,…,d-1;i=0,1,2,…,n-1);配置參數priority_vector1用于配置每個輸出通道的優先級,依次為{q0,q1,q2,…,qm-1};qi= 0,1,2,…,d-1(其中i=0,1,2,…,m-1)。
將mode_sel控制參數配置為0,使得所有的輸入數據源可以公平地使用所有的輸出通道。記n個輸入源的請求向量為{r0,r1,r2,…,rn-1},ri為0或1(i=0,1,2,…,n-1),ri為0時表示第i個輸入源不存在數據請求,ri為1時表示第i個輸入源存在數據請求,所有存在數據請求的輸入源將向一個輪轉仲裁器請求使用輸出通道。記m個輸出通道的忙閑狀態向量為{v0,v1,v2,…,vm-1},vi為0或1(i=0,1,2,…,m-1),vi為0時表示第i個輸出通道處于忙碌狀態,當前無法接收新的數據處理請求,vi為1時表示第i個輸出通道處于空閑狀態,此時可以接收新的數據處理請求。
輪轉仲裁器的仲裁令牌輪轉規則如下:仲裁令牌在完成一次仲裁應答后將會傳遞給當前得到令牌的輸入源的下一個輸入源,即假設Ii得到了仲裁應答,令牌將會傳遞給I(i+1) mod n。
仲裁應答的執行規則如下:如果所有vi均為0,表示所有輸出通道均未空閑,這時所有輸入源都無法得到仲裁應答;當存在至少一個vi為1時,表示至少有一個輸出通道可以接收數據處理請求,假設此時仲裁令牌在Ii位置,如果ri為1,表示Ii存在數據請求,那么Ii將得到仲裁應答;如果ri為0,表示Ii不存在數據請求,那么依次向后查看Ii+1,Ii+2,Ii+3,…,In-1,I0,I1,Ii-1,Ii之后的第一個存在數據請求的輸入源將得到仲裁應答。
輸出通道的選擇規則如下:使用一個輸出通道選擇令牌實現輸出通道的輪轉,初始狀態下,通道選擇令牌在O0上,第一個得到仲裁應答的輸入源將數據輸出到O0;然后通道選擇令牌會輪轉到O1上,以此類推;當通道選擇令牌輪轉到Oi上時,若vi為1,表示Oi處于空閑狀態,則當前得到仲裁應答的輸入源將選擇Oi作為輸出通道;若vi為0,表示Oi未處于空閑狀態,則當前得到仲裁應答的輸入源將選擇Oi之后的第一個空閑的輸出通道(如Oi+1空閑,則選擇Oi+1),同時,通道選擇令牌輪轉到下一個輸出通道。
將mode_sel控制參數配置為1,使得某一優先級的輸出通道的資源狀態信息只對對應優先級的輸入源有效,這一輸出通道將只接收對應優先級的輸入源的數據。另外,按照應用需求對priority_vector0參數進行配置,同時對priority_vector1參數進行配置,目的是使得優先級較高的任務可以得到更多的輸出通道。所有的輸入源仍然僅使用一個仲裁器進行數據調度,但不同優先級的輸入源將根據不同的priority_vector0/1參數進行區分。
輪轉仲裁器的仲裁令牌輪轉規則與Random模式相同,具體如下:仲裁令牌在完成一次仲裁應答后將會傳遞給當前得到令牌的輸入源的下一個輸入源,即假設Ii得到了仲裁應答,令牌將會傳遞給I(i+1) mod n。
仲裁應答的執行規則如下:如果所有vi均為0,表示所有輸出通道均未空閑,這時所有輸入源都無法得到仲裁應答;當存在至少一個vi為1時,表示至少有一個輸出通道可以接收數據處理請求,假設此時仲裁令牌在Ii位置,如果ri為1且所有與pi相同的qj對應的輸出通道Oj中存在一個空閑通道,即vj=1,這表示Ii存在數據請求且支持當前優先級的輸出通道中存在一個空閑通道,那么Ii將得到仲裁應答;如果ri為0,表示Ii不存在數據請求,那么依次向后查看Ii+1,Ii+2,Ii+3,…,In-1,I0,I1,Ii-1,直到找到一個Ik符合如下條件:rk為1且所有與pk相同的qk對應的輸出通道Ok中存在一個空閑通道,即vk=1,則Ik將得到應答。
輸出通道的選擇規則如下:每組具有相同優先級的輸出通道使用各自的輸出通道選擇令牌實現本組內輸出通道的輪轉;初始狀態下,每組具有相同優先級的輸出通道的通道選擇令牌在該組通道的第一個通道上;當該組的某個數據源得到仲裁應答后,若該組優先級的通道選擇令牌所在的輸出通道的vi為1,表示輸出通道Oi處于空閑狀態,則當前得到仲裁應答的輸入源將選擇Oi作為輸出通道;若vi為0,表示Oi未處于空閑狀態,則當前得到仲裁應答的輸入源將選擇Oi之后的本組內的第一個空閑的輸出通道(如Oi+1空閑,則選擇Oi+1),同時,通道選擇令牌輪轉到本組內的下一個輸出通道。
本文所提出的方法可以應用于ASIC芯片內的數據隊列調度,滿足ASIC芯片內多組輸入數據對多個輸出通道資源進行請求的需求。其硬件結構主要由輸入數據隊列、輸出數據隊列、仲裁器、輸出隊列資源感知邏輯和輸出通道選擇邏輯組成。
對于輸入數據隊列,通常為每個輸入通道分配一個輸入數據隊列,用于緩存待仲裁的數據。
同樣地,對于輸出數據隊列,通常為每個輸出通道分配一個輸出數據隊列,用于緩存由仲裁器選出的待處理的數據。
所有輸入數據源只使用一個輪轉仲裁器來實現向所有輸出通道的任務調度。該仲裁器在對多個請求進行仲裁的時候,需要以輸出通道的資源狀態信息為指導,以決定應該將仲裁應答返回給哪一個請求,以及該得到應答的輸入數據應該分發到哪一個輸出通道。輸出通道的資源狀態信息通過輸出隊列資源感知邏輯獲取,而得到應答的輸入數據應該分發到哪一個輸出通道則是由輸出通道選擇邏輯控制。
輸出隊列資源感知邏輯實時對每個輸出隊列的資源使用情況進行計算,并判斷每個輸出隊列是否有足夠的空間來容納得到仲裁的數據。當數據進入某個輸出隊列時,該隊列的資源信用遞減;當數據從該輸出隊列提取出來進行處理時,該隊列的資源信用遞加。每個隊列的資源信用值作為判斷該隊列是否可用的依據,當前信用值大于待放入的數據大小時,即可認為數據可以放入該隊列。
輸出通道選擇邏輯在Random模式與QoS模式下有所不同。在Random模式下,將輪轉選擇空閑的輸出通道作為最終輸出通道;在QoS模式下,不同優先級的數據通道各自獨立進行選擇,每個優先級對各自空閑的輸出通道進行輪轉選擇。
圖1給出了在Random模式下進行數據調度的示意圖。

Figure 1 Illustration of data scheduling in Random mode圖1 Random模式下數據調度示意圖
以10輸入5輸出(即n=10,m=5)的數據調度為例,對Random模式下的數據隊列調度方法進行說明。如圖1所示,初始狀態下,ri=0(i=0,1,2,…,9),vj=1(j=0,1,2,3,4),仲裁器令牌在I0上,通道選擇令牌在O0上,將mode_sel控制參數配置為0進入Random模式。
(1)T0時刻(仲裁器令牌位于無數據請求的輸入源上的情形),r1,r2,r4變為1,由于令牌在I0上,但r0為0,因此I1獲得仲裁應答,r1在得到應答后將變為0;由于通道選擇令牌在O0上,且v0為1,因此獲得應答的I1將選擇O0輸出,v0將變為0;同時,仲裁器令牌輪轉到I2上,通道選擇令牌輪轉到O1上。
(2)T1時刻(仲裁器令牌位于有數據請求的輸入源上的情形),r2,r4仍在等待輪轉仲裁器應答,因此r2,r4仍為1,另外,r1由于出現了新的數據請求而再次變為1,r6也因為有數據請求而變為1;由于仲裁器令牌在I2上,且r2為1,因此I2獲得仲裁應答,r2在得到應答后將變為0;由于通道選擇令牌在O1上,且v1為1,因此獲得應答的I2將選擇O1輸出,v1將變為0;同時,仲裁器令牌輪轉到I3上,通道選擇令牌輪轉到O2上。
(3)T2時刻(通道選擇令牌位于非空閑的輸出通道上的情形),經過一段時間后,部分輸出通道可能變為非空閑狀態,假設此時只有v0,v2為1,另外,r0,r3,r4,r6為1,仲裁器令牌在I7上,通道選擇令牌在O3上;由于r7為0,仲裁器令牌在I7上,因此I0獲得仲裁應答,r0在得到應答后將變為0;由于通道選擇令牌在O3上,但v3為0,因此獲得應答的I0將選擇下一個空閑的O0輸出,v0將變為0;同時,仲裁器令牌輪轉到I1上,通道選擇令牌輪轉到O1上。
以此類推,輪轉仲裁器持續進行調度作業。
圖2給出了在QoS模式下進行數據調度的示意圖。

Figure 2 Illustration of data scheduling in QoS mode圖2 QoS模式下數據調度示意圖
如圖2所示,初始狀態下,ri=0(i=0,1,2,…,9),vj=1(j=0,1,2,3,4),仲裁器令牌在I0上,通道選擇令牌在O0上。首先將mode_sel控制參數配置為1以進入QoS模式;其次將priority_vector0配置為{0,0,0,0,0,1,1,1,1,1},即I0,I1,I2,I3,I4的優先級為0,I5,I6,I7,I8,I9的優先級為1(假設共支持2種優先級);然后將priority_vector1配置為{0,0,0,1,1},即O0,O1,O2可接收優先級為0的輸入數據,O3,O4可接收優先級為1的輸入數據。
(1)T0時刻(仲裁器令牌位于無數據請求的輸入源上的情形),r1,r2,r4變為1,由于令牌在I0上,但r0為0,因此I1獲得仲裁應答,r1在得到應答后將變為0;由于I1的優先級為0,而優先級為0的通道選擇令牌在O0上,且v0為1,因此獲得應答的I1將選擇O0輸出,v0將變為0;同時,仲裁器令牌輪轉到I2上,優先級0的通道選擇令牌輪轉到O1上,優先級1的通道選擇令牌仍位于O3上。
(2)T1時刻(仲裁器令牌位于有數據請求的輸入源上的情形),r2,r4仍在等待輪轉仲裁器應答,因此r2,r4仍為1,另外,r1由于出現了新的數據請求而再次變為1,r6也因為有數據請求而變為1;由于仲裁器令牌在I2上,且r2為1,因此I2獲得仲裁應答,r2在得到應答后將變為0;由于I2的優先級為0,而優先級為0的通道選擇令牌在O1上,且v1為1,因此獲得應答的I2將選擇O1輸出,v1將變為0;同時,仲裁器令牌輪轉到I3上,優先級0的通道選擇令牌輪轉到O2上,優先級1的通道選擇令牌仍位于O3上。
(3)T2時刻(輪轉仲裁器應答從優先級0切換到優先級1的情形),若r1,r4,r6為1,由于仲裁器令牌在I3上,但r3為0,因此I4獲得仲裁應答,r4在得到應答后將變為0;由于I4的優先級為1,而優先級為1的通道選擇令牌在O3上,且v3為1,因此獲得應答的I4將選擇O3輸出,v3將變為0;同時,仲裁器令牌輪轉到I5上,優先級0的通道選擇令牌仍保持在O2上,由于優先級1的輸出通道只有O3,因此優先級1的通道選擇令牌仍位于O3上。
(4)T3時刻(優先級1無通道空閑的情形),若r1,r6為1,由于仲裁器令牌在I5上,I5的優先級為1,而可以接收優先級1的輸入請求的輸出通道只有O3,且未處于空閑狀態,因此r6為1的I6也無法獲得仲裁應答,進而,優先級為0的I1得到了仲裁應答,r1在得到應答后將變為0;由于I1的優先級為0,而優先級為0的通道選擇令牌在O2上,且v2為1,因此獲得應答的I1將選擇O2輸出,v2將變為0;同時,仲裁器令牌輪轉到I2上,優先級0的通道選擇令牌輪轉到O0上,優先級1的通道選擇令牌仍位于O3上。
以此類推,輪轉仲裁器持續進行調度作業。
基于該數據隊列調度方法,本文在天河超級計算機系統的網絡接口芯片中對軟硬件接口數據隊列的調度進行了優化,并在軟模擬環境、硬件仿真環境以及FPGA驗證環境中進行了測試。
在天河超級計算機系統的網絡接口芯片中,軟件將作業編譯為大量描述符指令發送給芯片進行處理。多個線程之間的描述符指令需要通過合理的任務調度以達到公平性或實現QoS需求。為了實現更高的吞吐率,網絡接口芯片提供2套描述符處理部件對描述符進行處理。當系統不存在QoS需求時,2套處理部件以負載均衡的方式同時工作,可以達到提高系統吞吐率的目的;當系統存在QoS需求時,2套部件配置不同的優先級,分別接收不同優先級的線程的描述符指令,從而為不同的線程提供不同的服務質量。
為了滿足上述需求,將本文提出的支持多優先級多輸出通道的數據隊列調度方法應用于網絡接口芯片中。該芯片最大可支持64個線程,即存在64個輸入數據隊列,每個數據隊列保存對應線程的描述符指令;數據隊列調度部件與2套數據處理部件之間分別使用1個輸出數據隊列進行數據緩存,因此共有2個輸出數據隊列。仲裁器實現64輸入2輸出的數據仲裁。通過寄存器控制接口實現對調度器工作模式(Random模式或QoS模式)以及優先級參數的配置。數據處理邏輯工作頻率為1 GHz。
為了評價多輸出通道對描述符事務處理速度的優化效果,本節分別測試了使用多輸出通道與單輸出通道時的數據調度時間與描述符處理時間,并進行比較。實驗將數據調度部件配置為Random模式。
本文所提出的調度器硬件設計方案可以支持對輸出通道的開關配置,通過寄存器控制接口可以關閉其中一個輸出通道,將所有數據調度到一套處理部件上進行處理。這種方式可以保證多輸出通道與單輸出通道的處理時間的比較結果是在同樣的實驗環境中獲取的,以保證數據客觀有效。
首先,為了比較多輸出通道與單輸出通道的數據調度時間,需要構建一種測試場景使軟件輸入數據的速度為系統的性能瓶頸,這時,處理部件的處理速度足夠快,以至于輸出通道總是處于可用狀態,從而可以充分反映出多輸出通道與單輸出通道的調度時間的比較結果。本文將所有描述符配置為短消息類型,處理部件在收到這種描述符后不需要執行DMA(Direct Memory Access)內存操作,可以立刻產生數據報文并發送,因此處理速度足夠快,使數據調度部件與處理部件之間的輸出隊列始終可以接收調度部件輸出的數據。圖3給出了64個線程發送并處理短消息描述符所需的時間與描述符數量之間的對應關系。執行時間從描述符進入數據調度部件的輸入隊列開始計算,到數據報文從數據處理部件輸出接口發出為止。可以看出,當系統受限于軟件輸入描述符數據的速度時,雙輸出通道與單輸出通道的執行時間非常接近。例如,1 024個描述符的單通道和雙通道執行時間分別為6 749 ns和6 881 ns,差距為2%;8 192個描述符的單通道和雙通道執行時間分別為51 034 ns和51 621 ns,差距為1.2%;262 144個描述符的單通道和雙通道執行時間分別為1 114 538 ns和1 117 892 ns,差距為3‰。此時,處理部件處理描述符的時間代價為固定的,且輸出通道始終空閑,可以隨時接收仲裁器的輸出數據,這表明雙輸出通道的調度時間與單輸出通道的調度時間是基本接近的。該實驗結果說明,本文提出的多輸出隊列的調度過程產生的額外時間代價非常小。

Figure 3 Comparison of scheduling time between dual-output-channel and single-output-channel圖3 雙輸出通道與單輸出通道的調度時間比較
然后,為了驗證多輸出通道在DMA內存操作事務處理方面相對于單輸出通道的提升,進行如下實驗:每個描述符指令對應一個DMA內存讀取事務,每個DMA事務執行的內存讀取的數據量在64 B~819 200 B隨機變化。在該場景下,處理部件需要更多時間來處理每個描述符。通過使用多輸出通道,可以配置多套處理部件對描述符進行處理,從而提高并行性。圖4給出了64個線程發送并處理DMA類型描述符所需的時間與描述符數量之間的對應關系。執行時間從描述符進入數據調度部件的輸入隊列開始計算,到所有數據報文從數據處理部件輸出接口發出為止。可以看出,通過使用雙輸出通道及對應的處理部件,DMA事務的執行時間相對于單輸出通道大大減少。例如,1 024個描述符的單通道和雙通道執行時間分別為15 943 ns和8 523 ns,比值為1.87;16 384個描述符的單通道和雙通道執行時間分別為170 966 ns和90 782 ns,比值為1.88;131 072個描述符的單通道和雙通道執行時間分別為1 064 224 ns和534 928 ns,比值為1.99。原因在于雙輸出通道的數據調度部件可以滿足雙處理部件實現并行處理的數據調度需求。該實驗結果說明,本文提出的多輸出隊列調度方案對于提升芯片處理事務的速度具有顯著作用。

Figure 4 Performance improvement for DMA transactions with dual-output-channel圖4 雙輸出通道對DMA內存事務的性能優化
為了評價本文工作中的多優先級調度方式對服務質量的影響,進行如下實驗:將64個線程分為2組,16個線程配置為較高的優先級0,另外48個線程配置為較低的優先級1。優先級0的線程使用0號輸出通道,優先級1的線程使用1號輸出通道。每個線程發送并處理相同數量的DMA內存讀取描述符,每個描述符所處理的DMA內存數據大小固定為1 024 B。實驗時,數據調度部件配置為QoS模式。
圖5給出了0號通道與1號通道的執行時間比較結果。執行時間從描述符進入數據調度部件的輸入隊列開始計算,到所有數據報文從數據處理部件輸出接口發出為止。可以看出,16個高優先級的線程使用單獨的輸出通道與處理部件,執行時間遠低于另外48個低優先級使用另一組輸出通道的執行時間。例如,1 024個描述符(每個線程發送16個描述符)的0號高優先級通道和1號低優先級通道的執行時間分別為1 583 ns和4 601 ns,比值為1∶2.9;32 768個描述符的0號高優先級通道和1號低優先級通道的執行時間分別為35 796 ns和100 426 ns,比值為1∶2.8;262 144個描述符的0號高優先級通道和1號低優先級通道的執行時間分別為275 670 ns和745 172 ns,比值為1∶2.7。該實驗結果說明,本文提出的多優先級多輸出隊列調度方案可以實現對不同線程的服務質量的區分。

Figure 5 Comparison of execution time between different priority groups in dual-output-channel QoS mode圖5 QoS模式下雙輸出通道的執行時間對比
為了評價本文的多優先級多輸出通道調度器的硬件實現代價,本節將其與單輸出通道的調度器進行了硬件資源情況比較。資源比較工作在自主開發的FPGA驗證平臺上進行,FPGA采用Xilinx Virtex UltraScale VU440芯片。
表1給出了64輸入2輸出調度器與64輸入1輸出調度器的邏輯資源(FPGA芯片的查找表LUT使用情況)統計對比情況;表2給出了64輸入2輸出調度器與64輸入1輸出調度器的寄存器資源統計對比情況。所統計的硬件資源主要包括輸入數據隊列、輸出數據隊列、仲裁器、輸出隊列資源感知邏輯、輸出通道選擇邏輯等部分,處理部件不包含在統計范圍內。結果表明,增加輸出通道需要增加的硬件資源主要包括輸出數據隊列所增加的寄存器資源、輸出隊列資源感知邏輯與輸出通道選擇邏輯所需要的邏輯資源,而仲裁器本身并不需要增加新的資源。所增加的寄存器資源和邏輯資源僅占整個調度器邏輯的一小部分,雙輸出通道與單輸出通道相比所增加的邏輯資源為583,只比單輸出通道的總邏輯資源多1.5%;雙輸出通道與單輸出通道相比所增加的寄存器邏輯資源為286,只比單輸出通道的總邏輯資源多1.4%。

Table 1 Comparison of logic resources between dual-output-channel and single-output-channel表1 雙輸出通道與單輸出通道調度器的邏輯資源(LUT占用情況)對比

Table 2 Comparison of register resources between dual-output-channel and single-output-channel表2 雙輸出通道與單輸出通道調度器的寄存器資源對比
本文針對高性能計算領域的芯片內數據傳輸問題,提出了一種支持多優先級多輸出通道的數據隊列調度方法,用于將多個輸入數據源的數據流根據多個輸出隊列的資源占用情況進行科學調度,實現公平高效和支持多種服務等級的任務分發。所提出的方法適用范圍廣,可以通過調整配置參數,使之工作在Random模式或QoS模式下,將該方法應用于ASIC芯片設計時具有硬件實現代價低的優勢。基于該數據隊列調度方法,在天河超級計算機系統的網絡接口芯片中對軟硬件接口數據隊列的調度進行了優化,并進行了實際測試。實驗結果表明,所實現的多輸出隊列調度器與傳統的單輸出隊列調度器相比并未產生額外的時間代價;多輸出隊列調度方案對于提升芯片處理事務的速度具有顯著作用;同時,配置為QoS模式時可以實現對不同線程的服務質量的區分,且為靈活可配置的;另外,多優先級多輸出通道的仲裁器硬件實現與單輸出通道的仲裁器實現相比,并未增加明顯的硬件實現代價。