數(shù)據(jù)包的處理方法、裝置及服務(wù)器的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種數(shù)據(jù)包的處理方法、裝置及服務(wù)器。
【背景技術(shù)】
[0002]在基于Linux操作系統(tǒng)的流媒體服務(wù)器應(yīng)用中,需要對(duì)碼流進(jìn)行轉(zhuǎn)發(fā),在這個(gè)過程中存在數(shù)據(jù)碼流的接收,接收數(shù)據(jù)報(bào)文占用大量的CPU的資源,提高收包性能直接提高服務(wù)器的處理性能。
[0003]圖1是根據(jù)相關(guān)技術(shù)的接收數(shù)據(jù)包的方法的流程圖,在相關(guān)技術(shù)中,對(duì)于每一路音頻流,都需要使用網(wǎng)絡(luò)套接字,調(diào)用用戶數(shù)據(jù)協(xié)議(User Date Protocol,簡稱為UDP)數(shù)據(jù)包接收接口,從協(xié)議棧接收數(shù)據(jù)。用戶進(jìn)程每接收一個(gè)數(shù)據(jù)包,就需要使用一次系統(tǒng)調(diào)用,每次系統(tǒng)調(diào)用需要先從用戶態(tài)切換到內(nèi)核態(tài),系統(tǒng)調(diào)用返回后,再從內(nèi)核態(tài)切換到用戶態(tài)。在流媒體服務(wù)器負(fù)荷較重的情況下,會(huì)觸發(fā)大量的數(shù)據(jù)拷貝和上下文切換操作,極大地消耗了系統(tǒng)的CPU資源,降低了系統(tǒng)的處理能力。
[0004]由上述流程可見,相關(guān)技術(shù)中,用戶進(jìn)程接收每個(gè)數(shù)據(jù)包,都需要調(diào)用一次系統(tǒng),使系統(tǒng)接收數(shù)據(jù)包,從而導(dǎo)致頻繁的系統(tǒng)調(diào)用,極大的消耗CPU資源,進(jìn)而降低整個(gè)系統(tǒng)的性能,降低整個(gè)流媒體服務(wù)的質(zhì)量。
[0005]針對(duì)相關(guān)技術(shù)中用戶進(jìn)程獲取數(shù)據(jù)包時(shí)需頻繁調(diào)用系統(tǒng)而導(dǎo)致的資源消耗大的問題,目如尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供了一種數(shù)據(jù)包的處理方法、裝置及服務(wù)器,以至少解決上述問題。
[0007]根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)包的處理方法,包括:協(xié)議棧響應(yīng)批量接收數(shù)據(jù)包的請求,通過操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制接收多個(gè)數(shù)據(jù)包;在所述多個(gè)數(shù)據(jù)包的數(shù)量大于預(yù)設(shè)的批量閾值后,返回所述多個(gè)數(shù)據(jù)包。
[0008]優(yōu)選地,通過所述操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制接收所述多個(gè)數(shù)據(jù)包包括:通過所述操作系統(tǒng)的內(nèi)核提供的jprobe機(jī)制接收所述多個(gè)數(shù)據(jù)包。
[0009]優(yōu)選地,通過所述操作系統(tǒng)的內(nèi)核提供的所述jprobe機(jī)制接收所述多個(gè)數(shù)據(jù)包包括:利用jprobe的打點(diǎn)方法,在所述協(xié)議棧的收包接口中增加批量接收數(shù)據(jù)包函數(shù);調(diào)用所述批量接收數(shù)據(jù)包函數(shù),接收所述多個(gè)數(shù)據(jù)包。
[0010]優(yōu)選地,所述協(xié)議棧響應(yīng)所述批量接收數(shù)據(jù)包的請求包括:所述協(xié)議棧響應(yīng)用戶進(jìn)程的批量接收數(shù)據(jù)包的請求。
[0011]優(yōu)選地,在所述多個(gè)數(shù)據(jù)包的數(shù)量大于所述預(yù)設(shè)的批量閾值后,返回所述多個(gè)數(shù)據(jù)包包括:判斷內(nèi)核態(tài)的接收隊(duì)列中接收到的所述多個(gè)數(shù)據(jù)包的數(shù)量是否大于所述預(yù)設(shè)的批量閾值;在所述多個(gè)數(shù)據(jù)包的數(shù)量大于所述預(yù)設(shè)的批量閾值的情況下,將所述內(nèi)核態(tài)的接收隊(duì)列中的多個(gè)數(shù)據(jù)包拷貝到用戶態(tài)的數(shù)據(jù)緩沖區(qū),其中,所述用戶態(tài)與所述用戶進(jìn)程相應(yīng),所述內(nèi)核態(tài)與所述協(xié)議棧相應(yīng)。
[0012]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種數(shù)據(jù)包的處理裝置,位于協(xié)議棧上,包括:控制模塊,用于響應(yīng)批量獲取數(shù)據(jù)包的請求,通過操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制接收多個(gè)數(shù)據(jù)包;返回模塊,用于在所述多個(gè)數(shù)據(jù)包的數(shù)量大于預(yù)設(shè)的批量閾值后,返回所述多個(gè)數(shù)據(jù)包。
[0013]優(yōu)選地,所述控制模塊還用于通過所述操作系統(tǒng)的內(nèi)核提供的jprobe機(jī)制接收所述多個(gè)數(shù)據(jù)包。
[0014]優(yōu)選地,所述控制模塊包括:設(shè)置單元,用于利用jprobe的打點(diǎn)方法,在所述協(xié)議棧的收包接口中增加批量接收數(shù)據(jù)包函數(shù);接收單元,用于調(diào)用所述批量接收數(shù)據(jù)包函數(shù),接收所述多個(gè)數(shù)據(jù)包。
[0015]優(yōu)選地,所述控制模塊還用于響應(yīng)用戶進(jìn)程的批量接收數(shù)據(jù)包的請求。
[0016]優(yōu)選地,所述返回模塊包括:判斷單元,用于判斷內(nèi)核態(tài)的接收隊(duì)列中接收到的所述多個(gè)數(shù)據(jù)包的數(shù)量是否大于所述預(yù)設(shè)的批量閾值;拷貝單元,用于在所述多個(gè)數(shù)據(jù)包的數(shù)量大于所述預(yù)設(shè)的批量閾值的情況下,將所述內(nèi)核態(tài)的接收隊(duì)列中的多個(gè)數(shù)據(jù)包拷貝到用戶態(tài)的數(shù)據(jù)緩沖區(qū),其中,所述用戶態(tài)與所述用戶進(jìn)程相應(yīng),所述內(nèi)核態(tài)與所述協(xié)議棧相應(yīng)。
[0017]根據(jù)本發(fā)明的又一個(gè)方面,提供了一種服務(wù)器,包括協(xié)議棧,所述協(xié)議棧包括上述任一項(xiàng)所述的裝置。
[0018]通過本發(fā)明,采用協(xié)議棧響應(yīng)批量接收數(shù)據(jù)包的請求,通過操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制接收多個(gè)數(shù)據(jù)包,在多個(gè)數(shù)據(jù)包的數(shù)量大于預(yù)設(shè)的批量閾值后,返回多個(gè)數(shù)據(jù)包,解決了相關(guān)技術(shù)中協(xié)議棧資源消耗大的問題,進(jìn)而達(dá)到了減輕資源消耗的效果。
【附圖說明】
[0019]此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
[0020]圖1是根據(jù)相關(guān)技術(shù)的接收數(shù)據(jù)包的方法的流程圖;
[0021]圖1a是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)包處理方法的流程圖;
[0022]圖2是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)包處理裝置的結(jié)構(gòu)示意圖一;
[0023]圖3是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)包處理裝置的結(jié)構(gòu)示意圖二 ;
[0024]圖4是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)包處理裝置的結(jié)構(gòu)示意圖三;
[0025]圖5是根據(jù)本發(fā)明實(shí)施例的服務(wù)器的結(jié)構(gòu)示意圖;
[0026]圖6是根據(jù)本發(fā)明優(yōu)選實(shí)施例的數(shù)據(jù)包處理方法一的流程圖;以及
[0027]圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施例的數(shù)據(jù)包處理方法二的流程圖。
【具體實(shí)施方式】
[0028]下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0029]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)包的處理方法,圖1a是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)包處理方法的流程圖,如圖1a所示,該方法包括以下步驟:
[0030]步驟S102,協(xié)議棧響應(yīng)批量接收數(shù)據(jù)包的請求,通過操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制接收多個(gè)數(shù)據(jù)包;
[0031]步驟S104,在多個(gè)數(shù)據(jù)包的數(shù)量大于預(yù)設(shè)的批量閾值后,返回多個(gè)數(shù)據(jù)包。
[0032]通過上述步驟,改變了相關(guān)技術(shù)中用戶進(jìn)程每次接收一個(gè)數(shù)據(jù)包都需要調(diào)用操作系統(tǒng)的協(xié)議棧一次的做法,解決了相關(guān)技術(shù)中用戶進(jìn)程獲取數(shù)據(jù)包時(shí)需頻繁調(diào)用系統(tǒng)而導(dǎo)致的資源消耗大的問題,具有減輕資源消耗的有益效果。
[0033]在本發(fā)明實(shí)施例的一個(gè)優(yōu)選實(shí)施方式中,通過操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制獲取多個(gè)數(shù)據(jù)包的步驟可以包括:通過操作系統(tǒng)的內(nèi)核提供的jprobe機(jī)制接收多個(gè)數(shù)據(jù)包。通過上述步驟可以不修改現(xiàn)有協(xié)議棧結(jié)構(gòu)、用戶態(tài)代碼使用標(biāo)準(zhǔn)socket編程的情況下,通過內(nèi)核提供的jprobe機(jī)制實(shí)現(xiàn)高效批量收包的方法,即可以有效減少系統(tǒng)調(diào)用,提高收包性能,同時(shí)有效降低代碼的修改量。
[0034]在本發(fā)明實(shí)施例的一個(gè)優(yōu)選實(shí)施方式中,通過所述操作系統(tǒng)的內(nèi)核提供的所述jprobe機(jī)制接收所述多個(gè)數(shù)據(jù)包的步驟可以包括:利用jprobe的打點(diǎn)方法,在協(xié)議棧的收包接口中增加批量接收數(shù)據(jù)包函數(shù);調(diào)用批量接收數(shù)據(jù)包函數(shù),接收多個(gè)數(shù)據(jù)包。通過上述步驟,可以無需修改內(nèi)核代碼,靈活地增加內(nèi)核處理流程,并且方便快捷、影響較小。
[0035]在本發(fā)明實(shí)施例的一個(gè)優(yōu)選實(shí)施方式中,在多個(gè)數(shù)據(jù)包的數(shù)量大于預(yù)設(shè)的批量閾值后,將多個(gè)數(shù)據(jù)包返回給用戶進(jìn)程的步驟可以包括:協(xié)議棧判斷內(nèi)核態(tài)的接收隊(duì)列中接收到的多個(gè)數(shù)據(jù)包的數(shù)量是否大于預(yù)設(shè)的批量閾值,在多個(gè)數(shù)據(jù)包的數(shù)量是否大于所述預(yù)設(shè)的批量閾值的情況下,將內(nèi)核態(tài)的接收隊(duì)列中的多個(gè)數(shù)據(jù)包拷貝到用戶態(tài)的數(shù)據(jù)緩沖區(qū),其中,用戶態(tài)與用戶進(jìn)程相應(yīng),內(nèi)核態(tài)與協(xié)議棧相應(yīng)。通過上述步驟,提高了接收數(shù)據(jù)包的效率,將內(nèi)核態(tài)、用戶態(tài)切換的次數(shù)降低到1/n,其中,η是接收的數(shù)據(jù)包的數(shù)量。
[0036]在本發(fā)明實(shí)施例的一個(gè)優(yōu)選實(shí)施方式中,該操作系統(tǒng)可以是Linux系統(tǒng),數(shù)據(jù)包可以是流媒體數(shù)據(jù)包。當(dāng)然,在其他的實(shí)施例中,也可能是其他操作系統(tǒng),比如安卓系統(tǒng),數(shù)據(jù)包也可能是其他類型的數(shù)據(jù)包,比如移動(dòng)終端的語音通信的數(shù)據(jù)包。
[0037]在本實(shí)施例中還提供了數(shù)據(jù)包的處理裝置,該裝置用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí)施方式,已經(jīng)進(jìn)行過說明的不再贅述。如以下所使用的,術(shù)語“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的裝置較佳地以軟件來實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。該裝置位于協(xié)議棧上,圖2是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)包處理裝置的結(jié)構(gòu)示意圖一,如圖2所示,該裝置包括:
[0038]控制模塊22,用于響應(yīng)批量獲取數(shù)據(jù)包的請求,通過操作系統(tǒng)的內(nèi)核調(diào)試機(jī)制接收多個(gè)數(shù)據(jù)包;
[0039]返回模塊24,用于在多個(gè)數(shù)據(jù)包的數(shù)量大于預(yù)設(shè)的批量閾值后,返回多個(gè)數(shù)據(jù)包。
[0040]優(yōu)選地,控制模塊22還用于通過操作系統(tǒng)的內(nèi)核提供的jprobe機(jī)制接收多個(gè)數(shù)據(jù)包。
[0041]優(yōu)選地,如圖3所示,控制模塊22還可以包括:設(shè)置單元222,用于利用jprobe的打點(diǎn)方法,在協(xié)議棧的收包接口中增加批量接收數(shù)據(jù)包函數(shù);接收單元224,用于調(diào)用批量接收數(shù)據(jù)包函數(shù),接收多個(gè)數(shù)據(jù)包。
[0042]優(yōu)選地,如圖4所示,返回模塊24還可以包括:判斷單元242,用于判斷內(nèi)核態(tài)的接收隊(duì)列中接收到的多個(gè)數(shù)據(jù)包的數(shù)量是否大于預(yù)