日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

三層交換機處理器收發(fā)包相關(guān)問題分析

在當(dāng)前的三層以太網(wǎng)交換設(shè)備中,報文的二層交換和三層路由主要由交換芯片和網(wǎng)絡(luò)處理器完成,CPU基本上不參與交換和路由過程,主要完成治理和控制交換芯片的功能[1] 。
在這種情況下,CPU的負(fù)載主要來自以下幾個方面:協(xié)議的定時驅(qū)動、用戶的配置驅(qū)動、外部事件的驅(qū)動 。其中,外部事件的驅(qū)動最為隨機,無法預(yù)料 。典型的外部事件包括端口的連接/斷開(Up/Down),媒體訪問控制(MAC)地址消息的上報(包括學(xué)習(xí)、老化、遷移等),CPU通過直接存儲器存取(DMA)收到包,CPU通過DMA發(fā)包等 。
在以上所列的外部事件中,又以CPU通過DMA收到包之后的處理最為復(fù)雜 。因為數(shù)據(jù)包由低層上送到上層軟件時,各協(xié)議的處理動作千差萬別,可能會涉及到發(fā)包、端口操作、批量的表操作等 。所以,只有處理好CPU的收發(fā)包的相關(guān)問題,才能使相關(guān)的上層協(xié)議正常交互,從而使交換機穩(wěn)定、高效地運行 。
1 可能涉及到的問題
以下就CPU收發(fā)包可能涉及的各個方面分別說明 。
下面的分析都基于典型的CPU收發(fā)包機制:CPU端口分隊列,通過DMA接收,采用環(huán)形隊列等 。
1.1CPU的負(fù)載與收包節(jié)奏控制
根據(jù)交換機處理數(shù)據(jù)包的能力,決定單位時間上送到CPU的包的個數(shù);決定了單位時間上送多少個包給CPU后,再考慮上送數(shù)據(jù)包的節(jié)奏 。
假設(shè)通過評估,確定了單位時間上送CPU數(shù)據(jù)包的上限,例如每秒x個數(shù)據(jù)包 。
圖1給出了兩種典型的處理手段:勻速上報CPU、突發(fā)(Burst)方式上報CPU,下面分別分析一下這兩種方式的優(yōu)劣:
(1)勻速上報CPU
數(shù)據(jù)包勻速上報CPU時,對CPU隊列的沖擊較小,而且對CPU隊列的緩沖能力要求不高,CPU隊列不必做得很大 。
(2)突發(fā)(Burst)方式上報CPU
交換芯片(采用ASIC)一側(cè)的硬件接收隊列和DMA內(nèi)存空間中的環(huán)形隊列,一起賦予了交換機一定的緩沖能力(針對上送CPU的數(shù)據(jù)包) 。利用這個緩沖能力,我們可以把控制周期適當(dāng)放長,并設(shè)定控制的粒度(單位控制周期內(nèi)CPU收報個數(shù)的上限),采用類似于電路中負(fù)反饋的機制動態(tài)地使能和關(guān)閉CPU收包功能 。這樣就在宏觀上實現(xiàn)了對數(shù)據(jù)包上送CPU速率的控制 。另外,假如交換芯片(采用ASIC)支持基于令牌桶算法的CPU端口出方向流量監(jiān)管或整形功能[2-3],且監(jiān)管或整形的最小閾值可以滿足CPU限速的需要,則可以利用這個功能控制數(shù)據(jù)包上送CPU的節(jié)奏,減小CPU的負(fù)載 。這樣軟件的處理就簡化了很多 。
1.2CPU端口隊列的長度規(guī)劃
假如僅考慮交換機CPU端口的緩沖能力,CPU端口隊列當(dāng)然是越長越好,但是必須兼顧對其他功能以及性能的影響 。針對不同的ASIC芯片,需要具體問題具體分析 。
1.3零拷貝
零拷貝是指在整個數(shù)據(jù)包的處理過程中,使用指針做參數(shù),不進行整個數(shù)據(jù)包的拷貝 。這樣可以大大提高CPU的處理效率 。
使用零拷貝后,會一定程度上降低軟件處理的靈活性,我們會面臨到這樣的問題:假如協(xié)議棧需要更改一個數(shù)據(jù)包的內(nèi)容,會直接在接收緩存(buffer)上修改,但是假如需要在數(shù)據(jù)包中刪除或添加字段(例如添加或刪除一層標(biāo)簽(tag)),即數(shù)據(jù)包的長度需要變化時,應(yīng)該如何處理 。
添加或刪除字段,必然會導(dǎo)致數(shù)據(jù)包頭一側(cè)或包尾一側(cè)的位置發(fā)生移動,假如包尾一側(cè)移動,問題比較簡單,只要數(shù)據(jù)包總長度不超過buffer邊界即可 。由于通常此類操作都靠近包頭的位置,假如包頭一側(cè)移動,效率會比較高,所以協(xié)議棧在處理時可能更傾向于在包頭一側(cè)移動,這時就需要驅(qū)動在分配buffer時做一些處理:
(1)接收數(shù)據(jù)包時,頭指針不能指向buffer邊界,需要向后偏移一定裕量,同時單個buffer的大小也必須兼顧到最大傳送單元(MTU)和該裕量 。

推薦閱讀