張 蕾,戴錦友
(光纖通信技術(shù)和網(wǎng)絡(luò)國家實(shí)驗(yàn)室烽火網(wǎng)絡(luò)有限公司,武漢 430074)
隨著網(wǎng)絡(luò)上新應(yīng)用的不斷出現(xiàn),對網(wǎng)絡(luò)的服務(wù)質(zhì)量也提出了更新的要求。QoS旨在針對各種應(yīng)用的不同需求,為其提供不同的服務(wù)質(zhì)量,例如為報(bào)文分類和著色,對流量進(jìn)行管理和避免網(wǎng)絡(luò)擁塞等功能,層次化的調(diào)度方式更能靈活地實(shí)現(xiàn)流量的管理,對于先來的報(bào)文可以進(jìn)行1級調(diào)度后,與后來的報(bào)文再次進(jìn)行2級調(diào)度處理,依次往下按自己需求進(jìn)行調(diào)度,使得出去的報(bào)文是最優(yōu)的,這就是層次化的調(diào)度方式。
第五代交換芯片支持3級調(diào)度,由S1,S2和S33個(gè)調(diào)度節(jié)點(diǎn)組成。S1調(diào)度節(jié)點(diǎn)有4個(gè)(S3.0~S3.3,MC-group),S2調(diào)度節(jié)點(diǎn)有3個(gè)(S2.0~S2.2),S1調(diào)度節(jié)點(diǎn)有1個(gè)。3級調(diào)度的意義在于前1個(gè)調(diào)度的輸出隊(duì)列可以作為下個(gè)節(jié)點(diǎn)的輸入隊(duì)列,在這種結(jié)構(gòu)中,S2/S3的輸出隊(duì)列可以作為S1調(diào)度節(jié)點(diǎn)的輸入。
下面來說明隊(duì)列和調(diào)度節(jié)點(diǎn)之間的映射關(guān)系:
1)10個(gè)單播隊(duì)列。4個(gè)單播UC隊(duì)列Q0~Q3用來映射到S3節(jié)點(diǎn),Q4~Q7映射S2節(jié)點(diǎn),或者Q0~Q7全部映射到S2節(jié)點(diǎn)。還有2個(gè)單播隊(duì)列UC直接映射到S1節(jié)點(diǎn)。
2)5個(gè)組播MC隊(duì)列。1個(gè)MC直接用來映射到S1節(jié)點(diǎn),MC Q0~Q3全部映射到S3節(jié)點(diǎn),或者這4個(gè)MC隊(duì)列組成1個(gè)MC Group映射到S1節(jié)點(diǎn),如圖1所示。
圖1 1級調(diào)度結(jié)構(gòu)圖(軟件截圖)
因?yàn)榻粨Q芯片支持的是3級調(diào)度,所以寄存器的配置方式就與其他芯片不一樣,下面會具體分析每個(gè)寄存器的值如何寫入。但是與其他芯片一樣,同樣支持SP,RR,WRR,WERR這4種調(diào)度算法。
下面主要看看各個(gè)相關(guān)寄存器:
1)第1級調(diào)度S3節(jié)點(diǎn)相關(guān)的寄存器為S3_CONFIG,S2_S3_ROUTING和S3_COSWEIGHTS。
其中S3_CONFIG 用來配置 S3.0,S3.1,S3.2,S3.3 等4個(gè)節(jié)點(diǎn)的調(diào)度方式。字段SCHDULING_SLECTTf為8 bit,0 ~1 bit對應(yīng)的是 S3.0,2 ~3 bit對應(yīng)的是 S3.1,4~5 bit對應(yīng)的是 S3.2,5 ~6 bit對應(yīng)的是 S3.3,ROUTE_UC_TO_S2f的1個(gè)bit表示允許S3節(jié)點(diǎn)的單播隊(duì)列映射到S2節(jié)點(diǎn)。因此配置調(diào)度方式的時(shí)候應(yīng)該每個(gè)節(jié)點(diǎn)都應(yīng)該配置到,例如4個(gè)節(jié)點(diǎn)分別配置為SP優(yōu)先級調(diào)度,故寫入寄存器的值應(yīng)該為0x10。
S2_S3_ROUTING寄存器是表示S3節(jié)點(diǎn)和S2節(jié)點(diǎn)隊(duì)列之間的映射關(guān)系,隊(duì)列0~3表示的是S3.0~S3.3映射的4個(gè)組播隊(duì)列,隊(duì)列4~7表示S3.0~S3.3映射過來的4個(gè)單播隊(duì)列UC0~UC3,隊(duì)列8~11表示的是單播隊(duì)列UC4~UC7。
當(dāng)配置好S3節(jié)點(diǎn)的調(diào)度模式為WRR,對應(yīng)隊(duì)列的權(quán)重寫入寄存器S3_COSWEIGHTS。
2)第2級調(diào)度S2節(jié)點(diǎn)相關(guān)的寄存器有S2_CONFIG,S2_COSWEIGHTS。類似地,S2_CONFIG是用來配置節(jié)點(diǎn)的調(diào)度模式。當(dāng)調(diào)度模式為WRR時(shí),用S2_COSWEIGHTS來配置隊(duì)列權(quán)重。地址0~3是節(jié)點(diǎn)S3映射的4個(gè)組播隊(duì)列,地址4~7是S3節(jié)點(diǎn)映射的4個(gè)單播隊(duì)列UC3,地址8~11對應(yīng)的是單播隊(duì)列UC4~UC7。
3)第3級調(diào)度節(jié)點(diǎn)S1相關(guān)寄存器:調(diào)度模式寄存器ESCONFIG和配置權(quán)重COSWEIGHTS。
首先解決隊(duì)列優(yōu)先級映射關(guān)系的問題,通過在代碼的初始化部分增bcm_cosq_config_set函數(shù)完成隊(duì)列初始化映射關(guān)系,保證隊(duì)列0~7對應(yīng)的優(yōu)先級分別為0~7。
bcm_cosq_config_set(uint,8);
當(dāng)然,在初始化部分關(guān)于S2,S3寄存器的初始化也沒有,所以在初始化部分還應(yīng)該加上對寄存器初始化的部分,S2.0和S3配置為RR調(diào)度模式,值分別為0x15和0x55,S2.1,S2.2初始化的時(shí)候不用到,所以值為0x1F。
rval0-0;
soc_reg_filed_set(uint,s3_configr,&rval0,scheduling_selectf,0x55);
rval0-1;
soc_reg_filed_set(uint,s2_configr,&rval1,scheduling_selectf,0x15);
/*S3.0-S3.3 and unitcast queues 4-7 to S2.0*/
COMPOLER_64_ZERO(r64val0);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I0f,0);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I1f,1);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I2f,2);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I3f,3);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I4f,8);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I5f,9);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I6f,10);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I7f,11);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,& r64val0,s3_GROUP_NO_I8f,0x1f);
COMPOLER_64_ZERO(r64val1);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I0f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I1f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I2f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I3f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I4f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I5f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I6f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I7f,0x1f);
soc_reg_filed_set(uint,s2_s3_ROUTINGr,&r64val1,s3_GROUP_NO_I8f,0x1f);
用以上代碼完成了對調(diào)度節(jié)點(diǎn)的初始化配置。
搭建環(huán)境:實(shí)驗(yàn)用到儀表IXIA,6根光纖,在21槽位的上聯(lián)板選擇上聯(lián)端口XE55,XE56,XE57作為實(shí)驗(yàn)端口,XE56,XE57發(fā)包,XE55收包;在儀表的 card1上選擇1,3,5,3個(gè)端口分別用光纖與設(shè)備端口相連。
拓?fù)浣Y(jié)構(gòu)如圖2所示。
圖2 實(shí)驗(yàn)拓?fù)浣Y(jié)構(gòu)
萬兆口XE56,XE57發(fā)單播包,XE55收包。在出端口XE55配置節(jié)點(diǎn)狀態(tài),值得注意的是,單播UC0~3只能映射到S3節(jié)點(diǎn),UC4~7只能映射到S2節(jié)點(diǎn)。
1個(gè)單播UC優(yōu)先級為1映射到S3.1,故應(yīng)該在調(diào)度模式比特寫入0x04,1個(gè)單播UC優(yōu)先級為4映射到節(jié)點(diǎn)S2.0,相應(yīng)的比特值為1。在S3,S2,S1節(jié)點(diǎn)配置調(diào)度模式為RR,見圖3所示。
圖3 端口輪詢收到包(截圖)
2)實(shí)驗(yàn)數(shù)據(jù)2:2個(gè)UC包→S2.0→S1
2個(gè)隊(duì)列優(yōu)先級為4和5,只能映射到S2節(jié)點(diǎn)。在S2,S1節(jié)點(diǎn)配置調(diào)度模式為WRR,權(quán)重比為1∶2。優(yōu)先級為4和5的隊(duì)列分別映射到S2節(jié)點(diǎn)隊(duì)列的8和9,見圖4所示。
圖4 端口收到包的比重為1∶2(截圖)
1個(gè)優(yōu)先級為1的組播包映射到在S3.1,1個(gè)優(yōu)先級為0的單播包映射到S3.0。S3,S2,S1節(jié)點(diǎn)配置調(diào)度模式為SP,見圖5所示。
從以上實(shí)驗(yàn)可以看出多級調(diào)度支持單播隊(duì)列,組播隊(duì)列以及單播和組播的混合隊(duì)列調(diào)度,調(diào)度方式靈活。每級調(diào)度可以采用不同的調(diào)度算法,調(diào)度級數(shù)也靈活多變,可以根據(jù)隊(duì)列需求選擇調(diào)度級數(shù),也就是說多級調(diào)度也支持單級調(diào)度的模式。
圖5 端口收到優(yōu)先級1的組播包(截圖)
本文基于第五代BCM交換芯片,分析了層次化調(diào)度方式的原理,軟件實(shí)現(xiàn)以及其仿真實(shí)現(xiàn)結(jié)果。仿真結(jié)果顯示:對單播組播包,每級調(diào)度節(jié)點(diǎn)采用不同的調(diào)度算法,最后都能實(shí)現(xiàn)優(yōu)先包的輸出。這種層次化的調(diào)度方式可更靈活地實(shí)現(xiàn)流量的管理。
[1]CHETTO H,CHETTO M.Some results of earliest deadline scheduling algorithm[J].IEEE Trans.Software Engineering,1989,15(10):1261-1269.
[2]RFC 2212,Specification of guaranteed quality of service[S].1997.
[3]BAKER T.Stack-based scheduling of real-time processes[J].Journal of Real-Time System,1991,3(1):79-100.
[4]劉勤讓,鄔江興.Internet中QoS的分析理論探討[J].計(jì)算機(jī)科學(xué),2005,32(4):1-3.
[5]劉韻潔,張?jiān)朴?,張智?下一代網(wǎng)絡(luò)服務(wù)質(zhì)量技術(shù)[M].北京:電子工業(yè)出版社,2005.