VxWorks下UDP協(xié)議棧效率的研究與改進(jìn)
發(fā)布時(shí)間:2007/8/30 0:00:00 訪問次數(shù):1210
來源:單片機(jī)及嵌入式系統(tǒng)應(yīng)用 作者:國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 何贊園 宋華偉 吉立新
摘要 電信網(wǎng)與計(jì)算機(jī)網(wǎng)的融合是一種趨勢。在實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks環(huán)境下,使用以太網(wǎng)上的UDP協(xié)議,高效傳輸電信業(yè)務(wù)的信令與數(shù)據(jù)。描述在此情況下,根據(jù)實(shí)際需求對(duì)以太網(wǎng)傳輸中網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序與UDP協(xié)議棧進(jìn)行改進(jìn)的研究與探索。
關(guān)鍵詞 VxWorks UDP 協(xié)議棧效率 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)
1 使用VxWorks標(biāo)準(zhǔn)UDP協(xié)議棧存在的問題
在VxWorks標(biāo)準(zhǔn)的IP協(xié)議實(shí)現(xiàn)的前提下,其UDP協(xié)議的實(shí)現(xiàn)存在于IP層。在VxWorks中有一個(gè)網(wǎng)絡(luò)任務(wù)(亦即進(jìn)程),用于完成以太網(wǎng)包的收發(fā)處理及與各種網(wǎng)絡(luò)協(xié)議的接口,其名為tNetTask,優(yōu)先級(jí)低于一般的系統(tǒng)任務(wù)而高于應(yīng)用程序任務(wù)。系統(tǒng)的上層網(wǎng)絡(luò)協(xié)議,如Telnet、FTP等,在服務(wù)器端有一個(gè)相應(yīng)的任務(wù),處理網(wǎng)絡(luò)任務(wù)轉(zhuǎn)交過來的數(shù)據(jù)報(bào)。
應(yīng)用程序想要實(shí)現(xiàn)UDP數(shù)據(jù)報(bào)的收發(fā),就要使用操作系統(tǒng)提供的socket編程接口,主要包括創(chuàng)建socket,綁定socket和源IP與端口號(hào),發(fā)送UDP數(shù)據(jù)報(bào)和接收socket中收到的內(nèi)容。在VxWorks中有4個(gè)函數(shù)與之相對(duì)應(yīng),分別是:socket()、bind()、sendto()和recvfrom()。在VxWorks操作系統(tǒng)中,socket號(hào)是與文件打開描述符(fd)同樣管理的,一個(gè)socket與源IP和一個(gè)源端口相對(duì)應(yīng)。Sendto()函數(shù)調(diào)甩時(shí)指明目的的IP地址和服務(wù)端口號(hào)。
本文描述的UDP協(xié)議棧使用背景可簡要描述如下:該系統(tǒng)使用的主要硬件CPU平臺(tái)是摩托羅拉公司的MPC860的CPU,主頻為50 MHz;操作系統(tǒng)使用美國WindRiver公司的VxWorks。系統(tǒng)中各個(gè)設(shè)備(均有以太網(wǎng)接口)之間要在以太網(wǎng)上進(jìn)行信令與語音、數(shù)據(jù)業(yè)務(wù)的傳輸,各種數(shù)據(jù)包采用統(tǒng)一的消息頭編碼格式。
使用標(biāo)準(zhǔn)UDP協(xié)議棧最大的問題是效率。在該系統(tǒng)平臺(tái)上,網(wǎng)絡(luò)傳輸?shù)乃俾食蔀樽畲蟮钠款i,并由此影響了系統(tǒng)的容量。根據(jù)測試的極限速率,使用10M以太網(wǎng)的實(shí)際有效傳輸速率僅有1.8 Mb/s,使用100M以太網(wǎng)口電沒有明顯的提高。另外,還有一個(gè)問題,網(wǎng)絡(luò)任務(wù)經(jīng)常會(huì)掛起,在開機(jī)運(yùn)行較長時(shí)間后此現(xiàn)象尤為明顯,這對(duì)系統(tǒng)的可用性和無故障工作時(shí)間構(gòu)成威脅。而項(xiàng)目的目標(biāo)是實(shí)現(xiàn)高效穩(wěn)定的以太網(wǎng)包處理。
2 改進(jìn)UDP協(xié)議棧的思想與理由
根據(jù)對(duì)VxWorks操作系統(tǒng)的研究,發(fā)現(xiàn)它對(duì)以太網(wǎng)包的處理與一般的IP協(xié)議棧有所不同。MAC層的控制由硬件寄存器來實(shí)現(xiàn),實(shí)現(xiàn)了發(fā)送方以太網(wǎng)幀的成幀和接收的以太網(wǎng)幀頭確認(rèn)以后,通過DMA方式實(shí)現(xiàn)內(nèi)存與網(wǎng)絡(luò)介質(zhì)間的通信,網(wǎng)絡(luò)任務(wù)與硬件之間通過設(shè)備中斷進(jìn)行通信。在該操作系統(tǒng)中,有一個(gè)MUX層,它提供統(tǒng)一的發(fā)送函數(shù),其參數(shù)為發(fā)送的網(wǎng)絡(luò)設(shè)備管理表指針和發(fā)送的數(shù)據(jù)報(bào)指針。我們知道,在一個(gè)有多個(gè)網(wǎng)絡(luò)設(shè)備同時(shí)工作的計(jì)算機(jī)系統(tǒng)中,標(biāo)準(zhǔn)的IP協(xié)議棧要完成選取從哪個(gè)網(wǎng)絡(luò)設(shè)備端口(gate way)發(fā)送和判斷ARP的Cache中是否有對(duì)端的MAC地址,從而決定是否啟動(dòng)ARP進(jìn)行解析。在VxWorks中。是通過查Route表和ARP表來完成以上兩項(xiàng)工作的。Route表中儲(chǔ)存的是與每一個(gè)通信的子網(wǎng)的gart way,ARP表中儲(chǔ)存的是已知的IP地址與MAC地址的對(duì)應(yīng)關(guān)系。另外,數(shù)據(jù)報(bào)接收的處理過程中是在IP數(shù)據(jù)報(bào)存入內(nèi)存后申請MUX層的隊(duì)列緩沖區(qū),然后依次調(diào)用各上層協(xié)議的處理函數(shù)。
根據(jù)以上情況,考慮在MUX層修改UDP協(xié)議棧,在發(fā)送過程中,跳過socket接口,直接使用MUX層的發(fā)送函數(shù)。這樣,可以減少從UDP層網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩沖區(qū)到MUX層緩沖區(qū)之間的復(fù)制工作,從而提高發(fā)送效率。在接收數(shù)據(jù)包的處理過程中,在MUX層收到數(shù)據(jù)報(bào)后鉤掛(hook)一個(gè)處理函數(shù),對(duì)UDP協(xié)議的數(shù)據(jù)包進(jìn)行分檢,優(yōu)先于其他協(xié)議的處理。這樣可減少從MUX層緩沖區(qū)到UDP層網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩沖區(qū)之間的復(fù)制,而且可以不再要求上層使用輪誨的方法檢查socket的緩沖區(qū)中的內(nèi)容,提高了處理的實(shí)時(shí)性。
3 改進(jìn)UDP協(xié)議棧出現(xiàn)的新問題
VxWorks的muxLib類庫中允許用戶自己定義一個(gè)協(xié)議棧,將協(xié)議棧綁定到一個(gè)具體的網(wǎng)絡(luò)端口上,同時(shí)要有一個(gè)處理函數(shù)對(duì)該網(wǎng)絡(luò)設(shè)備上收到的包進(jìn)行處理。加載改進(jìn)后的協(xié)議棧要先創(chuàng)建一組緩沖區(qū),每種緩沖區(qū)對(duì)應(yīng)不同的數(shù)據(jù)報(bào)長。預(yù)先分配一大塊內(nèi)存,可避免發(fā)送數(shù)據(jù)包時(shí)再去分配內(nèi)存,并可根據(jù)各種長度的數(shù)據(jù)報(bào)的使用頻度申請不同個(gè)數(shù)的緩沖區(qū)。發(fā)送過程中,要填寫IP首部的其他內(nèi)容,如協(xié)議版本號(hào)、UDP協(xié)議編號(hào)、idenfication域、IP首部校驗(yàn)和等等。在填寫的過程中,可以有意識(shí)地按照CPU的作業(yè)寬度和整數(shù)邊界進(jìn)行內(nèi)存賦值,提高發(fā)送效率。在接收過程中,要先判斷是否為UDP協(xié)議的數(shù)據(jù)報(bào)(根據(jù)第24字節(jié)為Oxll),然后做合法檢驗(yàn)。對(duì)本協(xié)議棧處理的數(shù)據(jù)報(bào),處理后要將其從MUX層的緩沖區(qū)隊(duì)列中刪除,未刪除的數(shù)據(jù)報(bào)由其他協(xié)議的處理函數(shù)處理。
經(jīng)過對(duì)協(xié)議棧的改進(jìn)發(fā)現(xiàn),在單向收發(fā)的環(huán)境下,發(fā)送效率提高了3倍左右;但是接收方效率的提高很
來源:單片機(jī)及嵌入式系統(tǒng)應(yīng)用 作者:國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 何贊園 宋華偉 吉立新
摘要 電信網(wǎng)與計(jì)算機(jī)網(wǎng)的融合是一種趨勢。在實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks環(huán)境下,使用以太網(wǎng)上的UDP協(xié)議,高效傳輸電信業(yè)務(wù)的信令與數(shù)據(jù)。描述在此情況下,根據(jù)實(shí)際需求對(duì)以太網(wǎng)傳輸中網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序與UDP協(xié)議棧進(jìn)行改進(jìn)的研究與探索。
關(guān)鍵詞 VxWorks UDP 協(xié)議棧效率 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)
1 使用VxWorks標(biāo)準(zhǔn)UDP協(xié)議棧存在的問題
在VxWorks標(biāo)準(zhǔn)的IP協(xié)議實(shí)現(xiàn)的前提下,其UDP協(xié)議的實(shí)現(xiàn)存在于IP層。在VxWorks中有一個(gè)網(wǎng)絡(luò)任務(wù)(亦即進(jìn)程),用于完成以太網(wǎng)包的收發(fā)處理及與各種網(wǎng)絡(luò)協(xié)議的接口,其名為tNetTask,優(yōu)先級(jí)低于一般的系統(tǒng)任務(wù)而高于應(yīng)用程序任務(wù)。系統(tǒng)的上層網(wǎng)絡(luò)協(xié)議,如Telnet、FTP等,在服務(wù)器端有一個(gè)相應(yīng)的任務(wù),處理網(wǎng)絡(luò)任務(wù)轉(zhuǎn)交過來的數(shù)據(jù)報(bào)。
應(yīng)用程序想要實(shí)現(xiàn)UDP數(shù)據(jù)報(bào)的收發(fā),就要使用操作系統(tǒng)提供的socket編程接口,主要包括創(chuàng)建socket,綁定socket和源IP與端口號(hào),發(fā)送UDP數(shù)據(jù)報(bào)和接收socket中收到的內(nèi)容。在VxWorks中有4個(gè)函數(shù)與之相對(duì)應(yīng),分別是:socket()、bind()、sendto()和recvfrom()。在VxWorks操作系統(tǒng)中,socket號(hào)是與文件打開描述符(fd)同樣管理的,一個(gè)socket與源IP和一個(gè)源端口相對(duì)應(yīng)。Sendto()函數(shù)調(diào)甩時(shí)指明目的的IP地址和服務(wù)端口號(hào)。
本文描述的UDP協(xié)議棧使用背景可簡要描述如下:該系統(tǒng)使用的主要硬件CPU平臺(tái)是摩托羅拉公司的MPC860的CPU,主頻為50 MHz;操作系統(tǒng)使用美國WindRiver公司的VxWorks。系統(tǒng)中各個(gè)設(shè)備(均有以太網(wǎng)接口)之間要在以太網(wǎng)上進(jìn)行信令與語音、數(shù)據(jù)業(yè)務(wù)的傳輸,各種數(shù)據(jù)包采用統(tǒng)一的消息頭編碼格式。
使用標(biāo)準(zhǔn)UDP協(xié)議棧最大的問題是效率。在該系統(tǒng)平臺(tái)上,網(wǎng)絡(luò)傳輸?shù)乃俾食蔀樽畲蟮钠款i,并由此影響了系統(tǒng)的容量。根據(jù)測試的極限速率,使用10M以太網(wǎng)的實(shí)際有效傳輸速率僅有1.8 Mb/s,使用100M以太網(wǎng)口電沒有明顯的提高。另外,還有一個(gè)問題,網(wǎng)絡(luò)任務(wù)經(jīng)常會(huì)掛起,在開機(jī)運(yùn)行較長時(shí)間后此現(xiàn)象尤為明顯,這對(duì)系統(tǒng)的可用性和無故障工作時(shí)間構(gòu)成威脅。而項(xiàng)目的目標(biāo)是實(shí)現(xiàn)高效穩(wěn)定的以太網(wǎng)包處理。
2 改進(jìn)UDP協(xié)議棧的思想與理由
根據(jù)對(duì)VxWorks操作系統(tǒng)的研究,發(fā)現(xiàn)它對(duì)以太網(wǎng)包的處理與一般的IP協(xié)議棧有所不同。MAC層的控制由硬件寄存器來實(shí)現(xiàn),實(shí)現(xiàn)了發(fā)送方以太網(wǎng)幀的成幀和接收的以太網(wǎng)幀頭確認(rèn)以后,通過DMA方式實(shí)現(xiàn)內(nèi)存與網(wǎng)絡(luò)介質(zhì)間的通信,網(wǎng)絡(luò)任務(wù)與硬件之間通過設(shè)備中斷進(jìn)行通信。在該操作系統(tǒng)中,有一個(gè)MUX層,它提供統(tǒng)一的發(fā)送函數(shù),其參數(shù)為發(fā)送的網(wǎng)絡(luò)設(shè)備管理表指針和發(fā)送的數(shù)據(jù)報(bào)指針。我們知道,在一個(gè)有多個(gè)網(wǎng)絡(luò)設(shè)備同時(shí)工作的計(jì)算機(jī)系統(tǒng)中,標(biāo)準(zhǔn)的IP協(xié)議棧要完成選取從哪個(gè)網(wǎng)絡(luò)設(shè)備端口(gate way)發(fā)送和判斷ARP的Cache中是否有對(duì)端的MAC地址,從而決定是否啟動(dòng)ARP進(jìn)行解析。在VxWorks中。是通過查Route表和ARP表來完成以上兩項(xiàng)工作的。Route表中儲(chǔ)存的是與每一個(gè)通信的子網(wǎng)的gart way,ARP表中儲(chǔ)存的是已知的IP地址與MAC地址的對(duì)應(yīng)關(guān)系。另外,數(shù)據(jù)報(bào)接收的處理過程中是在IP數(shù)據(jù)報(bào)存入內(nèi)存后申請MUX層的隊(duì)列緩沖區(qū),然后依次調(diào)用各上層協(xié)議的處理函數(shù)。
根據(jù)以上情況,考慮在MUX層修改UDP協(xié)議棧,在發(fā)送過程中,跳過socket接口,直接使用MUX層的發(fā)送函數(shù)。這樣,可以減少從UDP層網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩沖區(qū)到MUX層緩沖區(qū)之間的復(fù)制工作,從而提高發(fā)送效率。在接收數(shù)據(jù)包的處理過程中,在MUX層收到數(shù)據(jù)報(bào)后鉤掛(hook)一個(gè)處理函數(shù),對(duì)UDP協(xié)議的數(shù)據(jù)包進(jìn)行分檢,優(yōu)先于其他協(xié)議的處理。這樣可減少從MUX層緩沖區(qū)到UDP層網(wǎng)絡(luò)數(shù)據(jù)報(bào)緩沖區(qū)之間的復(fù)制,而且可以不再要求上層使用輪誨的方法檢查socket的緩沖區(qū)中的內(nèi)容,提高了處理的實(shí)時(shí)性。
3 改進(jìn)UDP協(xié)議棧出現(xiàn)的新問題
VxWorks的muxLib類庫中允許用戶自己定義一個(gè)協(xié)議棧,將協(xié)議棧綁定到一個(gè)具體的網(wǎng)絡(luò)端口上,同時(shí)要有一個(gè)處理函數(shù)對(duì)該網(wǎng)絡(luò)設(shè)備上收到的包進(jìn)行處理。加載改進(jìn)后的協(xié)議棧要先創(chuàng)建一組緩沖區(qū),每種緩沖區(qū)對(duì)應(yīng)不同的數(shù)據(jù)報(bào)長。預(yù)先分配一大塊內(nèi)存,可避免發(fā)送數(shù)據(jù)包時(shí)再去分配內(nèi)存,并可根據(jù)各種長度的數(shù)據(jù)報(bào)的使用頻度申請不同個(gè)數(shù)的緩沖區(qū)。發(fā)送過程中,要填寫IP首部的其他內(nèi)容,如協(xié)議版本號(hào)、UDP協(xié)議編號(hào)、idenfication域、IP首部校驗(yàn)和等等。在填寫的過程中,可以有意識(shí)地按照CPU的作業(yè)寬度和整數(shù)邊界進(jìn)行內(nèi)存賦值,提高發(fā)送效率。在接收過程中,要先判斷是否為UDP協(xié)議的數(shù)據(jù)報(bào)(根據(jù)第24字節(jié)為Oxll),然后做合法檢驗(yàn)。對(duì)本協(xié)議棧處理的數(shù)據(jù)報(bào),處理后要將其從MUX層的緩沖區(qū)隊(duì)列中刪除,未刪除的數(shù)據(jù)報(bào)由其他協(xié)議的處理函數(shù)處理。
經(jīng)過對(duì)協(xié)議棧的改進(jìn)發(fā)現(xiàn),在單向收發(fā)的環(huán)境下,發(fā)送效率提高了3倍左右;但是接收方效率的提高很
熱門點(diǎn)擊
- VxWorks下UDP協(xié)議棧效率的研究與改進(jìn)
- 硬實(shí)時(shí)操作系統(tǒng)-RTLinux
- 嵌入式系統(tǒng)內(nèi)存管理方案研究
- 指針、結(jié)構(gòu)體、聯(lián)合體的安全規(guī)范
- 基于Qt/Embedded的微波信號(hào)發(fā)生器軟
- 單片機(jī)IP技術(shù)在智能小區(qū)系統(tǒng)中的應(yīng)用
- 關(guān)于ISA設(shè)備的驅(qū)動(dòng)程序轉(zhuǎn)換為PCI設(shè)備的W
- 嵌入式Linux的動(dòng)態(tài)擴(kuò)展技術(shù)研究
- 矢量字庫在嵌入式機(jī)頂盒中的應(yīng)用
- 具有DSP功能的16位微控制器80296SA
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號(hào)調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究