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