作者:趙振寧 范力涵 陳曉
摘要:三層以太網交換機發展迅速,一方面網絡設備的帶寬及交換容量大幅提升,另一方面設備所支持的協議種類也隨著用戶的需求不斷增加。如何在大業務量的網絡環境下確保各設備之間協議包的正常交互,是以太網交換機設計面臨的重要問題。文章以基于ASIC的三層以太網交換機為例,從CPU負載、軟硬件隊列配置、CPU和交換芯片的通信機制等方面入手,討論并分析在多進程環境中與CPU收發包功能相關的一些典型問題,得到解決辦法。解決方法對于網絡處理器(NP)同樣適用。
要害詞:三層以太網交換機;CPU;中斷;輪詢;直接存儲器存?。魂犃姓{度
Abstract:TheL3Ethernetswitch has developed rapidly. On one hand, it has greatly imPRoved bandwidth and exchange capability of network equipment. On the other hand, network equipment is required to support more protocol types with the increasing of user demands. For design of an Ethernet switch, it is important to ensure normal interaction of protocol packets between different devices under a network environment of massive traffic. Taking the L3 Ethernet switch that uses application Specific Integrated Circuits (ASIC) chip as an example, this article analyzes several typical issues about packet receiving and sending by CPU under a multi-progress environment, including CPU load, software and hardware queue settings, and communication mechanism between CPU and the switching chip. It then gives solutions to these issues, which may also work for the Network Processor (NP).
KeyWords:L3Ethernetswitch; CPU; interrupt; polling; DMA; queue and schedule
在當前的三層以太網交換設備中,報文的二層交換和三層路由主要由交換芯片和網絡處理器完成,CPU基本上不參與交換和路由過程,主要完成治理和控制交換芯片的功能[1]。
在這種情況下,CPU的負載主要來自以下幾個方面:協議的定時驅動、用戶的配置驅動、外部事件的驅動。其中,外部事件的驅動最為隨機,無法預料。典型的外部事件包括端口的連接/斷開(Up/Down),媒體訪問控制(MAC)地址消息的上報(包括學習、老化、遷移等),CPU通過直接存儲器存取(DMA)收到包,CPU通過DMA發包等。
在以上所列的外部事件中,又以CPU通過DMA收到包之后的處理最為復雜。因為數據包由低層上送到上層軟件時,各協議的處理動作千差萬別,可能會涉及到發包、端口操作、批量的表操作等。所以,只有處理好CPU的收發包的相關問題,才能使相關的上層協議正常交互,從而使交換機穩定、高效地運行。
1 可能涉及到的問題
以下就CPU收發包可能涉及的各個方面分別說明。
下面的分析都基于典型的CPU收發包機制:CPU端口分隊列,通過DMA接收,采用環形隊列等。
1.1CPU的負載與收包節奏控制
根據交換機處理數據包的能力,決定單位時間上送到CPU的包的個數;決定了單位時間上送多少個包給CPU后,再考慮上送數據包的節奏。
假設通過評估,確定了單位時間上送CPU數據包的上限,例如每秒x個數據包。
圖1給出了兩種典型的處理手段:勻速上報CPU、突發(Burst)方式上報CPU,下面分別分析一下這兩種方式的優劣:
(1)勻速上報CPU
數據包勻速上報CPU時,對CPU隊列的沖擊較小,而且對CPU隊列的緩沖能力要求不高,CPU隊列不必做得很大。
(2)突發(Burst)方式上報CPU
交換芯片(采用ASIC)一側的硬件接收隊列和DMA內存空間中的環形隊列,一起賦予了交換機一定的緩沖能力(針對上送CPU的數據包)。利用這個緩沖能力,我們可以把控制周期適當放長,并設定控制的粒度(單位控制周期內CPU收報個數的上限),采用類似于電路中負反饋的機制動態地使能和關閉CPU收包功能。這樣就在宏觀上實現了對數據包上送CPU速率的控制。另外,假如交換芯片(采用ASIC)支持基于令牌桶算法的CPU端口出方向流量監管或整形功能[2-3],且監管或整形的最小閾值可以滿足CPU限速的需要,則可以利用這個功能控制數據包上送CPU的節奏,減小CPU的負載。這樣軟件的處理就簡化了很多。
1.2CPU端口隊列的長度規劃
假如僅考慮交換機CPU端口的緩沖能力,CPU端口隊列當然是越長越好,但是必須兼顧對其他功能以及性能的影響。針對不同的ASIC芯片,需要具體問題具體分析。
1.3零拷貝
零拷貝是指在整個數據包的處理過程中,使用指針做參數,不進行整個數據包的拷貝。這樣可以大大提高CPU的處理效率。
使用零拷貝后,會一定程度上降低軟件處理的靈活性,我們會面臨到這樣的問題:假如協議棧需要更改一個數據包的內容,會直接在接收緩存(buffer)上修改,但是假如需要在數據包中刪除或添加字段(例如添加或刪除一層標簽(tag)),即數據包的長度需要變化時,應該如何處理。
添加或刪除字段,必然會導致數據包頭一側或包尾一側的位置發生移動,假如包尾一側移動,問題比較簡單,只要數據包總長度不超過buffer邊界即可。由于通常此類操作都靠近包頭的位置,假如包頭一側移動,效率會比較高,所以協議棧在處理時可能更傾向于在包頭一側移動,這時就需要驅動在分配buffer時做一些處理:
(1)接收數據包時,頭指針不能指向buffer邊界,需要向后偏移一定裕量,同時單個buffer的大小也必須兼顧到最大傳送單元(MTU)和該裕量。
(2)釋放數據包時buffer首指針需要作歸一化處理(如圖2所示)。
1.4中斷/輪詢
目前交換機涉及到的外部中斷主要由交換芯片產生,交換芯片主要的外部中斷包括DMA操作(如收到包、發包結束、新地址消息等等)和一些出錯消息。假如中斷請求過于頻繁,中斷服務程序(ISR)和其他進程之間頻繁地上下文切換會消耗大量CPU時間。假如有持續大量的中斷請求,CPU會始終處于繁忙狀態,各種協議得不到足夠的調度時間,從而導致協議狀態機超時等嚴重故障。
為了避免事件觸發頻率不可控的問題,可以使用輪詢機制,通常的做法是用CPU定時器觸發原先由外部中斷觸發的ISR,由于定時器觸發的間隔是固定的,所以ISR執行的頻率得到了控制,避免了上述的問題。
輪詢和外部中斷相比,只是節奏可控(外部中斷的節奏取決于外部事件發生的頻率,CPU不可控)。但是,輪詢也有其不可避免的缺點——響應慢。不能滿足某些實時性要求較高的功能。另外,人們會發現用ping命令檢測交換機3層接口大包時,使用輪詢方式的交換機比使用中斷方式的交換機的時延明顯要大。
假如能通過某種機制,避免持續、大量的中斷請求,則既可以保證CPU不會過于繁忙,又保留了中斷實時處理的優點。
典型的會產生大量中斷事件的行為是CPU接收數據包和MAC地址消息上報。以收包為例,在前面“CPU負載與收包節奏控制”部分提到的Burst方式就是根據實時的流量,控制接收DMA的開關,這樣就達到了使中斷源受控的目的,這種類似負反饋的機制可以很好的避免持續的中斷事件上報CPU。
總之,輪詢控制簡單,但實時性較差;中斷實時性好,但是使所有的中斷源受控有一定難度。在系統初始設計階段,我們需要綜合考慮需求以及芯片對外部事件的處理方式,來決定采用中斷或者輪詢方式,或者兩者兼用。
1.5多進程環境中外部事件的處理機制
常見的外部事件(中斷事件)包括收到包、包發送完(這里指的都是CPU收發包),包括收到MAC地址消息、MAC表操作完成等。
假如把各類中斷事件的處理放在一個進程里,就人為地造成了各個事件耦合性增強,增加了各種事件相互制約的機會。
在多任務操作系統中,為了能更靈活地處理各個事件,減少事件之間的子相互制約關系,各種事件應當盡可能地單獨起進程,或者根據處理方式的不同劃分為幾個進程,至少用單個進程來處理是不合適的。
1.6協議包保護和CPU保護
對于基于ASIC的交換機,協議包保護是指利用ASIC芯片的某些機制,把特定的協議包指定到特定的端口隊列上去,保證其經DMA隊列上送CPU的優先級;CPU保護是指盡量減少不必要的數據包對CPU的沖擊。
實現協議包保護的必要條件:
(1)CPU端口必需支持嚴格優先級(SP)或者帶權重的羅賓環(WRR)的調度算法。
(2)交換芯片必需具有較強的流分類能力,且可以給不同的流指定不同的端口隊列。
在系統方案設計時我們需要兼顧對協議報文的保護和對CPU的保護,應該盡量做到:
(1)保證CPU收包通道和發包通道的暢通。
(2)精確匹配,按需選取。充分利用ASIC芯片的訪問控制列表(ACL)功能,盡量精確地匹配各類協議報文。必要時需要匹配到4層字段[4]。
實現以上幾點時,應兼顧其他功能及整機性能的限制。
1.7效率降低的避免
在多任務操作系統中,各種事件需要用盡量短的時間片處理完成,以保證其他任務有足夠的機會得到調度。所以我們在調用任何函數時都要考慮其執行效率。除了算法本身會影響執行效率之外,頻繁地訪問某些硬件也相當耗時,而這一點往往輕易被忽略。
2 結束語
隨著以太網相關技術的發展,交換芯片和網絡處理器的處理能力不斷被提升;相比之下,數據交換設備中CPU處理性能的提升程度遠遠不及交換芯片和網絡處理器;同時數據交換設備支持的業務種類也在不斷增加,對CPU承載的業務量也有了更高的要求。在這種情況下,交換設備容量以及支持業務種類的大幅提升和有限的CPU資源之間的矛盾會日益凸顯。因此,做好CPU和交換芯片以及網絡處理器接口的緩沖治理、隊列調度以及流量監管,合理利用CPU資源,是保證數據交換設備安全、穩定運行的前提,也是目前及將來數據交換設備開發的重要課題。
3 參考文獻
[1]陳曉,范成法,過仕好. 數據交換網絡設備的CPU負載分析 [J]. 電信技術, 2004 (8):55-57.
[2]ITEFRFC2697. A single rate three color marker [S]. 1999.
[3]ITEFRFC2698. A two rate three color marker [S]. 1999
[4]StevensWR. TCP/IP illustrated: Vol 1 [M]. Reading, MA,USA:Addison-Wesley,1994: Chapter3,6,11,13,17.
作者簡介:
趙振寧,重慶大學通信工程專業畢業。中興通訊股份有限公司南京研究所軟件工程師,從事ZXR10以太網交換機產品的研發。范力涵,中南大學控制理論與控制工程專業碩士畢業。中興通訊股份有限公司南京研究所軟件高級工程師,從事高端以太網交換機研發、設計和治理。先后參與國家“863”項目和國家自然科學基金項目多項,曾獲得湖南省科技進步一等獎和三等獎。陳曉,南京航空航天大學畢業。中興通訊股份有限公司南京研究所系統工程師,曾參與ZXB10ATM交換機研發,ZXR10 以太網交換機的研發、設計和治理,現負責城域以太網業務交換機的預研工作。(張翀編輯)
進入討論組討論。新聞熱點
疑難解答