本發(fā)明涉及l(fā)inux系統(tǒng)收發(fā)數(shù)據(jù)包技術(shù)領(lǐng)域,特別涉及一種基于linux的無(wú)中斷線速收發(fā)包方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)帶寬也越來(lái)越大,網(wǎng)絡(luò)設(shè)備面臨更大的流量處理壓力,收發(fā)包性能是網(wǎng)絡(luò)設(shè)備性能提高的關(guān)鍵點(diǎn)之一,所以需要對(duì)傳統(tǒng)收發(fā)包方式進(jìn)行改進(jìn)以適應(yīng)大流量的收發(fā)包需求。
linux傳統(tǒng)方式的收發(fā)包都是通過(guò)觸發(fā)中斷來(lái)完成數(shù)據(jù)包收發(fā)工作的,數(shù)據(jù)包到來(lái)時(shí)觸發(fā)硬中斷,硬中斷觸發(fā)軟中斷,軟中斷完成收包,但是因?yàn)橹袛嗟奶幚矶夹枰{(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)中斷調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),過(guò)于頻繁的中斷調(diào)用,造成收包性能低下;另外,由于傳統(tǒng)方式的收發(fā)包需要在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝,而在大流量帶寬下需要拷貝的數(shù)據(jù)量較大,同樣導(dǎo)致傳統(tǒng)收發(fā)包方式性能低下,效率低。
技術(shù)實(shí)現(xiàn)要素:
為了避免通過(guò)觸發(fā)中斷收發(fā)數(shù)據(jù)包,以及避免觸發(fā)中斷收發(fā)數(shù)據(jù)包時(shí)由于數(shù)據(jù)拷貝等導(dǎo)致的收發(fā)包性能不高的問(wèn)題,提高收發(fā)包效率,本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包、發(fā)包方法及設(shè)備。所述技術(shù)方案如下:
第一方面,提供了一種基于linux的無(wú)中斷線速收包方法,所述方法包括:
s11、應(yīng)用程序獲取至少一個(gè)空閑緩沖塊對(duì)應(yīng)的編號(hào);
s12、所述應(yīng)用程序攜帶所述至少一個(gè)空閑緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換;
s13、所述內(nèi)核模塊將所述至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將所述至少一個(gè)空閑緩沖塊的物理地址配置到所述網(wǎng)卡,以使所述網(wǎng)卡通過(guò)所述多個(gè)空閑緩沖塊接收新的數(shù)據(jù)包;
s14、所述應(yīng)用程序根據(jù)所述內(nèi)核模塊返回的所述至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理所述已存數(shù)據(jù)包緩沖塊中數(shù)據(jù)。
結(jié)合第一方面,在第一種可能實(shí)現(xiàn)的方式中,在所述步驟s11之前,所述方法還包括:
確定共享內(nèi)存,所述共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存;
所述應(yīng)用程序通過(guò)所述內(nèi)核模塊映射共享所述共享內(nèi)存;
將所述共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)所述每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);其中,所述多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊;
使用所述多個(gè)空閑緩沖塊初始化所述網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置所述多個(gè)空閑緩沖塊物理地址到所述網(wǎng)卡中用于收包,并記錄所述多個(gè)空閑緩沖塊的編號(hào);以及
關(guān)閉所述網(wǎng)卡的中斷。
結(jié)合第一方面或第一方面的第一種可能實(shí)現(xiàn)的方式,在第二種可能實(shí)現(xiàn)的方式中,所述應(yīng)用程序攜帶所述至少一個(gè)空閑緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換包括:
所述應(yīng)用程序通過(guò)收包函數(shù)攜帶所述至少一個(gè)空閑緩沖塊的編號(hào),并將所述至少一個(gè)空閑緩沖塊編號(hào)發(fā)送至所述內(nèi)核模塊;以及
調(diào)用所述內(nèi)核模塊中的收包函數(shù),以觸發(fā)所述內(nèi)核模塊根據(jù)所述至少一個(gè)空閑緩沖塊編號(hào)與所述網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
結(jié)合第一方面或第一方面的第二種可能實(shí)現(xiàn)的方式,在第三種可能實(shí)現(xiàn)的方式中,所述內(nèi)核模塊將所述至少一個(gè)空閑緩沖塊編號(hào)與網(wǎng)卡中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將所述至少一個(gè)空閑緩沖塊的物理地址配置到所述網(wǎng)卡包括:
所述內(nèi)核模塊中的收包函數(shù)判斷所述網(wǎng)卡收包隊(duì)列中是否有已存數(shù)據(jù)包緩沖塊;
若有,則將所述至少一個(gè)空閑緩沖塊的編號(hào)與所述網(wǎng)卡收包隊(duì)列中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)進(jìn)行交換,并將所述至少一個(gè)空閑緩沖塊的物理地址配置到所述網(wǎng)卡的收包隊(duì)列中,以用作網(wǎng)卡后續(xù)收包;
所述內(nèi)核模塊將所述至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)及數(shù)量返回至所述應(yīng)用程序。
結(jié)合第一方面,在第四種可能實(shí)現(xiàn)的方式中,在執(zhí)行步驟s14之后,繼續(xù)執(zhí)行步驟s11。
第二方面,提供了一種基于linux的無(wú)中斷線速發(fā)包方法,所述方法包括:
s21、應(yīng)用程序獲取至少一個(gè)空閑緩沖塊及對(duì)應(yīng)的編號(hào),并將待發(fā)數(shù)據(jù)存儲(chǔ)于所述至少一個(gè)空閑緩沖中,形成至少一個(gè)待發(fā)緩沖塊;
s22、所述應(yīng)用程序攜帶所述至少一個(gè)待發(fā)緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換;
s23、所述內(nèi)核模塊將所述至少一個(gè)待發(fā)緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)交換,并將所述至少一個(gè)待發(fā)緩沖塊的物理地址配置至網(wǎng)卡中,網(wǎng)卡發(fā)送所述至少一個(gè)待發(fā)緩沖塊中的數(shù)據(jù)包;
s24、所述應(yīng)用程序根據(jù)所述內(nèi)核模塊返回的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào),歸還所述至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊為空閑緩沖塊于共享內(nèi)存中。
結(jié)合第二方面,在第一種可能實(shí)現(xiàn)的方式中,在所述步驟s21之前,所述方法還包括:
確定共享內(nèi)存,所述共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存;
所述應(yīng)用程序通過(guò)所述內(nèi)核模塊映射共享所述共享內(nèi)存;
將所述共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)所述每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);其中,所述多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊;
使用所述多個(gè)空閑緩沖塊初始化所述網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置所述多個(gè)空閑緩沖塊物理地址到所述網(wǎng)卡中用于收包,并記錄所述多個(gè)空閑緩沖塊的編號(hào);以及
關(guān)閉所述網(wǎng)卡的中斷。
結(jié)合第二方面或第二方面的第一種可能實(shí)現(xiàn)的方式,在第二種可能實(shí)現(xiàn)的方式中,在執(zhí)行步驟s24之后,繼續(xù)執(zhí)行步驟s21。
第三方面,提供了一種基于linux的無(wú)中斷線速收包設(shè)備,所述設(shè)備包括:
處理模塊,用于獲取至少一個(gè)空閑緩沖塊對(duì)應(yīng)的編號(hào);
所述處理模塊還用于攜帶所述至少一個(gè)空閑緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換;
內(nèi)核模塊,用于將所述至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將所述至少一個(gè)空閑緩沖塊的物理地址配置到所述網(wǎng)卡,以使所述網(wǎng)卡通過(guò)所述多個(gè)空閑緩沖塊接收新的數(shù)據(jù)包;
所述處理模塊還用于根據(jù)所述內(nèi)核模塊返回的所述至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理所述數(shù)據(jù)包中數(shù)據(jù)。
結(jié)合第三方面,在第一種可能實(shí)現(xiàn)的方式中,
所述設(shè)備還包括共享內(nèi)存確定模塊,用于確定共享內(nèi)存,所述共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存;
所述處理模塊還用于通過(guò)所述內(nèi)核模塊映射共享所述共享內(nèi)存;
緩沖塊設(shè)置模塊,用于將所述共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)所述每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);其中,所述多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊;
網(wǎng)卡初始化模塊,用于使用所述多個(gè)空閑緩沖塊初始化所述網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置所述多個(gè)空閑緩沖塊物理地址到所述網(wǎng)卡中用于收包,并記錄所述多個(gè)空閑緩沖塊的編號(hào);
網(wǎng)卡中斷關(guān)閉模塊,用于關(guān)閉所述網(wǎng)卡的中斷。
結(jié)合第三方面或第三方面的第一種可能實(shí)現(xiàn)的方式,在第二種可能實(shí)現(xiàn)的方式中,
所述處理模塊具體用于通過(guò)收包函數(shù)將攜帶的所述至少一個(gè)空閑緩沖塊的編號(hào),并將所述至少一個(gè)空閑緩沖塊編號(hào)發(fā)送至所述內(nèi)核模塊;
所述處理模塊還用于調(diào)用所述內(nèi)核模塊中的收包函數(shù),以觸發(fā)所述內(nèi)核模塊根據(jù)所述至少一個(gè)空閑緩沖塊編號(hào)與所述網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
結(jié)合第三方面或第三方面的第二種可能實(shí)現(xiàn)的方式,在第三種可能實(shí)現(xiàn)的方式中,
所述內(nèi)核模塊還包括判斷模塊,用于數(shù)判斷所述網(wǎng)卡收包隊(duì)列中是否有已存數(shù)據(jù)包緩沖塊;
若判定有,則所述內(nèi)核模塊將所述至少一個(gè)空閑緩沖塊的編號(hào)與所述網(wǎng)卡收包隊(duì)列中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)進(jìn)行交換,并將所述至少一個(gè)空閑緩沖塊的物理地址配置到所述網(wǎng)卡的收包隊(duì)列中,以用作網(wǎng)卡后續(xù)收包;
所述內(nèi)核模塊還具體用于將所述至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)及數(shù)量返回至所述處理模塊。
結(jié)合第三方面,在第四種可能實(shí)現(xiàn)的方式中,在所述處理模塊根據(jù)所述內(nèi)核模塊返回的所述至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理所述已存數(shù)據(jù)包緩沖塊中數(shù)據(jù)之后,所述處理模塊、所述內(nèi)核模塊、所述網(wǎng)卡還包括繼續(xù)執(zhí)行對(duì)應(yīng)的操作。
第四方面,提供了一種基于linux的無(wú)中斷線速發(fā)包設(shè)備,其特征在于,所述設(shè)備包括:
處理模塊,用于獲取至少一個(gè)空閑緩沖塊及對(duì)應(yīng)的編號(hào),并將待發(fā)數(shù)據(jù)存儲(chǔ)于所述至少一個(gè)空閑緩沖中,形成至少一個(gè)待發(fā)緩沖塊;
所述處理模塊還用于攜帶所述至少一個(gè)待發(fā)緩沖塊編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換;
內(nèi)核模塊,用于將所述至少一個(gè)待發(fā)緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)交換,并將所述至少一個(gè)待發(fā)緩沖塊的物理地址配置至網(wǎng)卡中,網(wǎng)卡發(fā)送所述至少一個(gè)待發(fā)緩沖塊的數(shù)據(jù)包;
所述處理模塊還用于根據(jù)所述內(nèi)核模塊返回的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào),歸還所述至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊為空閑緩沖塊于共享內(nèi)存中。
結(jié)合第四方面,在第一種可能實(shí)現(xiàn)的方式中,
所述設(shè)備還包括共享內(nèi)存確定模塊,用于確定共享內(nèi)存,所述共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存;
所述處理模塊還用于通過(guò)所述內(nèi)核模塊映射共享所述共享內(nèi)存;
緩沖塊設(shè)置模塊,用于將所述共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)所述每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);其中,所述多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊;
網(wǎng)卡初始化模塊,用于使用所述多個(gè)空閑緩沖塊初始化所述網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置所述多個(gè)空閑緩沖塊物理地址到所述網(wǎng)卡中用于收包,并記錄所述多個(gè)空閑緩沖塊的編號(hào);
網(wǎng)卡終端關(guān)閉模塊,用于關(guān)閉所述網(wǎng)卡的中斷。
結(jié)合第四方面,在第二種可能實(shí)現(xiàn)的方式中,所述處理模塊根據(jù)所述內(nèi)核模塊返回的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào),歸還所述至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊為空閑緩沖塊于共享內(nèi)存中之后,所述處理模塊、所述內(nèi)核模塊、所述網(wǎng)卡還包括繼續(xù)執(zhí)行對(duì)應(yīng)的操作。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:本發(fā)明實(shí)施例提供的基于linux的無(wú)中斷線速收包方法,通過(guò)內(nèi)核模塊將應(yīng)用程序攜帶的至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中收到的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡,從而網(wǎng)卡獲取了空閑緩沖塊的物理地址,可以把新收到的數(shù)據(jù)包存儲(chǔ)到獲取空閑緩沖塊中,而應(yīng)用程序通過(guò)內(nèi)核模塊獲取到了網(wǎng)卡中的存有數(shù)據(jù)包緩沖塊的編號(hào),通過(guò)該編號(hào)直接訪問(wèn)共享內(nèi)存以進(jìn)行收到數(shù)據(jù)包的處理;
本發(fā)明實(shí)施例提供的基于linux的無(wú)中斷線速發(fā)包方法,通過(guò)內(nèi)核模塊將應(yīng)用程序攜帶的至少一個(gè)待發(fā)緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)交換,并將至少一個(gè)待發(fā)緩沖塊的物理地址配置至網(wǎng)卡中,從而獲取了待發(fā)緩沖塊即待發(fā)數(shù)據(jù)包的物理地址,從而通過(guò)該物理地址進(jìn)行數(shù)據(jù)包發(fā)送,而應(yīng)用程序通過(guò)內(nèi)核重新獲取了網(wǎng)卡中已發(fā)數(shù)據(jù)的緩沖塊即已發(fā)數(shù)據(jù)的空閑緩沖塊,該緩沖塊歸還至共享內(nèi)存中能夠繼續(xù)用作后續(xù)的收發(fā)包;
從而收包時(shí),網(wǎng)卡直接存儲(chǔ)數(shù)據(jù)包到應(yīng)用程序可訪問(wèn)的緩沖塊中,發(fā)包時(shí)直接使用應(yīng)用程序填充了數(shù)據(jù)包的緩沖塊的物理地址進(jìn)行發(fā)送,所以該收發(fā)包過(guò)程均無(wú)需進(jìn)行數(shù)據(jù)拷貝,達(dá)到了線速的收發(fā)數(shù)據(jù)包,提高了收發(fā)數(shù)據(jù)包的性能;同時(shí),由于傳統(tǒng)的中斷收發(fā)數(shù)據(jù)包時(shí)需要調(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),頻繁中斷調(diào)用造成傳統(tǒng)的收發(fā)數(shù)據(jù)包性能低下,而在本發(fā)明實(shí)施例中,關(guān)閉中斷,采用循環(huán)主動(dòng)收發(fā)包,避免了傳統(tǒng)的中斷對(duì)cpu資源的頻繁調(diào)用,而是直接將資源用于收發(fā)數(shù)據(jù)包上,從而提高了收發(fā)數(shù)據(jù)包性能;且與傳統(tǒng)的中斷收發(fā)包時(shí)在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝相比,而本發(fā)明實(shí)施例所提供的方式無(wú)需進(jìn)行數(shù)據(jù)拷貝,更加適應(yīng)大流量下的數(shù)據(jù)所需的處理速度,滿足了用戶對(duì)設(shè)備收發(fā)數(shù)據(jù)的速度需求。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的一種基于linux的無(wú)中斷線速收包方法流程圖;
圖2是本發(fā)明實(shí)施例提供的一種基于linux的無(wú)中斷線速收包方法流程圖;
圖3是本發(fā)明實(shí)施例提供的一種基于linux的無(wú)中斷線速收包的示例框圖;
圖4是本發(fā)明實(shí)施例提供的一種基于linux的無(wú)中斷線速發(fā)包方法流程圖;
圖5是本發(fā)明實(shí)施例提供的一種基于linux的無(wú)中斷線速發(fā)包的示例框圖;
圖6是本發(fā)明實(shí)施例提供的一種電子設(shè)備結(jié)構(gòu)示意圖;
圖7是本發(fā)明實(shí)施例提供的一種電子設(shè)備結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包方法,參照?qǐng)D1所示,該方法流程包括:
s11、應(yīng)用程序獲取至少一個(gè)空閑緩沖塊對(duì)應(yīng)的編號(hào)。
s12、應(yīng)用程序攜帶至少一個(gè)空閑緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
具體的,該步驟包括:
應(yīng)用程序通過(guò)收包函數(shù)攜帶至少一個(gè)空閑緩沖塊編號(hào),并將至少一個(gè)空閑緩沖塊編號(hào)發(fā)送至內(nèi)核模塊;
調(diào)用內(nèi)核模塊中的收包函數(shù),以觸發(fā)內(nèi)核模塊根據(jù)至少一個(gè)空閑緩沖塊編號(hào)與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
s13、內(nèi)核模塊將至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡,以使網(wǎng)卡通過(guò)多個(gè)空閑緩沖塊接收新的數(shù)據(jù)包。
具體的,該步驟包括:
內(nèi)核模塊中的收包函數(shù)判斷網(wǎng)卡收包隊(duì)列中是否有已存數(shù)據(jù)包緩沖塊,若有,則將至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡收包隊(duì)列中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)進(jìn)行交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡的收包隊(duì)列中,以用作網(wǎng)卡后續(xù)收包;以及
內(nèi)核模塊將至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)及數(shù)量返回至應(yīng)用程序;
若無(wú),則返回?cái)?shù)據(jù)包數(shù)量為0。返回?cái)?shù)據(jù)包數(shù)量為0之后還包括繼續(xù)執(zhí)行步驟s11及之后的步驟。
需要說(shuō)明的是,當(dāng)網(wǎng)卡沒(méi)有收到數(shù)據(jù)包時(shí),內(nèi)核模塊與網(wǎng)卡可以不進(jìn)行空閑緩沖塊編號(hào)與已存數(shù)據(jù)包緩沖塊編號(hào)的交換,以及內(nèi)核模塊也不進(jìn)行將空閑緩沖塊物理地址配置到網(wǎng)卡中的步驟。
s14、應(yīng)用程序根據(jù)內(nèi)核模塊返回的至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理已存數(shù)據(jù)包緩沖塊中數(shù)據(jù)。
可選的,在步驟s11之前,方法還包括:
s31、確定共享內(nèi)存,共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存。
s32、應(yīng)用程序通過(guò)內(nèi)核模塊映射共享該共享內(nèi)存。
s33、將共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);
其中,該多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊。
s34、使用多個(gè)空閑緩沖塊初始化網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置多個(gè)空閑緩沖塊物理地址到網(wǎng)卡中用于收包,并記錄多個(gè)空閑緩沖塊的編號(hào)。
s35、關(guān)閉網(wǎng)卡的中斷。
需要說(shuō)明的是,并不是每次執(zhí)行步驟s11之前均需執(zhí)行s31-s35,當(dāng)已經(jīng)確定了共享內(nèi)存,應(yīng)用程序映射共享了共享內(nèi)存,且對(duì)共享內(nèi)存設(shè)置為了多個(gè)緩沖塊,對(duì)每個(gè)緩沖塊進(jìn)行了編號(hào),且使用多個(gè)空閑緩沖塊初始化了網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),關(guān)閉了網(wǎng)卡中斷,則直接執(zhí)行步驟s11-s14時(shí),使用之前設(shè)置好的,無(wú)需每次執(zhí)行。
可選的,方法還包括:
在執(zhí)行步驟s14之后,繼續(xù)執(zhí)行步驟s11。
步驟s11-s14是實(shí)時(shí)循環(huán)進(jìn)行的。
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包方法,通過(guò)內(nèi)核模塊將應(yīng)用程序攜帶的至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中收到的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡,從而網(wǎng)卡獲取了空閑緩沖塊的物理地址,可以把新收到的數(shù)據(jù)包存儲(chǔ)到獲取空閑緩沖塊中,而應(yīng)用程序通過(guò)內(nèi)核模塊獲取到了網(wǎng)卡中的存有數(shù)據(jù)包緩沖塊的編號(hào),通過(guò)該編號(hào)直接訪問(wèn)共享內(nèi)存以進(jìn)行收到數(shù)據(jù)包的處理;從而收包時(shí),網(wǎng)卡直接存儲(chǔ)數(shù)據(jù)包到應(yīng)用程序可訪問(wèn)的緩沖塊中,所以該收包過(guò)程無(wú)需進(jìn)行數(shù)據(jù)拷貝,達(dá)到了線速的收取數(shù)據(jù)包,提高了收發(fā)數(shù)據(jù)包的性能;同時(shí),由于傳統(tǒng)的中斷收發(fā)數(shù)據(jù)包時(shí)需要調(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),頻繁中斷調(diào)用造成傳統(tǒng)的收發(fā)數(shù)據(jù)包性能低下,而在本發(fā)明實(shí)施例中,關(guān)閉中斷,采用循環(huán)主動(dòng)收包,避免了傳統(tǒng)的中斷對(duì)cpu資源的頻繁調(diào)用,而是直接將資源用于收取數(shù)據(jù)包上,從而提高了收發(fā)數(shù)據(jù)包性能;且與傳統(tǒng)的中斷收取數(shù)據(jù)包時(shí)在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝相比,而本發(fā)明無(wú)需進(jìn)行數(shù)據(jù)拷貝,減少了對(duì)cpu的占用,更加適應(yīng)大流量下的數(shù)據(jù)所需的處理速度,滿足了用戶對(duì)設(shè)備收發(fā)數(shù)據(jù)的速度需求。
實(shí)施例二
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包方法,參照?qǐng)D2所示,該方法流程包括:
s31、確定共享內(nèi)存,共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存。
具體的,內(nèi)核模塊申請(qǐng)一定大小的內(nèi)存用作共享內(nèi)存;還可以是用戶通過(guò)內(nèi)核模塊預(yù)設(shè)一定大小的內(nèi)存,除此以外,還可以通過(guò)其他方式確定共享內(nèi)存,本發(fā)明實(shí)施例對(duì)具體的方式不加以限定。
其中,該共享內(nèi)存的大小至少大于2m,還可以根據(jù)設(shè)備內(nèi)存空間總體大小以及與網(wǎng)絡(luò)數(shù)據(jù)交互的大小,設(shè)置該共享內(nèi)存的大??;也可以根據(jù)其他設(shè)置共享內(nèi)存大小,如設(shè)備性能、寬帶大小等。
s32、應(yīng)用程序通過(guò)內(nèi)核模塊映射共享該共享內(nèi)存。
該步驟可以通過(guò)mmap函數(shù)系統(tǒng)實(shí)現(xiàn),具體的:
在linux操作系統(tǒng)中,應(yīng)用程序執(zhí)行mmap函數(shù)調(diào)用,此時(shí),內(nèi)核模塊相應(yīng)的mmap函數(shù)就會(huì)被觸發(fā);在執(zhí)行該s32步驟時(shí),當(dāng)應(yīng)用程序執(zhí)行mmap函數(shù)調(diào)用時(shí),內(nèi)核模塊的mmap函數(shù)把已申請(qǐng)的該共享內(nèi)存通過(guò)remap_pfn_range函數(shù)進(jìn)行共享,應(yīng)用程序的mmap函數(shù)將該共享內(nèi)存的地址返回給應(yīng)用程序,應(yīng)用程序通過(guò)該返回的地址訪問(wèn)共享內(nèi)存;
除了上述方式之外,還可以通過(guò)其他方式執(zhí)行步驟s32,本發(fā)明對(duì)該步驟的具體執(zhí)行方式不加以限定。
s33、將共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào)。
其中,該多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊。
具體的,將共享內(nèi)存中的部分內(nèi)存分割為多個(gè)緩沖塊,每個(gè)緩沖塊的大小可以2kb,也可以為4kb;
分割的方式包括:
將該部分內(nèi)存均分割為2kb大小的多個(gè)緩沖塊;或
將該部分內(nèi)存均分割為4kb大小的多個(gè)緩沖塊;或者
將該部分內(nèi)存中部分分割為2kb大小,部分分割為4kb,對(duì)于分割為2kb大小的緩沖塊的數(shù)量和分割為4kb大小的緩沖塊的數(shù)據(jù)根據(jù)實(shí)際應(yīng)用進(jìn)行設(shè)置,對(duì)此不加以限定。
具體的,根據(jù)一次收包最大的收包數(shù)量,將共享內(nèi)存中的部分內(nèi)存分割為多個(gè)緩沖塊的數(shù)量可以為512個(gè);也可以根據(jù)共享內(nèi)存的大小確定分割緩沖塊數(shù)量的多少,該分割的緩沖塊數(shù)量可以最少為512個(gè),也可以為了保證收包效率,分割更多數(shù)量的緩沖塊數(shù)量。
對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào)具體包括:
通過(guò)數(shù)字,對(duì)每個(gè)緩沖塊按照順序進(jìn)行編號(hào),如1、2、3……512……;或者
通過(guò)字母和數(shù)字,對(duì)每個(gè)緩沖塊按照順序進(jìn)行編號(hào),如a1、a2、a3…b1、b2、b3…c1、c2、c3…。
除了上述方式之外,還可以采用其他標(biāo)記對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào),本發(fā)明實(shí)施例對(duì)具體的標(biāo)記編號(hào)方式不加以限定。
可選的,方法還包括:
在共享內(nèi)存中預(yù)留出一部分內(nèi)存,該預(yù)留內(nèi)存用作放置已收數(shù)據(jù)包緩沖塊以及空閑緩沖塊。
s34、使用多個(gè)空閑緩沖塊初始化網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置多個(gè)空閑緩沖塊物理地址到網(wǎng)卡中用于收包,并記錄多個(gè)空閑緩沖塊的編號(hào)。
s35、關(guān)閉網(wǎng)卡的中斷。
通過(guò)確定共享內(nèi)存,因?yàn)楣蚕韮?nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存,網(wǎng)卡與共享內(nèi)存為直接存儲(chǔ)器訪問(wèn),從而網(wǎng)卡可以通過(guò)該共享內(nèi)存進(jìn)行數(shù)據(jù)包的接收和發(fā)送,而應(yīng)用程序通過(guò)內(nèi)核模塊共享該共享內(nèi)從,從而使得應(yīng)用程序可以通過(guò)訪問(wèn)該共享內(nèi)存,通過(guò)內(nèi)核模塊實(shí)現(xiàn)與網(wǎng)卡數(shù)據(jù)的交互;以及將共享內(nèi)存分割為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào),方便了將緩沖塊與編號(hào)相對(duì)應(yīng),避免在數(shù)據(jù)包接收發(fā)送過(guò)程中會(huì)有混亂的問(wèn)題,提高了處理效率。
需要說(shuō)明的是,并不是每次執(zhí)行步驟s11之前均需執(zhí)行s31-s35,當(dāng)已經(jīng)確定了共享內(nèi)存,應(yīng)用程序映射共享了共享內(nèi)存,且對(duì)共享內(nèi)存設(shè)置為了多個(gè)緩沖塊,以及對(duì)每個(gè)緩沖塊進(jìn)行了編號(hào),則直接執(zhí)行步驟s11-s14時(shí),使用之前設(shè)置好的,無(wú)需每次執(zhí)行。
s11、應(yīng)用程序獲取至少一個(gè)空閑緩沖塊對(duì)應(yīng)的編號(hào)。
具體的,應(yīng)用程序通過(guò)訪問(wèn)共享內(nèi)存,以獲取至少一個(gè)空閑緩沖塊對(duì)應(yīng)的編號(hào)。
其中,經(jīng)過(guò)多次收包以及對(duì)收到數(shù)據(jù)包的處理,空閑緩沖塊的編號(hào)已經(jīng)不再連續(xù),而應(yīng)用程序通過(guò)訪問(wèn)共享內(nèi)存,獲取其中空閑的緩沖塊對(duì)應(yīng)的編號(hào),應(yīng)用程序可以獲取一個(gè)空閑緩沖塊的編號(hào),也可以獲取多個(gè)空閑緩沖塊的編號(hào)。
s12、應(yīng)用程序攜帶至少一個(gè)空閑緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
具體的,該步驟包括:
s121、應(yīng)用程序通過(guò)收包函數(shù)攜帶至少一個(gè)空閑緩沖塊的編號(hào),并將至少一個(gè)空閑緩沖塊編號(hào)發(fā)送至內(nèi)核模塊。
該收包函數(shù)可以是ioctl函數(shù)(類型為收包),具體的,該過(guò)程可以包括;
該應(yīng)用程序通過(guò)收包函數(shù)攜帶該至少一個(gè)空閑緩沖塊編號(hào),將該至少一個(gè)空閑緩沖塊編號(hào)放置到預(yù)留內(nèi)存。
s122、調(diào)用內(nèi)核模塊中的收包函數(shù),以觸發(fā)內(nèi)核模塊根據(jù)至少一個(gè)空閑緩沖塊編號(hào)與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
具體的,當(dāng)應(yīng)用程序通過(guò)收包函數(shù)攜帶至少一個(gè)空閑緩沖塊編號(hào)至預(yù)留內(nèi)存后,內(nèi)核模塊獲取該至少一個(gè)空閑緩沖塊編號(hào);以及
應(yīng)用程序通過(guò)收包函數(shù)ioctl(類型為收包)調(diào)用內(nèi)核模塊中的收包函數(shù)以進(jìn)行從網(wǎng)卡交換接收的數(shù)據(jù)包,其中,網(wǎng)卡收到數(shù)據(jù)包后會(huì)將數(shù)據(jù)包存放到收包隊(duì)列中存儲(chǔ)的空閑緩沖塊中。
s13、內(nèi)核模塊將至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡,以使網(wǎng)卡通過(guò)多個(gè)空閑緩沖塊接收新的數(shù)據(jù)包。
具體的,該步驟包括:
s131、內(nèi)核模塊中的收包函數(shù)判斷網(wǎng)卡收包隊(duì)列中是否有已存數(shù)據(jù)包緩沖塊,若有,則執(zhí)行步驟s132-s133,s133之后執(zhí)行步驟s14;若無(wú),則返回?cái)?shù)據(jù)包數(shù)量為0。
具體的,該判斷過(guò)程可以包括:從收包隊(duì)列中上次結(jié)束節(jié)點(diǎn)位置開(kāi)始判斷節(jié)點(diǎn)的狀態(tài),如果狀態(tài)為done(完成),表示該節(jié)點(diǎn)已經(jīng)收到數(shù)據(jù)包;依次判斷收包隊(duì)列中的節(jié)點(diǎn)的done狀態(tài),則可獲取隊(duì)列中收到數(shù)據(jù)包的節(jié)點(diǎn),即得到收到包的緩沖塊;其中,每個(gè)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)包的內(nèi)存為應(yīng)用程序提供的緩沖塊內(nèi)存。
需要說(shuō)明的是,返回?cái)?shù)據(jù)包數(shù)量為0,還包括繼續(xù)執(zhí)行步驟s11及之后的步驟。
s132、將至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡收包隊(duì)列中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)進(jìn)行交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡的收包隊(duì)列中,以用作網(wǎng)卡后續(xù)收包。
其中,將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡的收包隊(duì)列中,以使網(wǎng)卡將該至少個(gè)空閑緩沖塊對(duì)應(yīng)的物理地址存儲(chǔ)到收包隊(duì)列中,用作后續(xù)收包;當(dāng)新的數(shù)據(jù)包到達(dá)網(wǎng)卡時(shí),網(wǎng)卡自動(dòng)將數(shù)據(jù)包存儲(chǔ)到收包隊(duì)列中存儲(chǔ)的空閑緩沖塊的物理地址中。
s133、內(nèi)核模塊將至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)及數(shù)量返回至應(yīng)用程序。
當(dāng)內(nèi)核模塊與網(wǎng)卡交換后,內(nèi)核模塊獲取了已存數(shù)據(jù)包緩沖塊的編號(hào),而網(wǎng)卡收到數(shù)據(jù)后,將數(shù)據(jù)包存儲(chǔ)到空閑緩沖塊中,該存儲(chǔ)了數(shù)據(jù)包的緩沖塊位于共享內(nèi)存中,內(nèi)核模塊將獲取的至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào)及數(shù)量返回至應(yīng)用程序,以使應(yīng)用程序根據(jù)返回的編號(hào)及數(shù)量訪問(wèn)共享內(nèi)存,以進(jìn)行處理數(shù)據(jù)包。
需要說(shuō)明的是,當(dāng)網(wǎng)卡沒(méi)有收到數(shù)據(jù)包時(shí),內(nèi)核模塊與網(wǎng)卡可以不進(jìn)行空閑緩沖塊編號(hào)與已存數(shù)據(jù)包緩沖塊編號(hào)的交換,以及內(nèi)核模塊也不會(huì)將空閑緩沖塊物理地址配置到網(wǎng)卡中。
s14、應(yīng)用程序根據(jù)內(nèi)核模塊返回的至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理已存數(shù)據(jù)包緩沖塊中數(shù)據(jù)。
具體的,應(yīng)用程序根據(jù)內(nèi)核模塊返回的至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào)及數(shù)量,訪問(wèn)共享內(nèi)存,對(duì)該至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào)對(duì)應(yīng)的緩沖塊中數(shù)據(jù)包進(jìn)行處理。
可選的,方法還包括:
在執(zhí)行步驟s14之后,繼續(xù)執(zhí)行步驟s11。
步驟s11-s14是實(shí)時(shí)循環(huán)進(jìn)行的。
為了進(jìn)一步說(shuō)明本發(fā)明實(shí)施例提供的基于linux的無(wú)中斷線速收包方法,下面將結(jié)合框圖進(jìn)行說(shuō)明,參照?qǐng)D3所示,為收包過(guò)程的示例框圖,比如如圖中所示,共享內(nèi)存有0、1、2…x…y…n個(gè)緩沖塊,其中編號(hào)x的緩沖塊為空閑緩沖塊,網(wǎng)卡收到數(shù)據(jù)包,將數(shù)據(jù)包存儲(chǔ)到編號(hào)y的緩沖塊中,其中,需要說(shuō)明的是,網(wǎng)卡與共享內(nèi)存是直接存儲(chǔ)器訪問(wèn)(dma),圖中的共享內(nèi)存的框外的數(shù)字表示執(zhí)行步驟的先后順序,則該收包過(guò)程可以為:應(yīng)用程序獲取空閑緩沖塊x的編號(hào)x,應(yīng)用程序攜帶該空閑緩沖塊編號(hào)x觸發(fā)內(nèi)核模塊收取網(wǎng)卡中數(shù)據(jù)包,則內(nèi)核模塊將該空閑緩沖塊x與網(wǎng)卡收到的存有數(shù)據(jù)包緩沖塊y的編號(hào)交換,并將空閑緩沖塊x的物理地址配置到網(wǎng)卡,網(wǎng)卡獲取了該物理地址后,將該空閑緩沖塊x的物理地址存儲(chǔ)到收包隊(duì)列中,用作下次收取數(shù)據(jù)包所用;內(nèi)核模塊向應(yīng)用程序返回緩沖塊y編號(hào),應(yīng)用程序得知該編號(hào)y的緩沖塊存有數(shù)據(jù),則應(yīng)用程序通過(guò)訪問(wèn)共享內(nèi)存處理該緩沖塊y中的數(shù)據(jù)包;值得注意的是,此處只是示例性的,為了進(jìn)一步方便本領(lǐng)域技術(shù)人理解本方案,該示例中的編號(hào)、方框以及執(zhí)行順序等的只是為了方便理解,不能作為本技術(shù)方案的限定范圍或作為其他文字證據(jù),且本領(lǐng)域技術(shù)人員在此基礎(chǔ)上做出的雷同改進(jìn)均在本發(fā)明保護(hù)范圍內(nèi)。
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包方法,通過(guò)內(nèi)核模塊將應(yīng)用程序攜帶的至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡中收到的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡,從而網(wǎng)卡獲取了空閑緩沖塊的物理地址,可以把新收到的數(shù)據(jù)包存儲(chǔ)到獲取空閑緩沖塊中,而應(yīng)用程序通過(guò)內(nèi)核模塊獲取到了網(wǎng)卡中的存有數(shù)據(jù)包緩沖塊的編號(hào),通過(guò)該編號(hào)直接訪問(wèn)共享內(nèi)存以進(jìn)行收到數(shù)據(jù)包的處理;從而收包時(shí),網(wǎng)卡直接存儲(chǔ)數(shù)據(jù)包到應(yīng)用程序可訪問(wèn)的緩沖塊中,所以該收包過(guò)程無(wú)需進(jìn)行數(shù)據(jù)拷貝,達(dá)到了線速的收取數(shù)據(jù)包,提高了收發(fā)數(shù)據(jù)包的性能;同時(shí),由于傳統(tǒng)的中斷收發(fā)數(shù)據(jù)包時(shí)需要調(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),頻繁中斷調(diào)用造成傳統(tǒng)的收發(fā)數(shù)據(jù)包性能低下,而在本發(fā)明實(shí)施例中,關(guān)閉中斷,采用循環(huán)主動(dòng)收包,避免了傳統(tǒng)的中斷對(duì)cpu資源的頻繁調(diào)用,而是直接將資源用于收取數(shù)據(jù)包上,從而提高了收發(fā)數(shù)據(jù)包性能;且與傳統(tǒng)的中斷收取數(shù)據(jù)包時(shí)在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝相比,而本發(fā)明無(wú)需進(jìn)行數(shù)據(jù)拷貝,減少了對(duì)cpu的占用,更加適應(yīng)大流量下的數(shù)據(jù)所需的處理速度,滿足了用戶對(duì)設(shè)備收發(fā)數(shù)據(jù)的速度需求。
實(shí)施例三
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速發(fā)包方法,參照?qǐng)D4所示,該方法流程包括:
s41、確定共享內(nèi)存,共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存。
s42、應(yīng)用程序通過(guò)內(nèi)核模塊映射共享該共享內(nèi)存。
s43、將共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào)。
其中,該多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊。
s44、使用多個(gè)空閑緩沖塊初始化網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置多個(gè)空閑緩沖塊物理地址到網(wǎng)卡中用于收包,并記錄多個(gè)空閑緩沖塊的編號(hào)。
s45、關(guān)閉網(wǎng)卡的中斷。
其中,s41-s42步驟的具體執(zhí)行方式與實(shí)施例二中的步驟s31-s35類似,此處不再加以贅述。
需要說(shuō)明的是,并不是每次執(zhí)行步驟s21之前均需執(zhí)行s41-s45,當(dāng)已經(jīng)確定了共享內(nèi)存,應(yīng)用程序映射共享了共享內(nèi)存,且對(duì)共享內(nèi)存設(shè)置為了多個(gè)緩沖塊,以及對(duì)每個(gè)緩沖塊進(jìn)行了編號(hào),且使用多個(gè)空閑緩沖塊初始化網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),關(guān)閉了網(wǎng)卡的中斷,則直接執(zhí)行步驟s21-s24時(shí),使用之前設(shè)置好的,無(wú)需每次執(zhí)行。
通過(guò)確定共享內(nèi)存,因?yàn)楣蚕韮?nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存,網(wǎng)卡與共享內(nèi)存為直接存儲(chǔ)器訪問(wèn),從而網(wǎng)卡可以通過(guò)該共享內(nèi)存進(jìn)行數(shù)據(jù)包的接收和發(fā)送,而應(yīng)用程序通過(guò)內(nèi)核模塊共享該共享內(nèi)存,從而使得應(yīng)用程序可以通過(guò)訪問(wèn)該共享內(nèi)存,通過(guò)內(nèi)核模塊實(shí)現(xiàn)與網(wǎng)卡數(shù)據(jù)的交互;以及將共享內(nèi)存分割為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào),方便了將緩沖塊與編號(hào)相對(duì)應(yīng),避免在數(shù)據(jù)包接收發(fā)送過(guò)程中會(huì)有混亂的問(wèn)題,提高了處理效率。
s21、應(yīng)用程序獲取至少一個(gè)空閑緩沖塊及對(duì)應(yīng)的編號(hào),并將待發(fā)數(shù)據(jù)存儲(chǔ)于至少一個(gè)空閑緩沖中,形成至少一個(gè)待發(fā)緩沖塊。
具體的,應(yīng)用程序通過(guò)訪問(wèn)共享內(nèi)存,以獲取至少一個(gè)空閑緩沖塊及對(duì)應(yīng)的編號(hào)。
其中,經(jīng)過(guò)多次收包以及對(duì)收到數(shù)據(jù)包的處理,空閑緩沖塊的編號(hào)已經(jīng)不再連續(xù),而應(yīng)用程序通過(guò)訪問(wèn)共享內(nèi)存,獲取其中空閑的緩沖塊對(duì)應(yīng)的編號(hào),應(yīng)用程序根據(jù)待發(fā)數(shù)據(jù)的大小獲取一個(gè)或多個(gè)空閑緩沖塊及對(duì)應(yīng)的編號(hào),并將數(shù)據(jù)包存儲(chǔ)于該一個(gè)或多個(gè)空閑緩沖塊中。
s22、應(yīng)用程序攜帶至少一個(gè)待發(fā)緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
該過(guò)程可以包括:
a、應(yīng)用程序通過(guò)發(fā)包函數(shù)攜帶至少一個(gè)待發(fā)緩沖塊編號(hào),并將至少一個(gè)待發(fā)緩沖塊編號(hào)發(fā)送至內(nèi)核模塊。
該發(fā)包函數(shù)可以ioctl函數(shù)(類型為發(fā)包),該應(yīng)用程序通過(guò)發(fā)包函數(shù)攜帶該至少一個(gè)待發(fā)緩沖塊編號(hào),將該至少一個(gè)空閑緩沖塊編號(hào)放置到預(yù)留內(nèi)存中。
b、調(diào)用內(nèi)核模塊中的發(fā)包函數(shù),以觸發(fā)內(nèi)核模塊根據(jù)至少一個(gè)待發(fā)緩沖塊編號(hào)與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換。
具體的,當(dāng)應(yīng)用程序通過(guò)收包函數(shù)攜帶至少一個(gè)待發(fā)緩沖塊編號(hào)至預(yù)留內(nèi)存后,內(nèi)核模塊獲取該至少一個(gè)待發(fā)緩沖塊編號(hào);以及
應(yīng)用程序通過(guò)發(fā)包函數(shù)ioctl(類型為發(fā)包)調(diào)用內(nèi)核模塊中的發(fā)包函數(shù)以進(jìn)行從網(wǎng)卡交換已發(fā)數(shù)據(jù)包緩沖塊。
s23、內(nèi)核模塊將至少一個(gè)待發(fā)緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)交換,并將至少一個(gè)待發(fā)緩沖塊的物理地址配置至網(wǎng)卡中,網(wǎng)卡發(fā)送至少一個(gè)待發(fā)緩沖塊中的數(shù)據(jù)包。
具體的,該步驟包括:
內(nèi)核模塊將至少一個(gè)待發(fā)緩沖塊編號(hào)與網(wǎng)卡發(fā)包隊(duì)列中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)進(jìn)行交換,并將至少一個(gè)待發(fā)緩沖塊的物理地址配置到網(wǎng)卡的發(fā)包隊(duì)列中,網(wǎng)卡自動(dòng)發(fā)送該至少一個(gè)待發(fā)緩沖塊中的數(shù)據(jù)包;以及
內(nèi)核模塊將至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊的編號(hào)及數(shù)量返回至應(yīng)用程序。
可選的,內(nèi)核模塊將至少一個(gè)待發(fā)緩沖塊編號(hào)與網(wǎng)卡發(fā)包隊(duì)列中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)進(jìn)行交換的過(guò)程可以包括:
內(nèi)核模塊判斷網(wǎng)卡發(fā)包隊(duì)列中是否有已發(fā)數(shù)據(jù)緩沖塊;
具體的,通過(guò)判斷發(fā)包隊(duì)列中節(jié)點(diǎn)狀態(tài),如果發(fā)包完成則為done(完成)狀態(tài)。
需要說(shuō)明的是,該至少一個(gè)待發(fā)緩沖塊的回收是在下次發(fā)送數(shù)據(jù)包時(shí)進(jìn)行的。
具體的,發(fā)包時(shí),內(nèi)核模塊先回收網(wǎng)卡發(fā)包隊(duì)列中已完成數(shù)據(jù)發(fā)送的緩沖塊,位置從上次回收處到完成發(fā)包處;然后填充待發(fā)緩沖塊,位置從上次填充處開(kāi)始;其中,發(fā)包隊(duì)列中有多少節(jié)點(diǎn)可用于發(fā)送數(shù)據(jù)即填充多少待發(fā)送緩沖塊,剩余部分下次進(jìn)行發(fā)送。
s24、應(yīng)用程序根據(jù)內(nèi)核模塊返回的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào),歸還至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊為空閑緩沖塊于共享內(nèi)存中。
可選的,方法還包括:
在執(zhí)行步驟s24之后,繼續(xù)執(zhí)行步驟s21。
步驟s21-s24是實(shí)時(shí)循環(huán)進(jìn)行的。
為了進(jìn)一步說(shuō)明本發(fā)明實(shí)施例提供的基于linux的無(wú)中斷線速發(fā)包方法,下面將結(jié)合框圖進(jìn)行說(shuō)明,參照?qǐng)D5所示,為收包過(guò)程的示例框圖,比如如圖中所示,共享內(nèi)存有0、1、2…x…y…n個(gè)緩沖塊,其中編號(hào)x的緩沖塊為空閑緩沖塊,應(yīng)用程序獲取之后將待發(fā)數(shù)據(jù)存儲(chǔ)于空閑緩沖塊x中,存儲(chǔ)數(shù)據(jù)包的空閑緩沖塊在圖中為數(shù)據(jù)塊x,網(wǎng)卡中已發(fā)數(shù)據(jù)的緩沖塊為緩沖塊y,圖中的共享內(nèi)存的框外的數(shù)字表示執(zhí)行步驟的先后順序,則該發(fā)包過(guò)程可以為:應(yīng)用程序獲取空閑緩沖塊x,將將待發(fā)數(shù)據(jù)存儲(chǔ)于空閑緩沖x中,形成待發(fā)緩沖塊x,應(yīng)用程序攜帶該待發(fā)緩沖塊x觸發(fā)內(nèi)核模塊通過(guò)網(wǎng)卡發(fā)送數(shù)據(jù)包,則內(nèi)核模塊將該待發(fā)緩沖塊x與網(wǎng)卡已發(fā)數(shù)據(jù)的緩沖塊y編號(hào)交換,并將待發(fā)緩沖塊x的物理地址配置到網(wǎng)卡,網(wǎng)卡獲取了該物理地址后,讀取待發(fā)緩沖塊x中的數(shù)據(jù)包進(jìn)行發(fā)送;內(nèi)核模塊向應(yīng)用程序返回已發(fā)數(shù)據(jù)的緩沖塊y編號(hào),該已發(fā)數(shù)據(jù)的緩沖塊y為空閑緩沖塊,編號(hào)為y,應(yīng)用程序通過(guò)內(nèi)核模塊得知該編號(hào),歸還該空閑緩沖塊至共享內(nèi)存中;值得注意的是,此處只是示例性的,為了進(jìn)一步方便本領(lǐng)域技術(shù)人理解本方案,該示例中的編號(hào)、方框以及執(zhí)行順序等的只是為了方便理解,不能作為本技術(shù)方案的限定范圍或作為其他文字證據(jù),且本領(lǐng)域技術(shù)人員在此基礎(chǔ)上做出的雷同改進(jìn)均在本發(fā)明保護(hù)范圍內(nèi)。
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速發(fā)包方法,通過(guò)內(nèi)核模塊將應(yīng)用程序攜帶的至少一個(gè)待發(fā)緩沖塊的編號(hào)與網(wǎng)卡中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)交換,并將至少一個(gè)待發(fā)緩沖塊的物理地址配置至網(wǎng)卡中,從而獲取了待發(fā)緩沖塊即待發(fā)數(shù)據(jù)包的物理地址,從而通過(guò)該物理地址進(jìn)行數(shù)據(jù)發(fā)送,而應(yīng)用程序通過(guò)內(nèi)核重新獲取了網(wǎng)卡中已發(fā)數(shù)據(jù)的緩沖塊即已發(fā)數(shù)據(jù)的空閑緩沖塊,該緩沖塊歸還至共享內(nèi)存中能夠繼續(xù)用作后續(xù)的收發(fā)包;從而發(fā)包時(shí)直接使用應(yīng)用程序填充了數(shù)據(jù)包的緩沖塊的物理地址進(jìn)行發(fā)送,所以該發(fā)包過(guò)程無(wú)需進(jìn)行數(shù)據(jù)拷貝,達(dá)到了線速的收發(fā)數(shù)據(jù)包,提高了收發(fā)數(shù)據(jù)包的性能;同時(shí),由于傳統(tǒng)的中斷發(fā)數(shù)據(jù)包時(shí)需要調(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),頻繁中斷調(diào)用造成傳統(tǒng)的收發(fā)數(shù)據(jù)包性能低下,而在本發(fā)明實(shí)施例中,關(guān)閉中斷,采用循環(huán)主動(dòng)發(fā)包,避免了傳統(tǒng)的中斷對(duì)cpu資源的頻繁調(diào)用,而是直接將資源用于發(fā)送數(shù)據(jù)包上,從而提高了收發(fā)數(shù)據(jù)包性能;且與傳統(tǒng)的中斷發(fā)送數(shù)據(jù)包時(shí)在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝相比,本發(fā)明實(shí)施例所提供的方式無(wú)需進(jìn)行數(shù)據(jù)拷貝,更加適應(yīng)大流量下的數(shù)據(jù)所需的處理速度,滿足了用戶對(duì)設(shè)備收發(fā)數(shù)據(jù)的速度需求。
實(shí)施例四
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包設(shè)備,參照?qǐng)D6所示,設(shè)備6包括:
處理模塊61,用于獲取至少一個(gè)空閑緩沖塊對(duì)應(yīng)的編號(hào);
處理模塊61還用于攜帶至少一個(gè)空閑緩沖塊的編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)交換;
內(nèi)核模塊62,用于將至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡63中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡63,以使網(wǎng)卡63通過(guò)多個(gè)空閑緩沖塊接收新的數(shù)據(jù)包;
處理模塊61還用于根據(jù)內(nèi)核模塊返回的至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理已存數(shù)據(jù)包緩沖塊中數(shù)據(jù)。
可選的,
設(shè)備還包括共享內(nèi)存確定模塊64,用于確定共享內(nèi)存,共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存;
處理模塊61還用于通過(guò)內(nèi)核模塊62映射共享該共享內(nèi)存;
緩沖塊設(shè)置模塊65,用于將共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);其中,所述多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊;
網(wǎng)卡初始化模塊66,用于使用多個(gè)空閑緩沖塊初始化網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置多個(gè)空閑緩沖塊物理地址到網(wǎng)卡中用于收包,并記錄多個(gè)空閑緩沖塊的編號(hào);
網(wǎng)卡中斷關(guān)閉模塊67,用于關(guān)閉網(wǎng)卡的中斷。
可選的,
處理模塊61具體用于通過(guò)收包函數(shù)攜帶至少一個(gè)空閑緩沖塊的編號(hào),并將至少一個(gè)空閑緩沖塊編號(hào)發(fā)送至內(nèi)核模塊62;
處理模塊61還用于調(diào)用內(nèi)核模塊62中的收包函數(shù),以觸發(fā)內(nèi)核模塊62根據(jù)至少一個(gè)空閑緩沖塊編號(hào)與網(wǎng)卡63進(jìn)行數(shù)據(jù)包交換。
可選的,
內(nèi)核模塊62還包括判斷模塊621,用于數(shù)判斷網(wǎng)卡收包隊(duì)列中是否有已存數(shù)據(jù)包緩沖塊;
若判定有,則內(nèi)核模塊62將至少一個(gè)空閑緩沖塊的編號(hào)與網(wǎng)卡63收包隊(duì)列中的至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)進(jìn)行交換,并將至少一個(gè)空閑緩沖塊的物理地址配置到網(wǎng)卡63的收包隊(duì)列中,以用作網(wǎng)卡63后續(xù)收包;
內(nèi)核模塊62還具體用于將至少一個(gè)已存數(shù)據(jù)包緩沖塊的編號(hào)及數(shù)量返回至處理模塊61。
可選的,在處理模塊61還用于根據(jù)內(nèi)核模塊62返回的至少一個(gè)已存數(shù)據(jù)包緩沖塊編號(hào),處理已存數(shù)據(jù)包緩沖塊中數(shù)據(jù)之后,處理模塊61、內(nèi)核模塊62、網(wǎng)卡63還包括繼續(xù)執(zhí)行對(duì)應(yīng)的操作。
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速收包設(shè)備,該設(shè)備收包時(shí),網(wǎng)卡直接存儲(chǔ)數(shù)據(jù)包到應(yīng)用程序可訪問(wèn)的緩沖塊中,所以該收包過(guò)程無(wú)需進(jìn)行數(shù)據(jù)拷貝,達(dá)到了線速的收取數(shù)據(jù)包,提高了收發(fā)數(shù)據(jù)包的性能;同時(shí),由于傳統(tǒng)的中斷收發(fā)數(shù)據(jù)包時(shí)需要調(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),頻繁中斷調(diào)用造成傳統(tǒng)的收發(fā)數(shù)據(jù)包性能低下,而在本發(fā)明實(shí)施例中,關(guān)閉中斷,采用循環(huán)主動(dòng)收包,避免了傳統(tǒng)的中斷對(duì)cpu資源的頻繁調(diào)用,而是直接將資源用于收取數(shù)據(jù)包上,從而提高了收發(fā)數(shù)據(jù)包性能;且與傳統(tǒng)的中斷收取數(shù)據(jù)包時(shí)在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝相比,而本發(fā)明無(wú)需進(jìn)行數(shù)據(jù)拷貝,減少了對(duì)cpu的占用,更加適應(yīng)大流量下的數(shù)據(jù)所需的處理速度,滿足了用戶對(duì)設(shè)備收發(fā)數(shù)據(jù)的速度需求。
實(shí)施例五
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速發(fā)包設(shè)備7,參照?qǐng)D7所示,設(shè)備7包括:
處理模塊71,用于獲取至少一個(gè)空閑緩沖塊及對(duì)應(yīng)的編號(hào),并將待發(fā)數(shù)據(jù)存儲(chǔ)于至少一個(gè)空閑緩沖中,形成至少一個(gè)待發(fā)緩沖塊;
處理模塊71還用于攜帶至少一個(gè)待發(fā)緩沖塊編號(hào)觸發(fā)內(nèi)核模塊與網(wǎng)卡進(jìn)行數(shù)據(jù)包交換;
內(nèi)核模塊72,用于將至少一個(gè)待發(fā)緩沖塊的編號(hào)與網(wǎng)卡73中的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào)交換,并將至少一個(gè)待發(fā)緩沖塊的物理地址配置至網(wǎng)卡73中,網(wǎng)卡73發(fā)送至少一個(gè)待發(fā)緩沖塊中的數(shù)據(jù)包;
處理模塊71還用于根據(jù)內(nèi)核模塊72返回的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào),歸還至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊為空閑緩沖塊于共享內(nèi)存中。
可選的,
設(shè)備還包括共享內(nèi)存確定模塊74,用于確定共享內(nèi)存,共享內(nèi)存用作收發(fā)數(shù)據(jù)包緩沖內(nèi)存;
處理模塊71還用于通過(guò)內(nèi)核模塊映射共享該共享內(nèi)存;
緩沖塊設(shè)置模塊75,用于將共享內(nèi)存中部分內(nèi)存設(shè)置為多個(gè)緩沖塊,并對(duì)每個(gè)緩沖塊進(jìn)行標(biāo)記編號(hào);其中,所述多個(gè)緩沖塊未存儲(chǔ)數(shù)據(jù)包時(shí)為空閑緩沖塊;
網(wǎng)卡初始化模塊76,用于使用多個(gè)空閑緩沖塊初始化網(wǎng)卡收包隊(duì)列的所有節(jié)點(diǎn),配置多個(gè)空閑緩沖塊物理地址到網(wǎng)卡中用于收包,并記錄多個(gè)空閑緩沖塊的編號(hào);
網(wǎng)卡中斷關(guān)閉模塊77,用于關(guān)閉網(wǎng)卡的中斷。
可選的,處理模塊71根據(jù)內(nèi)核模塊72返回的至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊編號(hào),歸還至少一個(gè)已發(fā)數(shù)據(jù)緩沖塊為空閑緩沖塊于共享內(nèi)存中之后,處理模塊71、內(nèi)核模塊72、網(wǎng)卡73還包括繼續(xù)執(zhí)行對(duì)應(yīng)的操作。
本發(fā)明實(shí)施例提供了一種基于linux的無(wú)中斷線速發(fā)包設(shè)備,該設(shè)備發(fā)包時(shí)直接使用應(yīng)用程序填充了數(shù)據(jù)包的緩沖塊的物理地址進(jìn)行發(fā)送,所以該發(fā)包過(guò)程無(wú)需進(jìn)行數(shù)據(jù)拷貝,達(dá)到了線速的收發(fā)數(shù)據(jù)包,提高了收發(fā)數(shù)據(jù)包的性能;同時(shí),由于傳統(tǒng)的中斷發(fā)數(shù)據(jù)包時(shí)需要調(diào)用cpu資源來(lái)完成,每個(gè)數(shù)據(jù)包都觸發(fā)調(diào)用,當(dāng)數(shù)據(jù)量大時(shí),頻繁中斷調(diào)用造成傳統(tǒng)的收發(fā)數(shù)據(jù)包性能低下,而在本發(fā)明實(shí)施例中,關(guān)閉中斷,采用循環(huán)主動(dòng)發(fā)包,避免了傳統(tǒng)的中斷對(duì)cpu資源的頻繁調(diào)用,而是直接將資源用于發(fā)送數(shù)據(jù)包上,從而提高了收發(fā)數(shù)據(jù)包性能;且與傳統(tǒng)的中斷發(fā)送數(shù)據(jù)包時(shí)在內(nèi)核模塊和應(yīng)用程序間進(jìn)行多次數(shù)據(jù)拷貝相比,本發(fā)明實(shí)施例所提供的方式無(wú)需進(jìn)行數(shù)據(jù)拷貝,更加適應(yīng)大流量下的數(shù)據(jù)所需的處理速度,滿足了用戶對(duì)設(shè)備收發(fā)數(shù)據(jù)的速度需求。
上述所有可選技術(shù)方案,可以采用任意結(jié)合形成本發(fā)明的可選實(shí)施例,在此不再一一贅述,本發(fā)明實(shí)施例提供的收包方法和發(fā)包方法是同時(shí)實(shí)時(shí)進(jìn)行的。
需要說(shuō)明的是:上述實(shí)施例提供的電子設(shè)備在執(zhí)行基于linux的無(wú)中斷線速收包、發(fā)包方法時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將設(shè)備的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的電子設(shè)備與基于linux的無(wú)中斷線速發(fā)包、收包方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過(guò)程詳見(jiàn)方法實(shí)施例,這里不再贅述。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。