一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施例涉及通信技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備。
【背景技術(shù)】
[0002]隨著現(xiàn)代通信網(wǎng)絡(luò)的飛速發(fā)展,人們對網(wǎng)絡(luò)設(shè)備提出了更高的要求,不僅需要保證數(shù)據(jù)的可靠性和安全性,還要求更加高速的數(shù)據(jù)處理能力。路由器、交換機(jī)、防火墻等網(wǎng)絡(luò)設(shè)備通常通過軟件管理內(nèi)存例如通過軟件申請或釋放的軟件緩沖區(qū)buffer,對接收的數(shù)據(jù)進(jìn)行處理。高速數(shù)據(jù)處理能力的要求使得網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)處理方式擴(kuò)展為通過硬件管理的內(nèi)存進(jìn)行數(shù)據(jù)處理。
[0003]現(xiàn)有技術(shù)中,網(wǎng)絡(luò)設(shè)備從外部設(shè)備接收到數(shù)據(jù)后,通過硬件申請硬件buffer,并通過直接內(nèi)存存取(Direct Memory Access, DMA)方式將數(shù)據(jù)存儲(chǔ)至硬件buffer對應(yīng)的內(nèi)存區(qū)域中,該存儲(chǔ)過程無需中央處理器(Central Processing Unit,CPU)和軟件的參與,僅通過網(wǎng)絡(luò)設(shè)備的硬件部分進(jìn)行操作。在硬件buffer獲取到該數(shù)據(jù)后,網(wǎng)絡(luò)設(shè)備可以將硬件buffer中的數(shù)據(jù)拷貝到軟件buffer的數(shù)據(jù)區(qū),從而由硬件buffer轉(zhuǎn)換成軟件buffer以使得上層應(yīng)用模塊可以通過軟件buffer進(jìn)行數(shù)據(jù)處理,并將硬件buffer釋放回硬件buffer管理單元。其中的軟件buffer滿足上層應(yīng)用模塊進(jìn)行數(shù)據(jù)處理時(shí)需要的數(shù)據(jù)結(jié)構(gòu),例如,Iinux系統(tǒng)中需要的sk_buff結(jié)構(gòu)的軟件buffer,vxwork系統(tǒng)中需要的m_blk結(jié)構(gòu)的軟件buffer等。在上層應(yīng)用模塊完成數(shù)據(jù)處理或數(shù)據(jù)轉(zhuǎn)發(fā)后,將軟件buffer釋放回軟件buffer池。上述過程可以正確地將硬件buffer釋放回硬件buffer管理單元并將軟件buffer釋放回軟件buffer池,從而可以避免軟件buffer和硬件buffer的錯(cuò)誤釋放。
[0004]但是,上述過程將硬件buffer中的數(shù)據(jù)拷貝到軟件buffer的數(shù)據(jù)區(qū)的拷貝動(dòng)作,增加了網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)處理的時(shí)間,并且過多地消耗了系統(tǒng)資源,從而降低了系統(tǒng)的運(yùn)行效率。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備,能夠解決現(xiàn)有技術(shù)中由于需要將硬件buffer中的數(shù)據(jù)拷貝到軟件buffer的數(shù)據(jù)區(qū)以供上層應(yīng)用模塊進(jìn)行處理,從而導(dǎo)致的系統(tǒng)運(yùn)行效率低的問題。
[0006]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0007]第一方面,提供一種數(shù)據(jù)處理方法,包括:
[0008]A、從物理接口接收到待處理數(shù)據(jù)后,獲取指向空閑硬件buffer的第一指針,所述第一指針指向的地址為所述硬件buffer的起始地址;
[0009]B、根據(jù)所述第一指針將待處理數(shù)據(jù)存儲(chǔ)至所述硬件buffer ;
[0010]C、根據(jù)所述第一指針獲取第二指針,所述第二指針指向的地址為與所述硬件buffer對應(yīng)的軟件buffer的起始地址,所述軟件buffer的數(shù)據(jù)區(qū)與所述硬件buffer對應(yīng)同一塊內(nèi)存區(qū)域;
[0011]D、將所述第二指針指向的所述軟件buffer交由上層應(yīng)用模塊進(jìn)行數(shù)據(jù)處理。
[0012]結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,在步驟A之前,所述方法還包括初始化步驟:
[0013]在所述軟件buffer中存放指向該軟件buffer起始地址的第二指針,所述第二指針的起始存放地址與所述第一指針指向的地址間隔預(yù)設(shè)字節(jié)數(shù)。
[0014]結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,步驟C中,所述根據(jù)所述第一指針獲取所述第二指針包括:
[0015]根據(jù)預(yù)設(shè)字節(jié)數(shù),將所述第一指針指向的地址進(jìn)行偏移計(jì)算,從計(jì)算出的地址中獲取存放的軟件buffer的起始地址。
[0016]結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述方法還包括如下步驟:
[0017]E、若確定不需要將上層應(yīng)用模塊處理后的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),則將所述軟件buffer釋放至軟件buffer池,并按照一定的周期時(shí)間將所述軟件buffer池中的所有軟件buffer的數(shù)據(jù)區(qū)作為空閑硬件buffer進(jìn)行管理;
[0018]若確定需要將上層應(yīng)用模塊處理后的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),則在將上層應(yīng)用模塊處理后的數(shù)據(jù)發(fā)送完成后,若確定待釋放buffer為與硬件buffer對應(yīng)的軟件buffer,則將所述待釋放軟件buffer的數(shù)據(jù)區(qū)作為空閑硬件buffer進(jìn)行管理。
[0019]結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,步驟E中,所述確定待釋放buffer為與硬件buffer對應(yīng)的軟件buffer包括:
[0020]判斷所述軟件buffer中存放的硬件buffer標(biāo)識符與預(yù)設(shè)標(biāo)識符一致,和/或所述軟件buffer起始地址的起始存放地址與其數(shù)據(jù)區(qū)的起始地址間隔的字節(jié)數(shù)與預(yù)設(shè)字節(jié)數(shù)一致,則確定所述待釋放軟件buffer為與硬件buffer對應(yīng)的軟件buffer。
[0021]第二方面,提供一種網(wǎng)絡(luò)設(shè)備,包括:
[0022]硬件buffer管理單元,用于根據(jù)buffer處理單元的申請,向buffer處理單元分配指向空閑硬件buffer的第一指針,所述第一指針指向的地址為所述硬件buffer的起始地址;
[0023]buffer處理單元,用于從物理接口接收待處理數(shù)據(jù),并將所述待處理數(shù)據(jù)存儲(chǔ)至所述第一指針指向的硬件buffer ;并用于根據(jù)所述第一指針獲取第二指針,所述第二指針指向的地址為與所述硬件buffer對應(yīng)的軟件buffer的起始地址,所述軟件buffer的數(shù)據(jù)區(qū)與所述硬件buffer對應(yīng)同一塊內(nèi)存區(qū)域;并將所述第二指針指向的所述軟件buffer交由上層應(yīng)用模塊進(jìn)行數(shù)據(jù)處理。
[0024]結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述網(wǎng)絡(luò)設(shè)備還包括:
[0025]初始化單元,用于在軟件buffer中存放指向該軟件buffer起始地址的第二指針,所述第二指針的起始存放地址與所述第一指針指向的地址間隔預(yù)設(shè)字節(jié)數(shù)。
[0026]結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述buffer處理單元還用于:
[0027]根據(jù)預(yù)設(shè)字節(jié)數(shù),將所述第一指針指向的地址進(jìn)行偏移計(jì)算,從計(jì)算出的地址中獲取存放的軟件buffer的起始地址。
[0028]結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述buffer處理單元還用于:
[0029]若確定不需要將上層應(yīng)用模塊處理后的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),則將所述軟件buffer釋放至軟件buffer池,并按照一定的周期時(shí)間將所述軟件buffer池中的所有軟件buffer的數(shù)據(jù)區(qū)批量釋放至硬件buffer管理單元;
[0030]若確定需要將上層應(yīng)用模塊處理后的數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā),則在將上層應(yīng)用模塊處理后的數(shù)據(jù)發(fā)送完成后,若確定待釋放buffer為與硬件buffer對應(yīng)的軟件buffer,則將所述待釋放軟件buffer的數(shù)據(jù)區(qū)釋放至硬件buffer管理單元。
[0031]結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述buffer處理單元還用于:
[0032]判斷所述軟件buffer中存放的硬件buffer標(biāo)識符與預(yù)設(shè)標(biāo)識符一致,和/或所述軟件buffer起始地址的起始存放地址與其數(shù)據(jù)區(qū)的起始地址間隔的字節(jié)數(shù)與預(yù)設(shè)字節(jié)數(shù)一致,則確定所述待釋放軟件buffer為與硬件buffer對應(yīng)的軟件buffer,則將所述待釋放軟件buffer的數(shù)據(jù)區(qū)釋放至硬件buffer管理單元。
[0033]本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備,由于硬件buffer與對應(yīng)的軟件buffer的數(shù)據(jù)區(qū)對應(yīng)同一塊內(nèi)存區(qū)域,因而當(dāng)網(wǎng)絡(luò)設(shè)備根據(jù)指向硬件buffer起始地址的第一指針將待處理數(shù)據(jù)存儲(chǔ)至硬件buffer時(shí),相當(dāng)于同時(shí)將待處理數(shù)據(jù)存儲(chǔ)至硬件buffer對應(yīng)的軟件buffer的數(shù)據(jù)區(qū),從而在網(wǎng)絡(luò)設(shè)備根據(jù)第一指針獲取到指向軟件buffer起始地址的第二指針后,可以將第二指針指向的軟件buffer交由上層應(yīng)用模塊進(jìn)行數(shù)據(jù)處理,從而可以避免將待處理數(shù)據(jù)從硬件buffer拷貝到軟件buffer的數(shù)據(jù)區(qū),因此,能夠解決現(xiàn)有技術(shù)中由于需要將硬件buffer中的數(shù)據(jù)拷貝到軟件buffer的數(shù)據(jù)區(qū)以供上層應(yīng)用模塊進(jìn)行數(shù)據(jù)處理,從而導(dǎo)致的系統(tǒng)運(yùn)行效率低的問題。
【附圖說明】
[0034]為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0035]圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)處理方法流程圖;
[0036]圖2為本發(fā)明另一實(shí)施例提供的一種數(shù)據(jù)處理方法流程圖;
[0037]圖3為本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)處理方法流程圖;
[0038]圖4為本發(fā)明實(shí)施例提供的一種軟件buffer的結(jié)構(gòu)示意圖;
[0039]圖5為本發(fā)明另一實(shí)施例提供的一種網(wǎng)絡(luò)設(shè)備結(jié)構(gòu)示意圖;
[0040]圖6為本發(fā)明另一實(shí)施例提供的一種網(wǎng)絡(luò)設(shè)備結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0041]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0042]本發(fā)明以下實(shí)施例中的硬件buffer及其對應(yīng)的軟件buffer的數(shù)據(jù)區(qū)共用一塊內(nèi)存區(qū)域,當(dāng)路由器等網(wǎng)絡(luò)設(shè)備將待處理數(shù)據(jù)存儲(chǔ)至硬件buffer時(shí),同時(shí)也將待處理數(shù)據(jù)存儲(chǔ)到了硬件buf的軟件buf f er的數(shù)據(jù)區(qū),從而可以避免現(xiàn)有技術(shù)中的拷貝動(dòng)作,節(jié)省資源開銷,提高系統(tǒng)運(yùn)行效率。
[0043]實(shí)施例1
[0044]本發(fā)明實(shí)