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