專利名稱:一種網口流量控制的方法
技術領域:
本發(fā)明涉及數據傳輸中的流量控制領域,特別是指一種網口流量控制的方法。
背景技術:
IEEE802.3x協(xié)議規(guī)定了一個控制以太網媒體接入控制(MAC)的通用體系結構框架,該協(xié)議具有靈活的擴展性,根據它的定義,MAC控制子層接收到發(fā)送流控幀的命令之后,就構造出標準的流控幀。
圖1所示為標準流控幀的格式。流控幀中包含了目的硬件地址(Mac地址)、源Mac地址、類型碼、控制操作碼、暫停時間以及保留部分。圖中左側的字節(jié)數是指上述每一部分在流控幀中所占的字節(jié)數。流控幀中的類型碼表示該數據幀的類型,標準以太網協(xié)議定義流控幀的類型是0x8808;控制操作碼通常為0x0001;流控幀中的暫停時間是指接收方自收到流控幀起,發(fā)送方就暫停發(fā)數據幀的時間參數,該參數是2字節(jié)的無符號整型值,即接收方請求發(fā)送方停止發(fā)送數據幀的時間長度;剩下的46字節(jié)保留使用,用戶可自由定義使用,通常為00。
在上述流控方案中最重要的是暫停時間,該時間度量是以512比特時間為增量,在通常情況下,網口的帶寬與暫停時間的取值范圍相對固定,其對應關系如表1所示
表1
在實際應用中,由于發(fā)送方接收到來自接收方流控幀的時間受傳輸速率、MAC芯片的接收緩沖區(qū)空間、傳輸介質長度、對方響應時間等多種因素的限制,因此,不同的設備處理流控幀所需要的時間是不一樣的。經實驗發(fā)現,即使在同一設備與不同設備對接時,暫停時間響應生效的時間也有可能相差5-10倍。這是因為發(fā)送方對所接收的報文譯碼越慢,在流控幀起作用之前發(fā)送端發(fā)出的報文就越多,所以對于不同的設備,使用的暫停時間應該是不同的,即使是相同的設備在不同的使用環(huán)境下,該暫停時間的具體數值也可能不同,應該根據具體使用情況而確定。
因此,現有技術的流量控制技術存在以下缺點1)現有的流控技術主要是依靠硬件實現的,使用上很不方便。在硬件設計時需打開流控使能信號等相關的幾個信號,以備應用。如果在前期的安裝調試工作中,沒有對硬件進行預先設置,而到了后期又有使用該流控功能的需求,則需要修改單板硬件。而且該流控功能還需要對端設備的支持,如果對端設備在硬件設計上不支持本端設備的流控功能,即對端設備根本無法實現發(fā)送或解析流控幀,則對網口實現流控就非常困難。
2)流控的精確度即流控的粒度不好控制。由于現有技術中網口的流控技術主要是依靠硬件實現,如果想把流量控制在一理想的范圍內,就必須選用合適的暫停時間,而暫停時間和對端設備,傳輸速度,MAC芯片的接收緩沖區(qū)空間大小以及對方響應時間等都密切相關,因此在與不同的設備對接時需要有經驗的人在現場調試設置該暫停時間,而且該暫停時間的設置還沒有規(guī)律可遵循,只能憑人工經驗多次設置調試。
發(fā)明內容
有鑒于此,本發(fā)明提供一種網口流量控制的方法,以擺脫對對端設備的依賴性,并且可以方便靈活地控制流控的粒度。
為達到上述目的,本發(fā)明的技術方案是這樣實現的一種網口流量控制的方法,該方法包括以下步驟
a、在網口總的中斷處理中,將中斷次數與預先設定的中斷次數閾值相比較,如果中斷次數大于或等于中斷次數閾值,則關閉網口中斷,停止收數據包或發(fā)數據包,直到執(zhí)行步驟b,否則執(zhí)行步驟c;b、在定時中斷處理中,打開已關閉的網口中斷,繼續(xù)收數據包或發(fā)數據包;c、退出網口總的中斷處理。
較佳地,步驟a所述的網口中斷為接收中斷,或發(fā)送中斷,或接收中斷和發(fā)送中斷。
較佳地,步驟a所述的網口總的中斷處理進一步包括以下步驟a1、讀取當前的中斷狀態(tài)寄存器;a2、判斷網口中斷類型,如果是接收中斷,則進行接收中斷處理后,直接執(zhí)行步驟a3,如果是發(fā)送中斷,則進行發(fā)送中斷處理后,執(zhí)行步驟a3;a3、判斷中斷次數是否大于或等于預先設定的中斷次數閾值,如果是執(zhí)行步驟a4,否則結束網口總的中斷處理;a4、設置相應網口芯片的控制寄存器關閉相應的網口中斷,并設置網口中斷標志位為關閉狀態(tài)。
較佳地,所述的進行接收中斷處理進一步包括以下步驟1)、從接收緩沖區(qū)中取出發(fā)送來的數據包;2)、封裝該數據包后,送給鏈路層處理;3)、累加接收中斷次數;4)、修改統(tǒng)計計數。
較佳地,所述的進行發(fā)送中斷處理進一步包括以下步驟1’)、將待發(fā)送的數據包存入發(fā)送緩沖區(qū)中;2’)、設置網口芯片的發(fā)送控制位,把數據包發(fā)送到物理鏈路層;3’)、累加發(fā)送中斷次數;4’)、修改統(tǒng)計計數。
較佳地,所述修改統(tǒng)計計數之前進一步包括判斷中斷次數是否大于或等于清狗閾值,如果是,進行清狗處理,否則直接修改統(tǒng)計計數。
較佳地,所述的清狗處理進一步包括判斷看門狗是否打開,如果是,執(zhí)行一次清狗操作,否則直接退出清狗處理步驟。
較佳地,步驟b所述的定時中斷是指系統(tǒng)中的單位計量時間中斷。
較佳地,所述步驟b進一步包括判斷網口中斷標志位狀態(tài),如果網口中斷是關閉狀態(tài),則設置相應網口芯片的控制寄存器以打開已關閉的網口中斷,將網口中斷標志位設置為打開狀態(tài),并重新累計中斷次數,如果網口中斷是打開狀態(tài),則直接重新累計中斷次數。
較佳地,該方法進一步包括控制臺通過修改中斷次數閾值的控制命令修改中斷次數閥值。
較佳地,該方法進一步包括根據CPU的占用率,修改中斷次數閥值。
應用本發(fā)明,以中斷的產生次數來控制網口的流量,同時充分利用系統(tǒng)的單位計量時間的中斷(TICK中斷)來控制網口中斷的打開和關閉,使得軟件的修改和設計非常簡單,另外通過在控制臺增加命令以改變中斷次數閾值,使流控精確度可進行靈活的調整。與此同時,在網口的中斷處理中增加清狗處理,充分地保證了系統(tǒng)在異常情況下能夠安全工作,而且在執(zhí)行清狗操作時增加判斷條件,充分保證了系統(tǒng)的穩(wěn)定性和健壯性。由于擺脫了對對端設備的依賴性,本發(fā)明可以獨立運行,也可以和對端配合運行。
圖1為現有技術中標準流控幀的格式;圖2為網口總的中斷處理步驟的流程圖;圖3為接收中斷處理步驟的流程圖;圖4為清狗處理具體操作步驟的流程圖;圖5為TICK中斷處理中所增加的流量控制步驟的流程圖。
具體實施例方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明做進一步詳細說明。
通常以太網口的收發(fā)數據都是通過中斷來實現的,硬件接收到一個數據包就產生一次接收中斷,在接收中斷處理的過程中,把對端發(fā)來的數據從接收緩沖區(qū)中取出,并把中斷統(tǒng)計計數記錄在軟件中;同樣地,在發(fā)送數據時,一旦成功設置了相關的發(fā)送寄存器,數據就被送到物理鏈路上,每次發(fā)送數據時也會產生一次發(fā)送中斷,同時中斷統(tǒng)計計數記錄也在軟件中。本發(fā)明利用以太網口的收發(fā)數據都是通過中斷來實現的特點,通過控制收發(fā)中斷的次數,來控制收發(fā)中斷的開閉,從而控制數據包的收發(fā),進而實現對網口的流量的控制。在系統(tǒng)的每個單位計量時間(TICK)中斷,判斷是否有關閉的網口中斷,如果有,則打開相應的已關閉的中斷,繼續(xù)收發(fā)數據包,并重新開始計數。例如,系統(tǒng)設置每秒鐘100個TICK,即每個TICK就是10毫秒;這表示系統(tǒng)每隔10毫秒就調用TICK中斷處理一次,打開已關閉的網口中斷。
系統(tǒng)可以只限制接收中斷,實現對本端網口的流量控制,或只限制發(fā)送中斷,實現對對端網口的流量控制,也可以同時限制本端網口的接收中斷和發(fā)送中斷,既對本端網口實現流量控制,又對對端網口實現流量控制。對于收發(fā)數據包的統(tǒng)計計數由軟件來完成的網口,都適用于本發(fā)明。
本實施例以接收中斷為例具體介紹該方案的實現過程。
在網口總的中斷處理中,增設判斷網口接收中斷次數IntTimes是否大于或等于預先設定的中斷次數閾值LAN_INT_TIMES的步驟,來實現對本端網口的流量控制。中斷次數閾值的設置原則是在保證CPU占用率為70%-75%的前提下,設置中斷次數閾值。如果該閾值設置偏低,將導致效率低下資源浪費,如果該閾值設置偏高將造成單板業(yè)務繁忙,使CPU占用率過高,而影響其它任務的運行。為了方便該閾值的調整,可以在控制臺增加一個簡單的閾值控制命令如set flow-ctrl value,根據需要來修改已設置閾值的大小,這就使每次修改該中斷次數閾值參數時更加方便靈活。
圖2所示為網口總的中斷處理步驟的流程圖。
步驟201,讀取當前的中斷狀態(tài)寄存器;步驟202,判斷網口中斷類型,如果是接收中斷,則執(zhí)行步驟203,如果是發(fā)送中斷,則執(zhí)行步驟204;步驟203,進行接收中斷處理后,直接執(zhí)行步驟205;步驟204,進行發(fā)送中斷處理后,執(zhí)行步驟205;步驟205,判斷網口中斷次數IntTimes是否大于或等于預先設定的中斷次數閾值LAN_INT_TIMES,如果是執(zhí)行步驟206,否則執(zhí)行步驟208;步驟206,設置網口芯片的控制寄存器,關閉中斷,不再響應中斷的處理;步驟207,設置中斷標志位為關閉狀態(tài),即設置NetFlag=1,表示中斷已關閉;步驟208,結束網口總的中斷處理。
在網口的接收中斷處理中,設置并累加中斷次數IntTimes,即當接收到的數據封裝完畢送給鏈路層后,使中斷次數IntTimes的值加一。同時,為了預防單板業(yè)務繁忙時CPU一直在處理網口的中斷,使CPU占用率太高沒有時間去清狗,造成看門狗超時使單板復位,所以增加清狗的步驟;在單板出現異常需要看門狗復位時,因網口不斷有數據的收發(fā),而使清狗操作不斷的執(zhí)行,致使看門狗不能進入單板復位狀態(tài),因此,在網口的接收中斷處理中增加判斷中斷次數閾值是否大于或等于已設定的清狗閾值的步驟。
圖3所示為接收中斷處理步驟的流程圖。
步驟301,從接收緩沖區(qū)中取出發(fā)送來的數據包;步驟302,封裝該數據包后,送給鏈路層處理;步驟303,設置并累加接收中斷次數;步驟304,判斷該中斷次數IntTimes的值是否大于或等于清狗閾值,如果是執(zhí)行步驟305,否則直接執(zhí)行步驟306;
步驟305,進行清狗處理SetWatchdog();步驟306,修改接收統(tǒng)計計數。
圖4所示為清狗處理具體操作步驟的流程圖。在清狗處理中,步驟401,判斷看門狗是否打開,如果是,執(zhí)行步驟402,執(zhí)行一次清狗操作,否則直接退出清狗處理步驟。
由于TICK是系統(tǒng)中用于計量時間的單位,通常系統(tǒng)每隔10毫秒就調用TICK中斷一次。該中斷主要用于處理系統(tǒng)中需要定時處理的事情,處理完畢后,就跳出此中斷。
在系統(tǒng)的TICK中斷處理中,增設流量控制步驟Lan_Flow_ctrl(),以打開當前已關閉的接收中斷,并將中斷次數IntTimes的值清零,重新開始計數。
圖5所示為TICK中斷處理中所增加流量控制步驟的流程圖。
步驟501,判斷網口接收中斷標志位是否為關閉狀態(tài),即NetFlag的值是否為1,如果是執(zhí)行步驟502,否則直接執(zhí)行504;步驟502,打開網口接收中斷;步驟503,設置網口接收中斷標志位的值為打開中斷狀態(tài),即設置NetFlag=0;步驟504,將中斷次數的值清零,重新開始計數,即設置IntTimes=0。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1.一種網口流量控制的方法,其特征在于該方法包括以下步驟a、在網口總的中斷處理中,將中斷次數與預先設定的中斷次數閾值相比較,如果中斷次數大于或等于中斷次數閾值,則關閉網口中斷,停止收數據包或發(fā)數據包,直到執(zhí)行步驟b,否則執(zhí)行步驟c;b、在定時中斷處理中,打開已關閉的網口中斷,繼續(xù)收數據包或發(fā)數據包;c、退出網口總的中斷處理。
2.根據權利要求1所述的方法,其特征在于步驟a所述的網口中斷為接收中斷,或發(fā)送中斷,或接收中斷和發(fā)送中斷。
3.根據權利要求2所述的方法,其特征在于步驟a所述的網口總的中斷處理進一步包括以下步驟a1、讀取當前的中斷狀態(tài)寄存器;a2、判斷網口中斷類型,如果是接收中斷,則進行接收中斷處理后,直接執(zhí)行步驟a3,如果是發(fā)送中斷,則進行發(fā)送中斷處理后,執(zhí)行步驟a3;a3、判斷中斷次數是否大于或等于預先設定的中斷次數閾值,如果是執(zhí)行步驟a4,否則結束網口總的中斷處理;a4、設置相應網口芯片的控制寄存器關閉相應的網口中斷,并設置網口中斷標志位為關閉狀態(tài)。
4.根據權利要求3所述的方法,其特征在于所述的進行接收中斷處理進一步包括以下步驟1)、從接收緩沖區(qū)中取出發(fā)送來的數據包;2)、封裝該數據包后,送給鏈路層處理;3)、累加接收中斷次數;4)、修改統(tǒng)計計數。
5.根據權利要求3所述的方法,其特征在于所述的進行發(fā)送中斷處理進一步包括以下步驟1’)、將待發(fā)送的數據包存入發(fā)送緩沖區(qū)中;2’)、設置網口芯片的發(fā)送控制位,把數據包發(fā)送到物理鏈路層;3’)、累加發(fā)送中斷次數;4’)、修改統(tǒng)計計數。
6.根據權利要求4或5所述的方法,其特征在于所述修改統(tǒng)計計數之前進一步包括判斷中斷次數是否大于或等于清狗閾值,如果是,進行清狗處理,否則直接修改統(tǒng)計計數。
7.根據權利要求6所述的方法,其特征在于所述的清狗處理進一步包括判斷看門狗是否打開,如果是,執(zhí)行一次清狗操作,否則直接退出清狗處理步驟。
8.根據權利要求1所述的方法,其特征在于步驟b所述的定時中斷是指系統(tǒng)中的單位計量時間中斷。
9.根據權利要求8所述的方法,其特征在于所述步驟b進一步包括判斷網口中斷標志位狀態(tài),如果網口中斷是關閉狀態(tài),則設置相應網口芯片的控制寄存器以打開已關閉的網口中斷,將網口中斷標志位設置為打開狀態(tài),并重新累計中斷次數,如果網口中斷是打開狀態(tài),則直接重新累計中斷次數。
10.根據權利要求1所述的方法,其特征在于該方法進一步包括控制臺通過修改中斷次數閾值的控制命令修改中斷次數閥值。
11.根據權利要求10所述的方法,其特征在于該方法進一步包括根據CPU的占用率,修改中斷次數閥值。
全文摘要
本發(fā)明提供了一種網口流量控制的方法,該方法包括以下步驟a.在網口總的中斷處理中,將中斷次數與預先設定的中斷次數閾值相比較,如果中斷次數大于或等于中斷次數閾值,則關閉網口中斷,停止收數據包或發(fā)數據包,直到執(zhí)行步驟b,否則執(zhí)行步驟c;b.在定時中斷處理中,打開已關閉的網口中斷,繼續(xù)收數據包或發(fā)數據包;c.退出網口總的中斷處理。應用本發(fā)明,通過控制中斷產生的次數來控制網口的流量,進而根據實際需要實現對流控粒度的靈活調整。同時,在網口中斷處理中增加清狗處理,以充分保證系統(tǒng)在異常情況下能夠安全工作。
文檔編號H04L12/08GK1509011SQ0215801
公開日2004年6月30日 申請日期2002年12月20日 優(yōu)先權日2002年12月20日
發(fā)明者朱克楚 申請人:華為技術有限公司