王兆輝,沈劍良,張霞,陳艇
(國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心,河南 鄭州450003)
光纖通道(fibre channel,F(xiàn)C)[1]協(xié)議是美國國家標(biāo)準(zhǔn)委員會定義的高速串行通信協(xié)議,由于其傳輸距離遠(yuǎn)、抗干擾能力強等特點而廣泛應(yīng)用在航空航天環(huán)境下的電子指揮、控制、儀器儀表、仿真、信號處理、傳感器以及視頻數(shù)據(jù)分發(fā)等[2]領(lǐng)域,具有高可靠、高容錯和高帶寬的性能指標(biāo)需求,而鏈路聚合技術(shù)是在不改變原設(shè)計架構(gòu)基礎(chǔ)上增加通道有效帶寬的一種常用方案。
鏈路聚合是將離散數(shù)量的多條物理鏈路聚合為一條邏輯鏈路的技術(shù),這是在Internet服務(wù)提供商(Internet service provider,ISP)網(wǎng)絡(luò)中實現(xiàn)高帶寬連接的一種廣泛使用的方法[3]。當(dāng)不存在更高帶寬的技術(shù)時,通過捆綁幾條帶寬較小的鏈路實現(xiàn)帶寬增加是一種廣泛用于高速交換芯片的數(shù)據(jù)鏈路技術(shù)應(yīng)用[4],該技術(shù)可以提升數(shù)據(jù)包傳輸?shù)目缮炜s性和可靠性,大幅降低額外開銷。同時為了實現(xiàn)成本和公平性的平衡,必須在可用鏈路上平均分配數(shù)據(jù)包,否則數(shù)據(jù)包過度集中在少量鏈路上,進(jìn)而造成鏈路有效通道利用效率低下,導(dǎo)致傳輸時延增加,同時擁塞鏈路端點處的緩沖區(qū)溢出也可能導(dǎo)致數(shù)據(jù)包丟失[5]。
本文針對基于FC的交換芯片設(shè)計中鏈路聚合負(fù)載均衡、負(fù)載不均衡以及可靠性差的問題,提出一種動態(tài)負(fù)載均衡(flow adaptive load dalancing,F(xiàn)ALB)鏈路聚合算法,該設(shè)計可以在更加復(fù)雜多變的網(wǎng)絡(luò)環(huán)境中提升對各種聚合鏈路的負(fù)載均衡調(diào)度靈活性、增加實際可用帶寬、提高鏈路聚合技術(shù)的整體功效和系統(tǒng)穩(wěn)定性。
鏈路聚合技術(shù)由于是對子鏈路的“捆綁重組”,在流量傳輸時如何對負(fù)載合理分配是研究的核心難點。在配置好一組鏈路聚合組之后,每條子鏈路的流量負(fù)載不均衡可能會導(dǎo)致部分鏈路擁塞,同時也會造成整體聚合鏈路的實際可用帶寬過低。為了避免這種情況,系統(tǒng)需要在多條鏈路上執(zhí)行負(fù)載的均衡分配[6],提升負(fù)載均衡算法的均衡性和可靠性是優(yōu)化聚合鏈路設(shè)計的主要研究方向[7]。
(1)均衡性
IEEE 802.3ax標(biāo)準(zhǔn)的鏈路聚合控制協(xié)議(link aggregation control protocol,LACP)是關(guān)于動態(tài)鏈路聚合配置的協(xié)議[8],它通過協(xié)議報文鏈路聚合控制協(xié)議數(shù)據(jù)單元(link aggregation control protocol data unit,LACPDU)和相連的設(shè)備交互信息。當(dāng)端口啟用LACP后,端口通過發(fā)送LACPDU給CPU,上報優(yōu)先級、系統(tǒng)MAC地址、端口的優(yōu)先級、端口號和操作指令等信息[9-10],然后CPU再根據(jù)這些端口和鏈路信息對數(shù)據(jù)包路由傳輸動態(tài)調(diào)度,但是該協(xié)議僅支持以太網(wǎng)協(xié)議傳輸?shù)脑O(shè)備,如何在基于FC協(xié)議的交換設(shè)備中通過LACP進(jìn)行動態(tài)鏈路聚合還少有相關(guān)機構(gòu)研究。而TFRC(TCP-friendly rate control)算法是一種針對視頻流數(shù)據(jù)傳輸?shù)恼{(diào)度算法[11],該算法使用傳輸速率作為鏈路擁塞控制的基礎(chǔ),并以此來反映鏈路質(zhì)量的動態(tài)變化。通過系統(tǒng)實時獲得的鏈路傳輸速率,可以做到對各鏈路的動態(tài)調(diào)度??梢杂行У靥岣哝溌穾挷⒈O(jiān)控鏈路狀態(tài)。但是由于該算法僅針對視頻流數(shù)據(jù),在擁塞控制的基本單元選擇上不適用于FC交換網(wǎng)絡(luò)。
(2)可靠性
Akbari等[12]提出的STreLo算法是用于在聚合鏈路存在的情況下定位鏈路故障,該算法使用分段路由,通過發(fā)送周期探測包來定位鏈路的故障位置,保證鏈路的可靠性,具有毫秒級的定位速度和可擴展性,但同時也存在功耗大、設(shè)計復(fù)雜的不足,在對于一些拓?fù)浜唵蔚木酆湘溌方M中的實用性較低。Wenzel等[13]提出的單獨的分發(fā)策略方案,可以在聚合鏈路部分失敗的情況下通過引用備份鏈路來保障整個鏈路組的正常運作,具有高度的靈活性,但同時增加備用鏈路也意味著資源開銷的增加。在目前實際工程設(shè)計中,鏈路聚合的主流設(shè)計還是采用哈希算法對子鏈路進(jìn)行靜態(tài)權(quán)重配置,隨著技術(shù)的不斷發(fā)展,對于聚合鏈路的實際可用帶寬比要求不斷提高,需要對傳統(tǒng)靜態(tài)負(fù)載均衡算法進(jìn)行平衡性和可靠性優(yōu)化。
本文根據(jù)LACP的動態(tài)交互和備份鏈路設(shè)計思想,結(jié)合FC協(xié)議特點,提出了動態(tài)負(fù)載均衡算法FALB,可靠性方面提出斷鏈重配置機制,保證在個別子鏈路出現(xiàn)掉鏈的情況時不影響整個鏈路組的數(shù)據(jù)傳輸,均衡性方面支持流量自適應(yīng)的負(fù)載均衡調(diào)度,實驗表明可以在多種流量轉(zhuǎn)發(fā)模式下均收斂到95%以上的有效帶寬比,并通過了多種可靠性功能驗證。
本節(jié)首先介紹基于FC協(xié)議的動態(tài)鏈路聚合整體設(shè)計思路,然后介紹FALB負(fù)載均衡調(diào)度算法,本文針對FC協(xié)議報文特點,通過流量監(jiān)控加哈希條目重分配的方式實現(xiàn)基于流量的動態(tài)負(fù)載均衡。
由于需要對子鏈路的負(fù)載分配權(quán)重進(jìn)行動態(tài)調(diào)整,所以如何設(shè)計流量監(jiān)控和負(fù)載均衡算法是核心要點。為了實現(xiàn)基于動態(tài)的負(fù)載均衡,本設(shè)計采用流量監(jiān)控反饋和鏈路權(quán)重計算的方式實時負(fù)載調(diào)整,整體設(shè)計框架如圖1所示。首先配置好整個鏈路聚合組的子鏈路通道端口號,在未有流量通過時平均分配哈希條目權(quán)重,在有流量通過鏈路組子鏈路進(jìn)行路由傳輸時,對每個子鏈路的通道入端口進(jìn)行流量統(tǒng)計和狀態(tài)監(jiān)控,并將每個端口的狀態(tài)信息數(shù)據(jù)實時上傳控制平面。
圖1 聚合鏈路組設(shè)計整體框架
在數(shù)據(jù)包進(jìn)入聚合鏈路組后首先進(jìn)行包頭字段處理。FC協(xié)議包頭字段格式如圖2所示,F(xiàn)C-FS-4協(xié)議規(guī)定最大可支持2 148 bit(不含擴展幀頭)的FC協(xié)議報文。為了提取數(shù)據(jù)包路由指示信息,保證數(shù)據(jù)包的傳輸序列不變,本文中選取包頭域段中的D_ID和S_ID作為哈希函數(shù)的計算輸入值,域段D_ID表示數(shù)據(jù)包的目的地址,S_ID則表示數(shù)據(jù)包的源地址,根據(jù)兩組共48 bit位寬的域段信息可以將每個數(shù)據(jù)包的次序定位,以保證不會出現(xiàn)數(shù)據(jù)包傳輸亂序的情況。在完成包頭字段提取操作后將兩組位寬24 bit的域段值進(jìn)行拼接后作為每個數(shù)據(jù)包的哈希函數(shù)輸入值,哈希表共設(shè)置256個條目值作為每條子鏈路的映射地址,通過對這256個條目的分配來決定每條子通道的負(fù)載分配權(quán)重。在流量監(jiān)控方面采用對每條子鏈路端口的進(jìn)包數(shù)進(jìn)行統(tǒng)計并上傳,根據(jù)各子鏈路的負(fù)載情況進(jìn)行調(diào)度重配置后實現(xiàn)對哈希輸出條目映射域的動態(tài)控制。
圖2 FC協(xié)議包頭字段格式
由于是哈希查表結(jié)果決定具體每條子鏈路的負(fù)載分配方案,所以動態(tài)調(diào)度算法是整個聚合鏈路的核心設(shè)計。FALB動態(tài)調(diào)度算法的設(shè)計是通過計算并更新每條子鏈路對應(yīng)的哈希條目地址權(quán)重值來實現(xiàn)負(fù)載的動態(tài)均衡配置。這里首先計算每條子鏈路的端口負(fù)載速率,記每條子鏈路的端口速率為Xt,Xt的計算式如式(1)所示:
其中,Xt表示第t個子物理鏈路的端口負(fù)載速率,St表示第t個子物理鏈路的端口負(fù)載長度,T表示時鐘周期。根據(jù)從控制平面中得到的端口速率數(shù)值反饋,權(quán)重調(diào)度算法可以得到每個子鏈路的哈希地址條目有效值Pt,其計算式如式(2)所示:
其中,R代表總哈希條目值,c代表敏感系數(shù),流量自適應(yīng)的負(fù)載均衡效果受敏感系數(shù)的影響,取值為1時為完全動態(tài)負(fù)載均衡(默認(rèn)為1),根據(jù)每時刻的Pt值對哈希查表的結(jié)果條目值映射域變化實現(xiàn)動態(tài)的負(fù)載均衡控制。具體流程如圖3所示,首先提取S_ID和D_ID的輸入值,然后根據(jù)式(2)計算每條子鏈路的哈希有效條目值(Pt),當(dāng)有流量通過入端口時就會觸發(fā)流量監(jiān)控模塊,此時會將各子通道的流量數(shù)據(jù)上傳CPU并重新計算Pt值,如果不變則不改變子鏈路通道的哈希條目值映射范圍,如果Pt值改變則重新計算和分配哈希條目的地址映射。
圖3 流量監(jiān)控調(diào)度流程
可靠性優(yōu)化方面,為了保證鏈路的穩(wěn)定性,設(shè)計了斷鏈重分配機制,如圖4所示。每條子鏈路對應(yīng)一段哈希地址的映射域。由于該調(diào)度算法可以實時監(jiān)控每條子鏈路的流量情況,所以當(dāng)其中一條或幾條鏈路出現(xiàn)故障時,該機制可以使故障鏈路的映射賦值使能關(guān)閉,并將屬于該鏈路的哈希映射地址平均分配給該鏈路組的其他成員,同時根據(jù)目前已建鏈的子鏈路數(shù)重新分配哈希表的條目地址映射,從而不影響整個鏈路組的數(shù)據(jù)傳輸。由于斷鏈后僅僅是將問題鏈路的映射使能位關(guān)閉而其物理端口號仍屬于原聚合鏈路組,所以當(dāng)故障排除完畢后,可以立即恢復(fù)該鏈路的正常工作狀態(tài),節(jié)省了二次配置的時間,同時也提升了整體鏈路組的可靠性。
圖4 斷鏈重分配機制
本文實驗使用數(shù)據(jù)仿真加FPGA功能驗證作為實驗設(shè)計方案,仿真使用Vivado驗證平臺對基礎(chǔ)功能模塊進(jìn)行時序分析驗證,F(xiàn)PGA驗證使用Xilinx Virtex UltraScale440的FPGA板卡作為本實驗的環(huán)境開發(fā)板卡和Xgig光纖通道發(fā)包儀作為FC數(shù)據(jù)包發(fā)送設(shè)備來構(gòu)建實驗環(huán)境,并對實驗結(jié)果進(jìn)行了分析。
數(shù)據(jù)仿真方面Vivado仿真驗證平臺是FPGA廠商賽靈思公司2012年發(fā)布的集成設(shè)計環(huán)境,采用層次化器件編輯器和布局規(guī)劃器設(shè)計可以用于快速綜合和verilog模塊級代碼的邏輯功能仿真和時序分析,本實驗以 Virtex 7vx980tffg1930-2L 為核心芯片,采用312.5 MHz的時鐘頻率進(jìn)行時序仿真驗證。
Vivado仿真結(jié)果如圖5所示,8條子物理鏈路的聚合鏈路組配置后,設(shè)置隨機類型域特征的S_ID和D_ID值的包頭,共配置8條子通道計數(shù)器(trunk0_num0_cnt0-7),每個計數(shù)器代表每條通路的實際流量情況。結(jié)果顯示正常發(fā)送不同的S_ID和D_ID數(shù)值的FC數(shù)據(jù)包后,每條子通路計數(shù)正常且符合預(yù)期,符合時序功能要求。
圖5 Vivado仿真結(jié)果
由于鏈路聚合技術(shù)是將多條子鏈路整合為一條邏輯電路的技術(shù),所以理論上整合后的鏈路組帶寬應(yīng)該為所有子鏈路帶寬之和,但是實際工程應(yīng)用中,鏈路組的實際帶寬取決于其負(fù)載均衡特性,所以本實驗分別設(shè)計3種流量發(fā)送模型,具體參數(shù)見表1。通過縮小數(shù)據(jù)包的S_ID和D_ID取值范圍,可以有效地增加流量的集中度(范圍越小,代表流量轉(zhuǎn)發(fā)端口區(qū)域越集中,均衡難度越大)。
表1 流量測試模型
建立如圖6所示實驗連接拓?fù)淠P停瑢蓧K440FPGA開發(fā)板的兩個bank對接后,設(shè)置port0~port7端口為一條聚合鏈路,并采用8 GB/s(滿負(fù)載)的速率發(fā)送數(shù)據(jù)包,計算每組3種模式的有效帶寬比(實際有效帶寬與理論帶寬之比)。實驗結(jié)果如圖7所示,其中橫軸為時間點,縱軸為聚合鏈路組的有效帶寬比。
圖6 實驗連接拓?fù)?/p>
圖7 FALB負(fù)載均衡算法實驗結(jié)果
根據(jù)實驗數(shù)據(jù)結(jié)果可以看出,在發(fā)送測試數(shù)據(jù)流時兩種算法的流量負(fù)載均衡效果區(qū)別明顯,隨著流量集中度的增加(模式1~模式3),傳統(tǒng)靜態(tài)負(fù)載均衡算法的均衡性不斷下降,在模式3流量集中度到達(dá)50%時,聚合鏈路組的有效帶寬比下降到50%以下,可以看出隨著流量集中度的增加,傳統(tǒng)靜態(tài)負(fù)載均衡算法的負(fù)載均衡性能在不斷下降,這是由于傳統(tǒng)靜態(tài)負(fù)載均衡算法無法根據(jù)實際流量情況動態(tài)調(diào)整各子鏈路的負(fù)載分配策略而導(dǎo)致負(fù)載分配不均,尤其當(dāng)負(fù)載集中于部分子鏈路時由于無法及時調(diào)整分配策略從而導(dǎo)致有效帶寬的浪費。而FALB在3種模型中均保持80%以上且收斂于95%的有效帶寬比,且3種模式下的變化程度很小,說明該算法無論在高擁擠的還是分布更加發(fā)散的流量模型中均可以保持高效的負(fù)載均衡。實驗結(jié)果表明FALB具有更好的負(fù)載均衡特性和穩(wěn)定性。
在實際工程中,鏈路的可靠性測試是檢驗在遇到常見故障時整體功能的完整性。本節(jié)中設(shè)置了3種測試方法,分別在1 GB/s、2 GB/s、4 GB/s、8 GB/s端口發(fā)包速率下進(jìn)行熱插拔(數(shù)據(jù)包正常發(fā)送過程中光纖端口的拔出和插入)、鏈路成員移除和鏈路成員增加的數(shù)據(jù)包發(fā)送可靠性測試,結(jié)果見表2,在所有支持速率下進(jìn)行的3種可靠性測試均可以正常工作,具有較高的可靠性。
表2 可靠性測試
本文提出一種動態(tài)負(fù)載均衡的FALB調(diào)度算法的鏈路聚合設(shè)計,并最終在FPGA上實現(xiàn),該設(shè)計可以在保證鏈路可靠性的基礎(chǔ)上實現(xiàn)基于流量自適應(yīng)的負(fù)載均衡效果,支持?jǐn)噫溨剡B,提升鏈路傳輸效率。在選擇鏈路時,使用優(yōu)化的動態(tài)平衡算法可以有效地避免子鏈路負(fù)載分配不均所造成的有效帶寬比過低的問題。FALB鏈路聚合算法在相比較于傳統(tǒng)靜態(tài)負(fù)載均衡方案具有更好的負(fù)載均衡效果,可靠性更強,更適用于當(dāng)前流量分布不均、實際帶寬要求更高的網(wǎng)絡(luò)應(yīng)用環(huán)境,未來通過結(jié)合可編程協(xié)議解析技術(shù),還可以使該算法的調(diào)度選擇域由用戶自定義選擇,從而增加整體設(shè)計的安全性和靈活性。