基于并行協(xié)議棧實(shí)例的數(shù)據(jù)包處理方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù),尤其涉及一種基于并行協(xié)議棧實(shí)例的數(shù)據(jù)包處理方法和裝置。
【背景技術(shù)】
[0002]隨著云計(jì)算的快速發(fā)展,對協(xié)議棧實(shí)例的處理能力提出了更高的要求。目前,通常采用多個協(xié)議棧實(shí)例共享套接字(socket)的方式,因此存在多協(xié)議棧實(shí)例之間對socket的競爭問題,進(jìn)而提出了在中央處理器(central processing unit, CPU)的多核架構(gòu)下并行協(xié)議棧實(shí)例,該并行協(xié)議棧實(shí)例包括至少兩個協(xié)議棧實(shí)例,每個協(xié)議棧實(shí)例運(yùn)行在CPU的一個虛擬中央處理器(virtual CPU, VCPU)上,采用獨(dú)占協(xié)議棧實(shí)例所關(guān)聯(lián)的socket的方式從而避免上述多協(xié)議棧實(shí)例之間對socket的競爭問題。當(dāng)網(wǎng)卡根據(jù)分流策略,向各協(xié)議棧實(shí)例分流數(shù)據(jù)包時,各協(xié)議棧實(shí)例可利用與該協(xié)議棧實(shí)例關(guān)聯(lián)的socket對數(shù)據(jù)包并行進(jìn)行協(xié)議處理。
[0003]但是應(yīng)用(Applicat1n, APP)在指示創(chuàng)建進(jìn)行上述協(xié)議處理所需的socket時,指定了 socket與協(xié)議找實(shí)例之間的關(guān)聯(lián)關(guān)系,從而僅可由APP指定的相關(guān)聯(lián)的協(xié)議找實(shí)例占用該socket對數(shù)據(jù)包進(jìn)行協(xié)議處理,當(dāng)網(wǎng)卡將數(shù)據(jù)包所分流到的協(xié)議棧實(shí)例,與該APP指定的socket相關(guān)聯(lián)的協(xié)議棧實(shí)例不同時,即出現(xiàn)了 APP指定的協(xié)議棧實(shí)例與網(wǎng)卡指定的協(xié)議棧實(shí)例沖突的情況,無法對數(shù)據(jù)包進(jìn)行協(xié)議處理。
【發(fā)明內(nèi)容】
[0004]為解決現(xiàn)有技術(shù)的問題,本發(fā)明實(shí)施例提供一種基于并行協(xié)議棧實(shí)例的數(shù)據(jù)包處理方法和裝置。
[0005]第一方面是提供一種基于并行協(xié)議棧實(shí)例的數(shù)據(jù)包處理方法,所述并行協(xié)議棧實(shí)例中至少包括第一協(xié)議棧實(shí)例和第二協(xié)議棧實(shí)例,所述方法包括:利用所述第一協(xié)議棧實(shí)例對網(wǎng)卡向所述第一協(xié)議棧實(shí)例分流的所述數(shù)據(jù)包進(jìn)行低層協(xié)議處理;確定對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行上層協(xié)議處理所需的目標(biāo)套接字socket ;根據(jù)所述目標(biāo)socket,確定與所述目標(biāo)socket關(guān)聯(lián)的第二協(xié)議棧實(shí)例;利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行所述上層協(xié)議處理;其中,所述低層協(xié)議處理和所述上層協(xié)議處理共同完成對所述數(shù)據(jù)包的完整協(xié)議處理。
[0006]在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述目標(biāo)socket,確定與所述目標(biāo)socket關(guān)聯(lián)的第二協(xié)議棧實(shí)例,包括:根據(jù)親和性圖譜中所述目標(biāo)socket與所述并行協(xié)議棧實(shí)例包含的每個協(xié)議棧實(shí)例之間的親和性,確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例;所述目標(biāo)socket與所述每個協(xié)議棧實(shí)例之間的親和性用于指示所述網(wǎng)卡向所述每個協(xié)議棧實(shí)例已分流的數(shù)據(jù)包中,需要利用所述目標(biāo)socket進(jìn)行上層協(xié)議處理的數(shù)據(jù)包數(shù)量。
[0007]結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,所述根據(jù)親和性圖譜中所述目標(biāo)socket與所述并行協(xié)議棧實(shí)例包含的每個協(xié)議棧實(shí)例之間的親和性,確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例之前,還包括:根據(jù)所述低層協(xié)議處理后的所述數(shù)據(jù)包的個數(shù),更新所述親和性圖譜中所記載的所述目標(biāo)socket與所述第一協(xié)議棧實(shí)例之間的親和性。
[0008]結(jié)合第一方面的第二種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述低層協(xié)議處理后的所述數(shù)據(jù)包的個數(shù),更新所述親和性圖譜中所記載的所述目標(biāo)socket與所述第一協(xié)議棧實(shí)例之間的親和性之后,還包括:判斷nXA是否大于B,其中,A為所述目標(biāo)socket與所述第一協(xié)議棧實(shí)例之間的親和性,B為所述親和性圖譜中記載的所述目標(biāo)socket與關(guān)聯(lián)的協(xié)議棧實(shí)例之間的親和性,η為預(yù)設(shè)系數(shù);則所述根據(jù)親和性圖譜中所述目標(biāo)socket與所述并行協(xié)議棧實(shí)例包含的每個協(xié)議棧實(shí)例之間的親和性,確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例,包括:若nXA不大于B,則確定將所述親和性圖譜中記載的所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例作為與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例。
[0009]結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,所述根據(jù)親和性圖譜中所述目標(biāo)socket與所述并行協(xié)議棧實(shí)例包含的每個協(xié)議棧實(shí)例之間的親和性,確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例,還包括:若nXA大于B,則將所述第一協(xié)議棧實(shí)例確定為與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例,并將所述親和性圖譜中記載的所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例更新為所述第一協(xié)議棧實(shí)例。
[0010]結(jié)合第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式、第一方面的第二種可能的實(shí)現(xiàn)方式、第一方面的第三種可能的實(shí)現(xiàn)方式和第一方面的第四種可能的實(shí)現(xiàn)方式,在第一方面的第五種可能的實(shí)現(xiàn)方式中,所述確定對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行上層協(xié)議處理所需的目標(biāo)套接字socket,包括:在socket表中進(jìn)行檢索,獲得對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行上層協(xié)議處理所需的所述目標(biāo)socket。
[0011]結(jié)合第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式、第一方面的第二種可能的實(shí)現(xiàn)方式、第一方面的第三種可能的實(shí)現(xiàn)方式和第一方面的第四種可能的實(shí)現(xiàn)方式,在第一方面的第六種可能的實(shí)現(xiàn)方式中,所述利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行所述上層協(xié)議處理,包括:將所述低層協(xié)議處理后的所述數(shù)據(jù)包加入到所述目標(biāo)socket的底層數(shù)據(jù)接收隊(duì)列中;當(dāng)根據(jù)所述第二協(xié)議棧實(shí)例對應(yīng)的協(xié)議棧實(shí)例關(guān)聯(lián)鏈表,輪詢到所述目標(biāo)socket時,利用所述第二協(xié)議棧實(shí)例對所述底層數(shù)據(jù)接收隊(duì)列中的所述數(shù)據(jù)包進(jìn)行所述上層協(xié)議處理;所述第二協(xié)議棧實(shí)例對應(yīng)的協(xié)議棧實(shí)例關(guān)聯(lián)鏈表用于指示與所述第二協(xié)議棧實(shí)例存在關(guān)聯(lián)關(guān)系的socket。
[0012]結(jié)合第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式、第一方面的第二種可能的實(shí)現(xiàn)方式、第一方面的第三種可能的實(shí)現(xiàn)方式和第一方面的第四種可能的實(shí)現(xiàn)方式,在第一方面的第七種可能的實(shí)現(xiàn)方式中,所述確定對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行上層協(xié)議處理所需的目標(biāo)套接字socket之前,還包括:利用所述并行協(xié)議棧實(shí)例包括的各協(xié)議棧實(shí)例中的一個父協(xié)議棧實(shí)例,創(chuàng)建與所述各協(xié)議棧實(shí)例均不存在關(guān)聯(lián)關(guān)系的所述目標(biāo)socket ;所述父協(xié)議棧實(shí)例是應(yīng)用APP采用隨機(jī)方式或者參數(shù)指定方式或者負(fù)載均衡方式選定的。
[0013]結(jié)合第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式、第一方面的第二種可能的實(shí)現(xiàn)方式、第一方面的第三種可能的實(shí)現(xiàn)方式和第一方面的第四種可能的實(shí)現(xiàn)方式,在第一方面的第八種可能的實(shí)現(xiàn)方式中,所述方法還包括:接收所述應(yīng)用APP發(fā)送的第一數(shù)據(jù)包;確定對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理所需要的所述目標(biāo)套接字socket ;確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例;利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例,對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理。
[0014]第二方面是提供一種基于并行協(xié)議棧實(shí)例的數(shù)據(jù)包處理方法,所述并行協(xié)議棧實(shí)例中至少包括第一協(xié)議棧實(shí)例和第二協(xié)議棧實(shí)例,所述方法包括:接收應(yīng)用APP發(fā)送的第一數(shù)據(jù)包;確定對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理所需要的目標(biāo)套接字socket ;根據(jù)所述目標(biāo)socket與第二協(xié)議棧實(shí)例的關(guān)聯(lián)關(guān)系,確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例;利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例,對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理;其中,所述目標(biāo)socket與所述第二協(xié)議棧實(shí)例的關(guān)聯(lián)關(guān)系,是所述第一協(xié)議棧實(shí)例和所述第二協(xié)議棧實(shí)例對第二數(shù)據(jù)包進(jìn)行協(xié)議處理時確定的,所述第一協(xié)議棧實(shí)例對所述第二數(shù)據(jù)包進(jìn)行低層協(xié)議處理,所述第二協(xié)議棧實(shí)例對所述第二數(shù)據(jù)包進(jìn)行上層協(xié)議處理,所述低層協(xié)議處理和所述上層協(xié)議處理共同完成對所述第二數(shù)據(jù)包的完整協(xié)議處理。
[0015]在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例,對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理,包括:將所述第一數(shù)據(jù)包加入到所述目標(biāo)socket的APP數(shù)據(jù)發(fā)送隊(duì)列中;當(dāng)根據(jù)所述第二協(xié)議棧實(shí)例對應(yīng)的協(xié)議棧實(shí)例關(guān)聯(lián)鏈表,輪詢到所述目標(biāo)socket的APP數(shù)據(jù)發(fā)送隊(duì)列時,利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例對所述APP數(shù)據(jù)發(fā)送隊(duì)列中的所述第一數(shù)據(jù)包分別進(jìn)行低層協(xié)議處理和上層協(xié)議處理;所述第二協(xié)議棧實(shí)例對應(yīng)的協(xié)議棧實(shí)例關(guān)聯(lián)鏈表用于指示與所述第二協(xié)議棧實(shí)例存在關(guān)聯(lián)關(guān)系的socket。
[0016]在第二方面的第二種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述目標(biāo)socket與第二協(xié)議棧實(shí)例的關(guān)聯(lián)關(guān)系,確定與所述目標(biāo)socket關(guān)聯(lián)的第二協(xié)議棧實(shí)例,包括:根據(jù)親和性圖譜,判斷所述目標(biāo)socket是否存在關(guān)聯(lián)的協(xié)議棧實(shí)例;所述親和性圖譜用于記載與所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例;若所述目標(biāo)socket存在關(guān)聯(lián)的協(xié)議棧實(shí)例,則確定所述與所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例為所述第二協(xié)議棧實(shí)例。
[0017]結(jié)合第二方面的第二種可能的實(shí)現(xiàn)方式,在第二方面的第三種可能的實(shí)現(xiàn)方式中,所述方法還包括:若所述目標(biāo)socket不存在關(guān)聯(lián)的協(xié)議棧實(shí)例,則將控制消息加入到所述目標(biāo)socket的父協(xié)議棧實(shí)例的接收隊(duì)列中;所述目標(biāo)socket的父協(xié)議棧實(shí)例是用于創(chuàng)建所述目標(biāo)socket的協(xié)議棧實(shí)例;所述控制消息用于指示對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理;當(dāng)輪詢到所述父協(xié)議棧實(shí)例的接收隊(duì)列中的所述控制消息時,對所述控制消息進(jìn)行解析,獲得所述第一數(shù)據(jù)包;利用所述父協(xié)議棧實(shí)例對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理;將所述親和性圖譜中記載的所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例更新為所述父協(xié)議棧實(shí)例。
[0018]結(jié)合第二方面、第二方面的第一種可能的實(shí)現(xiàn)方式、第二方面的第二種可能的實(shí)現(xiàn)方式和第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述確定對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理所需要的目標(biāo)套接字socket,包括:在socket表中進(jìn)行檢索,確定對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理所需的所述目標(biāo)socket。
[0019]結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第五種可能的實(shí)現(xiàn)方式中,所述確定對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理所需要的目標(biāo)套接字socket之前,還包括:利用所述父協(xié)議棧實(shí)例,創(chuàng)建與所述并行協(xié)議棧實(shí)例包括的各協(xié)議棧實(shí)例均不存在關(guān)聯(lián)關(guān)系的所述目標(biāo)socket,所述父協(xié)議棧實(shí)例是所述APP采用隨機(jī)方式或者參數(shù)指定方式或者負(fù)載均衡方式在所述各協(xié)議棧實(shí)例中選定的。
[0020]結(jié)合第二方面、第二方面的第一種可能的實(shí)現(xiàn)方式、第二方面的第二種可能的實(shí)現(xiàn)方式和第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第六種可能的實(shí)現(xiàn)方式中,所述利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例,對所述第一數(shù)據(jù)包進(jìn)行協(xié)議處理之后,還包括:將所述協(xié)議處理后的第一數(shù)據(jù)包加入到網(wǎng)卡的發(fā)送隊(duì)列中,以使所述網(wǎng)卡發(fā)送所述協(xié)議處理后的第一數(shù)據(jù)包。
[0021]第三方面是提供一種基于并行協(xié)議棧實(shí)例的數(shù)據(jù)包處理裝置,所述并行協(xié)議棧實(shí)例中至少包括第一協(xié)議棧實(shí)例和第二協(xié)議棧實(shí)例,所述裝置包括:低層處理模塊,用于利用所述第一協(xié)議棧實(shí)例對網(wǎng)卡向所述第一協(xié)議棧實(shí)例分流的所述數(shù)據(jù)包進(jìn)行低層協(xié)議處理;第一確定模塊,用于確定對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行上層協(xié)議處理所需的目標(biāo)套接字socket ;第二確定模塊,用于根據(jù)所述目標(biāo)socket,確定與所述目標(biāo)socket關(guān)聯(lián)的第二協(xié)議棧實(shí)例;上層處理模塊,用于利用所述目標(biāo)socket和所述第二協(xié)議棧實(shí)例對所述低層協(xié)議處理后的所述數(shù)據(jù)包進(jìn)行所述上層協(xié)議處理;其中,所述低層協(xié)議處理模塊和所述上層協(xié)議處理模塊共同完成對所述數(shù)據(jù)包的完整協(xié)議處理。
[0022]在第三方面的第一種可能的實(shí)現(xiàn)方式中,所述第二確定模塊,具體用于根據(jù)親和性圖譜中所述目標(biāo)socket與所述并行協(xié)議棧實(shí)例包含的每個協(xié)議棧實(shí)例之間的親和性,確定與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例;所述目標(biāo)socket與所述每個協(xié)議棧實(shí)例之間的親和性用于指示所述網(wǎng)卡向所述每個協(xié)議棧實(shí)例已分流的數(shù)據(jù)包中,需要利用所述目標(biāo)socket進(jìn)行上層協(xié)議處理的數(shù)據(jù)包數(shù)量。
[0023]結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述裝置,還包括:更新模塊,用于根據(jù)所述低層協(xié)議處理后的所述數(shù)據(jù)包的個數(shù),更新所述親和性圖譜中所記載的所述目標(biāo)socket與所述第一協(xié)議棧實(shí)例之間的親和性。
[0024]結(jié)合第三方面的第二種可能的實(shí)現(xiàn)方式,在第三方面的第三種可能的實(shí)現(xiàn)方式中,所述裝置,還包括:判斷模塊,用于判斷nXA是否大于B,其中,A為所述目標(biāo)socket與所述第一協(xié)議棧實(shí)例之間的親和性,B為所述親和性圖譜中記載的所述目標(biāo)socket與關(guān)聯(lián)的協(xié)議棧實(shí)例之間的親和性,η為預(yù)設(shè)系數(shù);則所述第二確定模塊,包括:第一確定單元,用于若nXA不大于B,則確定將所述親和性圖譜中記載的所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例作為與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例。
[0025]結(jié)合第三方面的第三種可能的實(shí)現(xiàn)方式,在第三方面的第四種可能的實(shí)現(xiàn)方式中,所述第二確定模塊,還包括:第二確定單元,用于若ηX A大于B,則將所述第一協(xié)議棧實(shí)例確定為與所述目標(biāo)socket關(guān)聯(lián)的所述第二協(xié)議棧實(shí)例,并將所述親和性圖譜中記載的所述目標(biāo)socket關(guān)聯(lián)的協(xié)議棧實(shí)例更新為所述第一協(xié)議棧實(shí)例。
[0026]結(jié)合第三方面、第三方面的第一種可能的實(shí)現(xiàn)方式、第三方面