以太網(wǎng)流控機(jī)制及其基于VSC7323的實(shí)現(xiàn)
摘要: 本文針對(duì)以太網(wǎng)異步的特性,討論了當(dāng)前業(yè)界使用的避免丟包的方法,并就這些方法中最常用的流控機(jī)制做了具體陳述,并基于VSC7323闡述了具體實(shí)現(xiàn)方式。
本文引用地址:http://www.ex-cimer.com/article/80009.htm關(guān)鍵詞: 以太網(wǎng);丟包;流控;VSC7323
異步以太網(wǎng)中的丟包問(wèn)題
目前廣泛應(yīng)用的以太網(wǎng)仍然基于異步機(jī)制,異步指網(wǎng)絡(luò)中的各個(gè)設(shè)備處于各自獨(dú)立的時(shí)鐘域。
圖1是一種以太網(wǎng)應(yīng)用示例。以太網(wǎng)設(shè)備1和以太網(wǎng)設(shè)備2代表以太網(wǎng)中相互進(jìn)行業(yè)務(wù)傳輸?shù)脑O(shè)備。
圖1 以太網(wǎng)傳輸示例
示例的傳輸機(jī)制如下:設(shè)備1 的待發(fā)送數(shù)據(jù)包存儲(chǔ)在其內(nèi)部發(fā)送緩存中,并基于本設(shè)備的工作時(shí)鐘(OSC1)進(jìn)行發(fā)送。數(shù)據(jù)包進(jìn)入設(shè)備2后,首先經(jīng)過(guò)CDR(時(shí)鐘數(shù)據(jù)恢復(fù)器)的處理,從接收數(shù)據(jù)中提取出時(shí)鐘,并利用此時(shí)鐘,將數(shù)據(jù)包存入其接收緩存中。存入接收緩存的數(shù)據(jù)包經(jīng)過(guò)本設(shè)備上層協(xié)議處理或經(jīng)過(guò)網(wǎng)絡(luò)中其他設(shè)備的傳輸和處理后,假設(shè)這些數(shù)據(jù)包的數(shù)目沒有發(fā)生變化,并且需要經(jīng)過(guò)設(shè)備2傳輸回設(shè)備1。
根據(jù)圖1,設(shè)備1發(fā)出數(shù)據(jù)包是基于本地時(shí)鐘OSC1,設(shè)備2作為接收方,基于從接收到的數(shù)據(jù)包中提取出的時(shí)鐘CLK2,采樣接收數(shù)據(jù)并將其存儲(chǔ)進(jìn)入接收緩存。分析可知,CLK2和OSC1兩時(shí)鐘是同步的。依此同樣可以推知設(shè)備2發(fā)往設(shè)備1的數(shù)據(jù)包傳輸流程。由于以太網(wǎng)異步工作的本質(zhì),OSC1和OSC2作為不同設(shè)備的本地時(shí)鐘,并不能做到完全同頻(以太網(wǎng)設(shè)備的工作時(shí)鐘允許有正負(fù)50ppm的頻差),假設(shè)OSC1的頻率高于OSC2,則設(shè)備2將以比較快的速度在接收口上接收數(shù)據(jù)包,但只能以較慢的速度在發(fā)送口上轉(zhuǎn)發(fā)出去。從而在設(shè)備2上將存在流量的瓶頸,當(dāng)設(shè)備2 的接收緩存存滿后,會(huì)導(dǎo)致丟包。
為了更加清晰的表述問(wèn)題,將設(shè)備2作為一個(gè)黑盒子,并且考慮極限情況,即輸入速率處于最快情況(即設(shè)備1 的工作時(shí)鐘相對(duì)標(biāo)準(zhǔn)時(shí)鐘具有+50ppm的頻差),而輸出速率處于最慢情況(即設(shè)備2的工作時(shí)鐘相對(duì)標(biāo)準(zhǔn)時(shí)鐘具有 -50ppm的頻差)。其工作模式如圖2。
在圖2中,設(shè)備2 的輸入數(shù)據(jù)速率比輸出數(shù)據(jù)速率高,那么部分?jǐn)?shù)據(jù)包只能丟棄。
圖2 簡(jiǎn)化的設(shè)備2工作模式
解決丟包的方案
對(duì)于示例中的設(shè)備2,由于接收數(shù)據(jù)包的速度快于其發(fā)送數(shù)據(jù)包的速率,數(shù)據(jù)包將在緩存中堆積,一定時(shí)間后將發(fā)生溢出并造成數(shù)據(jù)包丟失。為避免丟包,一般有四種解決方法:
·降低設(shè)備1的發(fā)包速率,即增加所發(fā)送的數(shù)據(jù)包之間的IDLE碼的數(shù)目,由于設(shè)備2只需緩存有效數(shù)據(jù)包而無(wú)需存儲(chǔ)IDLE碼,但對(duì)于設(shè)備1而言,IDLE碼需要占據(jù)其發(fā)送時(shí)隙,由此可以補(bǔ)償設(shè)備1和設(shè)備2之間的頻差。
·設(shè)備2把自身的接收緩存的狀態(tài)告知設(shè)備1,設(shè)備1一旦接到設(shè)備2的緩存將滿告警信息,將主動(dòng)暫停發(fā)包一段時(shí)間,從而避免設(shè)備2的緩存溢出。這種緩存告警信息稱為流控信息,而相關(guān)的一套機(jī)制稱為流控機(jī)制。
·采用同步以太網(wǎng)機(jī)制。圖1中,對(duì)于設(shè)備2,如果利用從接收數(shù)據(jù)中提取的時(shí)鐘CLK2代替OSC2作為本設(shè)備的系統(tǒng)時(shí)鐘,則能實(shí)現(xiàn)設(shè)備2對(duì)設(shè)備1的同步。除此以外,目前通過(guò)數(shù)據(jù)包傳送同步信息的方法也在討論中(參考電氣電子工程師協(xié)會(huì)提出的標(biāo)準(zhǔn)IEEE1588)。
·在設(shè)備2的發(fā)送側(cè)通過(guò)減小IPG(幀間距)來(lái)加快其發(fā)送有效數(shù)據(jù)包的速度,從而使得發(fā)送速度能跟上接收速度。
對(duì)以上四種方法,雖然都可以避免數(shù)據(jù)包的丟失,但方法1的實(shí)現(xiàn)會(huì)導(dǎo)致系統(tǒng)性能的降低;方法3需要更改以太網(wǎng)設(shè)備的硬件設(shè)計(jì)或添加相關(guān)的協(xié)議層軟件,成本較高。方法4雖然可以解決問(wèn)題,但目前以太網(wǎng)設(shè)備廠商眾多,單純的依靠更改IPG并不能從根本上解決問(wèn)題。下文重點(diǎn)描述方法2即流控機(jī)制的實(shí)現(xiàn)。
流控機(jī)制和具體實(shí)現(xiàn)
在以太網(wǎng)中,作為一種解決丟包的方法,流控機(jī)制的本質(zhì)是使通信設(shè)備能實(shí)時(shí)的了解對(duì)端設(shè)備對(duì)通信流量的要求,根據(jù)對(duì)端設(shè)備的要求來(lái)決定本設(shè)備是繼續(xù)發(fā)送還是暫停發(fā)送數(shù)據(jù)包。這要求以太網(wǎng)通信設(shè)備必須根據(jù)自己的緩存的狀況,實(shí)時(shí)將緩存的空或滿信息發(fā)送給對(duì)端。這種緩存的空滿信息就稱為流控信息。
全雙工模式
對(duì)于全雙工通訊設(shè)備,流控信息通過(guò)發(fā)送Pause幀來(lái)實(shí)現(xiàn)傳輸。Pause幀是一種符合IEEE802.3標(biāo)準(zhǔn)的以太網(wǎng)幀,其屬于MAC控制幀的一種,MAC控制幀的格式如圖3所示。
圖3 MAC控制幀格式
目的MAC地址域,6字節(jié),要求為01-80- C2-00-00-01;源MAC地址域,6字節(jié),為本設(shè)備MAC地址;以太網(wǎng)幀長(zhǎng)度或類型域,要求為88-08,用于標(biāo)明本幀的類型為MAC控制幀;MAC控制操作碼,2字節(jié)。Pause幀僅是MAC控制幀的一種,對(duì)于Pause幀,其在MAC控制幀中的操作碼為00-01;MAC控制參數(shù)域,包含用于MAC控制相關(guān)的參數(shù)。對(duì)于Pause幀,此處應(yīng)填入要求對(duì)端設(shè)備暫停發(fā)送的時(shí)間長(zhǎng)度,由兩個(gè)字節(jié)(16位)來(lái)表示該長(zhǎng)度,每單位長(zhǎng)度為物理層芯片發(fā)送512位數(shù)據(jù)的時(shí)間。所以發(fā)送一次Pause幀,要求對(duì)端設(shè)備暫停發(fā)送的時(shí)間長(zhǎng)度最長(zhǎng)為:65535×512 / 以太網(wǎng)傳輸速率;保留域。
需要注意,Pause幀不能用于要求對(duì)端設(shè)備暫停發(fā)送其自己的MAC控制幀。
以VITESSE公司的以太網(wǎng)接口芯片VSC7323為例。該芯片作為數(shù)據(jù)鏈路層芯片可支持10個(gè)千兆以太網(wǎng)接口。
每個(gè)以太網(wǎng)口對(duì)應(yīng)一個(gè)接收緩存。 對(duì)每個(gè)接收緩存設(shè)置了兩個(gè)水位線:高水位線HIGH_WM和低水位線LOW_WM,如圖4所示。
在圖4中,縱軸代表接收緩存的占用量,橫軸代表時(shí)間。如果占用量達(dá)到了HIGH_WM,則接收設(shè)備將向發(fā)送設(shè)備發(fā)出Pause幀,發(fā)送設(shè)備接收到有效Pause幀后,將立即暫停發(fā)送,使接收設(shè)備有充足的時(shí)間處理接收緩存中的數(shù)據(jù)。當(dāng)接收緩存的占用量逐步降低達(dá)到LOW_WM時(shí),表明接收緩存目前可以有充足的容量來(lái)接收數(shù)據(jù)包,從而接收設(shè)備將停止發(fā)送Pause幀,使得發(fā)送設(shè)備能繼續(xù)傳送數(shù)據(jù)。
圖4 流控水位線示意圖
多長(zhǎng)時(shí)間發(fā)送一次Pause幀?如果發(fā)送頻率太高,將占用寶貴的帶寬資源,反之,則達(dá)不到流控的目的。
工作于全雙工模式時(shí),VSC7323芯片支持兩種流控機(jī)制:標(biāo)準(zhǔn)流控和XON/XOFF機(jī)制。
標(biāo)準(zhǔn)流控機(jī)制。芯片內(nèi)部,每個(gè)以太網(wǎng)口都擁有一個(gè)獨(dú)立的接收緩存。每個(gè)接收緩存對(duì)應(yīng)一組寄存器,用戶可以根據(jù)需要配置HIGH_WM,LOW_WM,PAUSE_VALUE等參數(shù)。其中PAUSE_VALUE的意義請(qǐng)參考前文對(duì)于MAC控制參數(shù)的描述。其數(shù)值代表發(fā)出一個(gè)Pause幀后,發(fā)送設(shè)備需要等待PAUSE_VALUE個(gè)時(shí)間單位才能繼續(xù)發(fā)送(通過(guò)對(duì)PAUSE_VALUE的值進(jìn)行遞減計(jì)數(shù)到0來(lái)實(shí)現(xiàn)),而對(duì)于接收設(shè)備而言,只要本接收緩存的占用量高于HIGH_WM,則將每隔1/2的PAUSE_VALUE個(gè)單位時(shí)間發(fā)出一個(gè)Pause幀,直到緩存占用量小于LOW_WM為止。PAUSE_VALUE的值將通過(guò)Pause幀的MAC控制參數(shù)域發(fā)送給對(duì)端設(shè)備。
XON/XOFF機(jī)制與標(biāo)準(zhǔn)機(jī)制類似,不同點(diǎn)在于發(fā)送方不需要等到PAUSE VALUE倒計(jì)數(shù)為0才能繼續(xù)發(fā)送,只需要接收方發(fā)來(lái)一個(gè)PAUSE VALUE等于0的Pause幀,則發(fā)送方可立即發(fā)送。相對(duì)而言,XON/XFF比標(biāo)準(zhǔn)機(jī)制更加靈活且有助于提高性能。
基于VSC7323,首先要配置其工作于全雙工模式,并使能流控能力。由于VSC7323的接收緩存的總空間為3Mbits,通過(guò)寄存器,可以把這些空間對(duì)10個(gè)以太網(wǎng)口進(jìn)行平均分配,也可以根據(jù)QoS(服務(wù)質(zhì)量)的要求,對(duì)質(zhì)量要求高的口分配更多的緩存。對(duì)每個(gè)口分配完成后,再進(jìn)行HIGH_WM,LOW_WM,PAUSE_VALUE參數(shù)的配置即可實(shí)現(xiàn)流控機(jī)制。
半雙工模式
對(duì)于半雙工通訊設(shè)備,通過(guò)Back Pressure(反壓)來(lái)實(shí)現(xiàn)流控。對(duì)于工作在半雙工模式下的設(shè)備,流控信息可以通過(guò)發(fā)送collision(沖突信號(hào))來(lái)實(shí)現(xiàn)。根據(jù)CSMA/CD(載波監(jiān)聽多路訪問(wèn)/沖突檢測(cè))工作方式,在半雙工模式下,任何以太網(wǎng)設(shè)備在發(fā)送數(shù)據(jù)之前必須對(duì)通信線路進(jìn)行監(jiān)測(cè),以確保本設(shè)備發(fā)送的數(shù)據(jù)不會(huì)和別的設(shè)備發(fā)送的數(shù)據(jù)發(fā)生沖突。如果存在沖突,則需要等待一段隨機(jī)的時(shí)間后才能繼續(xù)發(fā)送。Back Pressure正是利用了半雙工的這種特性,當(dāng)接收設(shè)備的緩存占用量超出閾值時(shí),其將主動(dòng)發(fā)出類似沖突的信號(hào)給對(duì)端設(shè)備,對(duì)端設(shè)備檢測(cè)到?jīng)_突,將會(huì)取消本次發(fā)送,等待一段隨機(jī)的時(shí)間后再重發(fā)。
對(duì)于VSC7323,需要注意,當(dāng)其工作于半雙工模式時(shí),不能支持千兆速率,即只能工作于10/100 Mbps 模式。在流控配置上,HIGH_WM和LOW_WM的配置方式與全雙工模式相同。與全雙工模式不同的是,由于半雙工模式下設(shè)備只能通過(guò)產(chǎn)生collision來(lái)要求對(duì)端設(shè)備暫停發(fā)送,PAUSE_VALUE的信息不可能傳輸給對(duì)端,所以半雙工模式下,無(wú)需配置PAUSE_VALUE。只要接收緩存的占用量高于HIGH_WM,設(shè)備將持續(xù)制造collision,使得對(duì)端設(shè)備無(wú)法有效發(fā)送數(shù)據(jù),直到接收緩存的占用量低于LOW_WM,設(shè)備才停止制造collision,使對(duì)端設(shè)備能繼續(xù)發(fā)送數(shù)據(jù)。
就本質(zhì)而言,全雙工的Pause幀方式和半雙工的Back Pressure方式,都是通過(guò)一種通信雙方都能夠識(shí)別的信息,在接收設(shè)備緩存占用量超出閾值時(shí),使發(fā)送設(shè)備暫停發(fā)送,從而避免由于接收設(shè)備的緩存溢出造成丟包。
流控機(jī)制已經(jīng)作為標(biāo)準(zhǔn)定義在IEEE 802.3規(guī)范中,目前絕大多數(shù)以太網(wǎng)設(shè)備都能支持該機(jī)制。
參考文獻(xiàn):
1. Marvell, “Tutorial on Clock PPM Effects”
2. IEEE802.3-2005 Annex 31B, “MAC Control PAUSE operation”
3. Vitesse, “VSC7323 Datasheet”
4. IEEE802.3-2005 Section 1
網(wǎng)線測(cè)試儀相關(guān)文章:網(wǎng)線測(cè)試儀原理
評(píng)論