賀孟
(中國電子科技集團公司第三十研究所 四川 成都 610041)
在網絡通信系統中,為了控制網絡和信道資源的使用,避免網絡和信道出現瓶頸,特別是在多個連接共享網絡信道資源情況下,對每一個連接合理分配其所需的帶寬,進行業務量管理的作用就會更加重要。有關業務帶寬分配有兩種方法:定數論的多路復用和統計的多路復用。其中按照用戶要求的比特率特點將業務劃分為以下幾種主要的類型:恒定比特率(CBR),變比特率(VBR),不指明比特率,可用比特率。
為了適應這些不同業務的流量控制要求,各種流量控制算法被提出和改進。這些算法利用軟件重用性在CPU中實現起來比較容易,但同時也是以犧牲實時性和增加CPU工作負荷為代價的,尤其是在系統CPU工作負荷大的情況下,用軟件實現流量控制算法將大大降低流控單元實時性,這樣在多個連接共享網絡資源時,將很容易造成信道資源浪費,造成擁塞,降低網絡性能。而隨著EDA技術的發展,使用FPGA來實現流量控制器,既可滿足實時流控的要求,也能顯著提高系統性能。
在這篇文章中,首先介紹了常見的幾種流量控制算法,然后針對FPGA的特點提出了一種基于矩陣虛調度算法的令牌桶流量控制機制,最后給出了FPGA實現的結果。
流量控制技術可以確保用戶以合理的速率傳輸數據,是預防網絡擁塞提高網絡性能的一種方法,應用不同的流量控制策略可以解決包交換網絡中諸如流分類問題隊列管理問題,隊列調度問題及流量整形問題。文中提出了一種矩陣虛調度算法,并結合令牌控制技術實現了針對包傳輸和包交換的高效流量控制技術。
漏桶算法是比較常見的一種流量整形算法,該算法強行限制數據的傳輸速率,即數據傳輸速率是固定的參數,顯然這種算法不能有效使用網絡資源,例如當網絡中沒有發生擁塞時,漏桶算法不能使某一個單獨的數據流突發到端口速率。因此漏桶算法對于存在突發特性的流量來說缺乏效率[1]。
在漏桶算法的基礎上提出了令牌桶算法。令牌桶被看作是一個存放令牌的容器,對其預先設定一定的容量,按照預先設定的速率向桶中放置令牌,當桶中令牌滿時多余令牌溢出,令牌桶中令牌量不再增加。與傳統的漏桶算法比較,令牌桶算法的優點是能夠限制突發的流量使數據包以比較均勻的速度向外發送[2]。而基于令牌桶算法的流量控制的效果主要由數據流隊列的令牌分配算法和流量輸出調度算法決定,而為了支持多隊列的網絡輸出要求,又提出了多令牌桶算法來滿足流量控制需求[3]。
硬件實現這兩種算法都較軟件困難,一般是采用對信道進行多令牌調度和對業務源進行漏桶控制的算法。多令牌調度缺點是調度控制復雜,漏桶控制缺點是信道利用率不高。當需要服務的通道和隊列數很多時,這兩種算法的實現都存在資源利用龐大,系統工作頻率不高,設計難度大的缺點。
虛調度算法是通用信元速率算法(GCRA)的一種。GCRA由ITU-T I.371定義,用于判斷用戶流量或網絡流量是否遵守連接合同,即是否滿足一致性。GCRA有兩種等效的算法,分別稱為虛調度算法VS(Virtual Scheduling)和連續狀態漏桶算法CLB (Continuous stateLeakyBucket)。GCRA帶有2個參數:增量 I(Increment)和允許增量極限 L(Limit)[4]。
本文將通用的虛調度算法加以改進,將其應用到包傳輸和交換網絡的輸出端,算法原理如圖1所示。

圖1 虛調度算法模型Fig.1 Model of the virtual scheduling algorithm
1)初始化,當第n組包發起輸出請求時,按輸出隊列要求輸出,同時記錄每包的發送時刻 ta(n),tb(n)。 根據相應的流量參數 I和 L,計算每組包的 n+1包發送時刻 ta(n)+I,tb(n)+I。
2)在時刻 ta(n)+I,tb(n)+I檢查內存中有無待發送包,有則發送并記錄發送時刻 ta(n+1),tb(n+1)和下一包發送時刻 ta(n+1)+I,tb(n+1)+I無則返回初始化。
如在發送時刻有多個序列的包請求發送,ta(n)+I=tb(n)+I,按隊列輸出要求依次發送,同時在每個序列包發送時間檢查下一序列包發送間隔是否在包發送極限要求內,即tb(n)+T≤tb(n)+L,此處T為b序列的第二包實際發送時刻,如在發送極限要求內則發送,如超出發送極限要求,則提升b序列的隊列發送優先級。
針對包傳輸和交換網絡中需支持隊列和通道數越來越多的情況,令牌桶算法已不能滿足網絡的鏈路輸出要求,而且硬件實現非常不易。
而采用虛調度算法進行流量參數控制,一種辦法是為每個隊列建立虛調度算法單元,另一種辦法是采用流的方式對所有隊列進行流量參數計算。前一種當需要服務的序列通道數很多時將消耗大量的資源,且系統工作頻率較低,后一種雖然消耗資源少工作頻率高但計算周期長,信道資源利用率低。
FPGA非常適于各種算數運算和并行處理,同時其邏輯結構非常適于完成矩陣運算,依據這個特性,文中提出了矩陣虛調度算法的令牌桶控制機制,非常易于實現極大數量隊列輸出的流量控制需求的包傳輸和交換網絡QoS算法。
矩陣虛調度算法的模型如圖2,矩陣的行對應帶有虛調度算法單元的令牌,列對應待輸出包。其工作原理就是當多個隊列的數據包或信元進入交換網絡時,即為每個隊列動態分配一個帶有虛調度算法的令牌,矩陣會在一個很短的時間段里完成所有隊列的虛調度算法的計算,根據計算結果來完成令牌桶的動態調度,算法周期短,只要輸出信道允許,幾乎可以實現接近滿帶寬的信道利用。

圖2 矩陣虛調度算法令牌桶調度模型Fig.2 Matrix virtual scheduling calculate decree token bucket scheduling model
該算法的特點是服務的通道和隊列數量大,信道利用率極高,硬件資源消耗小,擴展度高。
首先給出應用該控制器的工作條件:

參數定義:n為輸入連接數;Pi某個連接的峰值數據速率(bps);M 控制器最大輸出數據速率(bps);αi某個連接平均傳輸時間和總的傳輸時間比;
圖3為并發256個連接情況下的K值圖,由圖可知K≥1是定數論的多路復用,K>1是統計的多路復用。同時,平均輸入信源到達率應小于控制器的服務率,即ρ≤1,否則信道將被堵塞[5]。
同時由公式2可知,在輸出總帶寬一定,連接峰值數據速率一定情況下,有效降低傳輸時間比α,能使流量控制器輸入連接數提高。

圖3 K值圖Fig.3 K value figure
事實上,采用窗口調度和業務源漏桶方法,即便上述條件滿足,由于輸入信源的高突發性和高離散性,仍會存在控制器輸出空閑而緩存信元不能及時送出的情況。這里利用FPGA的并行運算和流水線設計的優勢,提出了一個結合令牌桶調度機制,入口出口統計的GCRA虛調度算法矩陣設計模型,幾乎達到了多路復用利用率的理論最大值。
整個流量控制模型分為3個單元:GCRA算法矩陣單元;令牌桶調度輸出隊列單元;信道統計計算單元。
采用令牌桶調度的考慮是輸入信源連接的數量可能非常大,比如ATM交換網路服務的虛連接數可以為幾K條,如果實現對所有連接獨立流控,FPGA的資源不可能滿足,因此采用令牌桶調度機制來動態滿足輸入多連接的流控需求,到達控制器的輸入信源只有從令牌桶獲得令牌才能進入數據緩存待發,理論上可以滿足無數條輸入連接的流控需求。
GCRA虛調度算法的設計方案是:某條合法連接的輸入信源進入網絡后,就會從令牌桶得到一個令牌,并將數據存入數據緩存。
該令牌對應的連接的數據發送間隔應當符合其期望的發送間隔,即以該條連接發送信元時記下該信元的發送時刻,且以此時刻為基準計算出該連接下一個信元應該發送的理論時刻值,在理論發送的時刻的抖動抖動容限內檢查緩存中是否有該條連接的待發信元,有則加入發送隊列。
如在該時刻有多個令牌滿足發送條件,則根據優先級決定發送順序。如果無待發信元,則清除該令牌和連接的對應關系,將該令牌重新放入令牌桶待分配。由此可見,令牌的產生速率不是固定的,而是跟隨輸入信源到達率變化的。
信道統計計算單元是對出入口的連接數據速率進行統計計算,以監測流量控制器是否滿足業務量管理要求,并將統計結果反饋回基本算法單元,以達到動態調整服務隊列的流量的效果。
該流量控制IP核的原理框圖如圖4所示,除用于數據緩存單元的SSRAM外,其他全部在FPGA里實現。基本設計參數為最大輸入連接數n=4 096,令牌桶容量為256個,最小量化刻度為16個系統時鐘周期。

圖4 多通道流量控制IP原理圖Fig.4 Multi-channel flow control IP principle diagram
首先針對每個連接都建立一個配置參數表,該表存放該連接的流控參數權重等信息,該表可以重構動態調整流量參數以實現VBR,當一個合法連接的輸入信源進入網絡后,令牌桶分配單元將為該連接分配一個令牌,同時根據配置參數表的值建立該令牌的運行參數表。
根據FPGA并行運算的特點,建立了一個16×16的GCRA算法矩陣,采用分時復用和流水線設計方法,只需16個基本GCRA算法單元和16個時鐘周期就可以同時對256個令牌完成GCRA運算,判斷出有效的令牌,再根據令牌的運行參數表決定下一個被服務的令牌,并將該令牌對應的虛連接數據從數據緩存單元提出,這些運算調度采用流水線設計都可以在20個系統時鐘發送周期內完成,這樣在當前信元發送時,也就可以計算出下一個要服務的令牌,同時該令牌的數據已在輸出FIFO中準備好,只要信道空閑就可立即發送下一個令牌信元,從而最大限度的利用信道資源。
定時器提供整個模塊的定時和節拍控制信息,所有的子單元必須嚴格按照定時器給出的信息運行以保證時序的準確。
GCRA的基本算法單元是高度模塊化,只需在頂層程序中修改參數就可很方便的修改基本單元數量和運行節拍數,從而改變矩陣的結構,以實現更靈活的令牌桶,滿足各種應用需求[6]。原理框圖如圖5所示。

圖5 GCRA算法單元原理框圖Fig.5 Unit GCRA algorithm principle block diagram
出口入口統計單元對出入口數據速率進行統計計算,并將結果通過主機接口報給上層,當出現輸入信源到達率大于控制器的服務率,數據緩存即將溢出時,既可通知上層軟件干預,也可根據配置參數表的優先級控制字,阻塞低優先級的輸入連接。
根據該方案編寫了FPGA程序,FPGA設計采用vhdl語言,使用Synopsys公司的synplify pro編譯出網表文件,該網表文件可以被后端工具直接調用,在Mentor公司的Questasim環境下完成了功能仿真和驗證。
設計選用了Xilinx公司的spartan-3adsp系列和Virtex-5系列芯片分別進行了電路物理驗證,實現了一個16×16的算法矩陣的流量控制IP核,表1是不同器件平臺的資源消耗情況。由于該IP模塊是全語言設計,并進行了高度模塊化,用戶只需修改相應參數就可以針對不同的網絡隊列數量和器件平臺資源大小改變矩陣規模,以適應實際需求。

表1 FPGA資源利用報告Tab.1 FPGA resource utilization report
文中在研究分析GCRA虛調度算法的基礎上,設計了一個GCRA算法矩陣,并結合令牌桶調度機制在FPGA中實現了一個通用的全硬件多通道流量控制IP核。并在一型網絡接入設備加以應用。該流量控制IP核具有邏輯精簡、運算效率高、占用資源少、模塊化程度高,可擴展性好的特點,可以很方便的嵌入各種網絡通信交換和接入設計中。
[1]張軼博,李偉,雷振明.一種改進的以太網流控算法[J].計算機工程與應用,2005(2):149-153.ZHANG Yi-bo,LI Wei,LEI Zhen-ming.RD-RACE:An improved rate control mechanism in ethernet[J].Computer Engineering and Applications,2005(2):149-153.
[2]李曉利,郭宇春.QoS技術中令牌桶算法實現方式比較[J].中興通信技術,2007,13(7):56-60.LI Xiao-li,GUO Yu-chun.Comparison between token bucket algorithms in QoS technology[J].ZTE Communications,2007,13(7):56-60.
[3]牛淼,蔣林.基于多令牌桶流量整形算法的研究與實現[J].微電子學與計算機,2011,28(11):110-113.NIU Miao,JIANG Lin.Research and design based on multitoken bucket traffic shaping algorithm[J].Microelectronics&Computer,2011,28(11):110-113.
[4]王喆,劉暉,羅進文,等.GCRA及其在PCR中的應用研究與實現[J].蘭州交通大學學報:自然科學版,2005,24(6):79-82.WANG Zhe,LIU Hui,LUO Jin-wen,et al.Study of GCRA and its application in PCR[J].Journal of Lanzhou Jiaotong University:NaturalSciences,2005,24(6):79-82.
[5]汪一鳴,吳紅衛,翁桂榮,等.ATM網絡中VBR復用器的硬件實現[J].通信技術,2002(2):49-52.WANGYi-ming,WUHong-wei,WENGGui-rong,etal.Hardware implementation of VBR multiplexer in ATM networks[J].Communications Technology,2002(2):49-52.
[6]劉宇.異步傳輸模式測試儀中業務量整形器的實現[J].國外電子測量技術,2008,27(4):21-22.LIU Yu.Realization of traffic shaperin ATM tester[J].Foreign Electronic Measurement Technology,2008,27(4):21-22.