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