一種數(shù)據(jù)傳輸方法及裝置的制造方法
【專利摘要】本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法及裝置,涉及通信技術(shù)領(lǐng)域,解決了在多核應(yīng)用場景中,多個(gè)CPU的資源利用率較低的問題。該方案包括:接收在第一TCP連接上傳輸?shù)牡谝籘CP報(bào)文;在本地存儲(chǔ)的連接信息表中查找與第一TCP連接對(duì)應(yīng)的第一CPU的標(biāo)識(shí)和第一地址信息,連接信息表中包括第一TCP連接和第一CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及第一TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系;將第一TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在第一地址信息指示的存儲(chǔ)位置中;根據(jù)第一CPU的標(biāo)識(shí)向第一CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一CPU根據(jù)第一地址信息從內(nèi)存中獲取第一TCP報(bào)文中的數(shù)據(jù)。
【專利說明】
一種數(shù)據(jù)傳輸方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)傳輸方法及裝置。
【背景技術(shù)】
[0002] TOE (Transmission Control Protocol Offload Engine,傳輸控制協(xié)議卸載引擎, 簡稱TCP卸載引擎)用于將CPU上關(guān)于TCP/IP的部分處理任務(wù)轉(zhuǎn)移到專門的單元上進(jìn)行。 以集成有TOE的網(wǎng)卡為例,參考圖1,通過采用配有TOE的TOE網(wǎng)卡,包括TCP層和IP層在 內(nèi)的四層處理任務(wù)都可以從主機(jī)CPU轉(zhuǎn)移到該TOE網(wǎng)卡,大大減輕了主機(jī)CPU的處理負(fù)擔(dān)。
[0003] 在包含多個(gè)CPU的多核系統(tǒng)中,例如Soc(system on chip,片上系統(tǒng))或設(shè)有多 個(gè)CPU的服務(wù)器中,如圖2所示,通常TOE掛載在發(fā)送端或接收端的系統(tǒng)總線上,分別與存 儲(chǔ)器和多個(gè)CPU進(jìn)行通信。在這種應(yīng)用場景下,需要發(fā)送端與接收端之間建立TCP連接進(jìn) 行數(shù)據(jù)傳輸,此時(shí),發(fā)送端與接收端內(nèi)的TOE單元通過中斷的方式觸發(fā)CPU進(jìn)行相關(guān)應(yīng)用的 數(shù)據(jù)處理,而這個(gè)中斷通常是綁定在某一個(gè)CPU上進(jìn)行的,當(dāng)傳輸?shù)臄?shù)據(jù)非常多時(shí),中斷所 綁定的CPU的資源占用率就非常高,導(dǎo)致整個(gè)多核應(yīng)用場景的數(shù)據(jù)性能都受制于單個(gè)CPU。
[0004] 為解決上述問題,以發(fā)送端請(qǐng)求建立一條TCP連接為例,在發(fā)送端的TOE與接收端 經(jīng)過三次握手建立TCP連接后,發(fā)送端的TOE上報(bào)中斷給綁定的CPUl,以使得CPUl在該TCP 連接上發(fā)送數(shù)據(jù),由于執(zhí)行各種數(shù)據(jù)傳輸?shù)腡CP連接的中斷均綁定在CPUl上,當(dāng)CPUl的占 用率達(dá)到閾值后,CPUl通過預(yù)置的任務(wù)調(diào)度算法,將CPUl內(nèi)的部分?jǐn)?shù)據(jù)傳輸進(jìn)程迀移到其 他CPU上,完成CPUl的負(fù)載均衡,然而,CPUl使用任務(wù)調(diào)度算法仍然需要消耗額外的CPUl 的資源,而且,在CPUl的占用率未達(dá)到閾值前,只能使用CPUl處理所有TCP連接的中斷請(qǐng) 求,無法充分利用多核系統(tǒng)中其他CPU的資源,降低了多核系統(tǒng)中CPU的資源利用率。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法及裝置,解決了在多核應(yīng)用場景中,由于 在各種數(shù)據(jù)傳輸?shù)倪B接上傳輸數(shù)據(jù)均需與統(tǒng)一的CPU綁定進(jìn)行中斷操作,而導(dǎo)致CPU的資 源利用率降低的問題。
[0006] 為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0007] 第一方面,本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,包括:
[0008] 傳輸控制協(xié)議卸載引擎TOE接收在第一傳輸控制協(xié)議TCP連接上傳輸?shù)牡谝?TCP 報(bào)文;
[0009] 所述TOE在本地存儲(chǔ)的連接信息表中查找與所述第一 TCP連接對(duì)應(yīng)的第一 CPU的 標(biāo)識(shí)和第一地址信息,所述連接信息表中包括所述第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng) 關(guān)系,以及所述第一 TCP連接和所述第一地址信息的對(duì)應(yīng)關(guān)系,其中,所述第一 CPU的標(biāo)識(shí) 用于指示處理所述第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,所述第一地址信息為第一 CPU預(yù) 先確定的用于指示通過所述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置;
[0010] 所述TOE將所述第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在所述第一地址信息指示的存儲(chǔ)位置 中;
[0011] 所述TOE根據(jù)所述第一 CPU的標(biāo)識(shí)向所述第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)所述 第一 CPU根據(jù)所述第一地址信息從所述內(nèi)存中獲取所述第一 TCP報(bào)文中的數(shù)據(jù)。
[0012] 結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,在所述TOE獲取第一 TCP 連接上的第一 TCP報(bào)文之前,還包括:
[0013] 所述TOE向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備確定與所述第一 TCP 連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí);
[0014] 所述TOE獲取所述第一 CRJ的標(biāo)識(shí),并將所述第一 CPU的標(biāo)識(shí)與所述第一 TCP的 連接關(guān)系存儲(chǔ)至所述連接信息表中,以建立所述第一 TCP連接與所述第一 CPU的對(duì)應(yīng)關(guān)系。
[0015] 結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式 中,在所述TOE向控制設(shè)備發(fā)送第二中斷請(qǐng)求之后,還包括:
[0016] 所述TOE將建立所述第一 TCP連接所需的配置信息發(fā)送至所述控制設(shè)備,所述配 置信息用于指示所述第一 TCP連接的優(yōu)先等級(jí);
[0017] 其中,觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí),包 括:
[0018] 觸發(fā)所述控制設(shè)備根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí),以便于 所述控制設(shè)備根據(jù)所述第一 TCP連接的優(yōu)先等級(jí)確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí)。
[0019] 結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式 中,在所述TOE向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接 所綁定的所述第一 CPU的標(biāo)識(shí)之后,還包括:
[0020] 所述TOE接收所述第一 CPU發(fā)送的所述第一地址信息;
[0021 ] 所述TOE將所述第一地址信息和所述第一 TCP連接的對(duì)應(yīng)關(guān)系存儲(chǔ)至所述連接信 息表中,以建立所述第一地址信息與所述第一 TCP連接的對(duì)應(yīng)關(guān)系。
[0022] 結(jié)合第一方面以及第一方面的第第一至三種可能的實(shí)現(xiàn)方式中的任一種可能的 實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,當(dāng)所述TOE需要在所述第一 TCP連接上 發(fā)送第二TCP報(bào)文時(shí),所述方法還包括:
[0023] 所述TOE接收所述第一 CPU發(fā)送的第二地址信息,所述第二地址信息用于指示待 發(fā)送數(shù)據(jù)在所述內(nèi)存中的存儲(chǔ)位置;
[0024] 所述TOE根據(jù)所述第二地址信息從所述內(nèi)存中獲取所述待發(fā)送數(shù)據(jù);
[0025] 所述TOE將所述待發(fā)送數(shù)據(jù)封裝成所述第二TCP報(bào)文;
[0026] 所述TOE在所述第一 TCP連接上發(fā)送所述第二TCP報(bào)文。
[0027] 第二方面,本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,包括:
[0028] 在控制設(shè)備接收到傳輸控制協(xié)議卸載引擎TOE發(fā)送的第二中斷請(qǐng)求之后,所述控 制設(shè)備則從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,所述第一 CPU用于處理第一傳輸控制協(xié)議 TCP連接上傳輸?shù)臄?shù)據(jù),N彡1 ;
[0029] 所述控制設(shè)備向所述第一 CPU發(fā)送指示信息,所述指示信息用于指所述內(nèi)存中獲 取所述第一 TCP報(bào)文中的數(shù)據(jù)。
[0030] 結(jié)合第三方面,在第三方面的第一種可能的實(shí)現(xiàn)方式中,
[0031] 所述中斷觸發(fā)單元,還用于向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備確 定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí);
[0032] 所述接收單元,還用于獲取所述第一 CPU的標(biāo)識(shí);
[0033] 所述存儲(chǔ)單元,還用于將所述第一 CPU的標(biāo)識(shí)與所述第一 TCP的連接關(guān)系存儲(chǔ)至 所述連接信息表中,以建立所述第一 TCP連接與所述第一 CPU的對(duì)應(yīng)關(guān)系。
[0034] 結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第二種可能的實(shí)現(xiàn)方式 中,所述TOE還包括發(fā)送單元,其中,
[0035] 所述發(fā)送單元,用于將建立所述第一 TCP連接所需的配置信息發(fā)送至所述控制設(shè) 備,所述配置信息用于指示所述第一 TCP連接的優(yōu)先等級(jí);
[0036] 所述中斷觸發(fā)單元,具體用于向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備 根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí),以便于所述控制設(shè)備根據(jù)所述第一 TCP連接的優(yōu)先等級(jí)確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí)。
[0037] 結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第三種可能的實(shí)現(xiàn)方式 中,
[0038] 所述接收單元,還用于接收所述第一 CPU發(fā)送的所述第一地址信息;
[0039] 所述存儲(chǔ)單元,還用于將所述接收單元中的所述第一地址信息和所述第一 TCP連 接的對(duì)應(yīng)關(guān)系存儲(chǔ)至所述連接信息表中,以建立所述第一地址信息與所述第一 TCP連接的 對(duì)應(yīng)關(guān)系。
[0040] 結(jié)合第三方面以及第三方面的第一至第三種可能的實(shí)現(xiàn)方式中的任一種可能的 實(shí)現(xiàn)方式,在第三方面的第四種可能的實(shí)現(xiàn)方式中,所述TOE還包括封裝單元,其中,
[0041] 所述接收單元,還用于接收所述第一 CPU發(fā)送的第二地址信息,所述第二地址信 息用于指示待發(fā)送數(shù)據(jù)在所述內(nèi)存中的存儲(chǔ)位置;并根據(jù)所述第二地址信息從所述內(nèi)存中 獲取所述待發(fā)送數(shù)據(jù);
[0042] 所述封裝單元,用于將所述接收單元中的所述待發(fā)送數(shù)據(jù)封裝成所述第二TCP報(bào) 文;
[0043] 所述發(fā)送單元,還用于在所述第一 TCP連接上發(fā)送所述封裝單元中的所述第二 TCP報(bào)文。
[0044] 第四方面,本發(fā)明的實(shí)施例提供一種控制設(shè)備,包括:
[0045] 確定單元,用于在接收到傳輸控制協(xié)議卸載引擎TOE發(fā)送的第二中斷請(qǐng)求之后, 則從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,所述第一 CPU用于處理第一傳輸控制協(xié)議TCP連 接上傳輸?shù)臄?shù)據(jù),N多1 ;
[0046] 指示單元,用于向所述確定單元中確定的所述第一 CPU發(fā)送指示信息,所述指示 信息用于指示所述第一 CPU處理在所述第一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0047] 結(jié)合第四方面,在第四方面的第一種可能的實(shí)現(xiàn)方式中,所述CPU還包括獲取單 元,其中,
[0048] 所述獲取單元,用于獲取所述N個(gè)CPU的負(fù)載值;
[0049] 所述確定單元,具體用于根據(jù)所述獲取單元中所述N個(gè)CPU的負(fù)載值,將負(fù)載值最 小的CPU作為所述第一 CPU。
[0050] 結(jié)合第四方面,在第四方面的第二種可能的實(shí)現(xiàn)方式中,
[0051] 所述獲取單元,還用于接收所述TOE發(fā)送的配置信息,所述配置信息用于指示所 述第一 TCP連接的優(yōu)先等級(jí);并獲取所述N個(gè)CPU的負(fù)載值;
[0052] 所述確定單元,具體用于若所述獲取單元中所述第一 TCP連接的優(yōu)先等級(jí)高于閾 值,則將負(fù)載值最小的CPU作為所述第一 CPU。
[0053] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法及裝置,TOE接收在第一 TCP連接上傳輸 的第一 TCP報(bào)文后,由于在本地存儲(chǔ)的連接信息表中包括有第一 TCP連接和第一 CPU的標(biāo) 識(shí)的對(duì)應(yīng)關(guān)系,以及第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系,其中,第一 CPU的標(biāo)識(shí)用于 指示處理第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,第一地址信息為第一 CPU預(yù)先確定的用于 指示通過第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,因此,TOE可以在連接信息表 中查找與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,進(jìn)而將第一 TCP報(bào)文中的 數(shù)據(jù)存儲(chǔ)在第一地址信息指示的存儲(chǔ)位置中,并向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CHJ根據(jù)第一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù),這樣,由于在建立示所述第一 CPU處理在所述第一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0054] 結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述控制設(shè)備則從N個(gè) CPU中確定一個(gè)CPU為第一 CPU,包括:
[0055] 所述控制設(shè)備獲取所述N個(gè)CPU的負(fù)載值;
[0056] 所述控制設(shè)備根據(jù)所述N個(gè)CPU的負(fù)載值,將負(fù)載值最小的CPU作為所述第一 CPUo
[0057] 結(jié)合第二方面,在第二方面的第二種可能的實(shí)現(xiàn)方式中,在所述控制設(shè)備則從N 個(gè)CPU中確定一個(gè)CPU為第一 CPU之前,還包括:
[0058] 所述控制設(shè)備接收所述TOE發(fā)送的配置信息,所述配置信息用于指示所述第一 TCP連接的優(yōu)先等級(jí);
[0059] 其中,所述控制設(shè)備則從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,包括:
[0060] 所述控制設(shè)備根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí);
[0061 ] 所述控制設(shè)備獲取所述N個(gè)CPU的負(fù)載值;
[0062] 若第一 TCP連接的優(yōu)先等級(jí)高于閾值,所述控制設(shè)備則將負(fù)載值最小的CPU作為 所述第一 CPU。
[0063] 第三方面,本發(fā)明的實(shí)施例提供一種Τ0Ε,包括:
[0064] 接收單元,用于接收在第一傳輸控制協(xié)議TCP連接上傳輸?shù)牡谝?TCP報(bào)文;
[0065] 查找單元,用于在本地存儲(chǔ)的連接信息表中查找與所述接收單元中的第一 TCP連 接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,所述連接信息表中包括所述第一 TCP連接和第 一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及所述第一 TCP連接和所述第一地址信息的對(duì)應(yīng)關(guān)系,其中, 所述第一 CPU的標(biāo)識(shí)用于指示處理所述第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,所述第一地 址信息為第一 CPU預(yù)先確定的用于指示通過所述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的 存儲(chǔ)位置;
[0066] 存儲(chǔ)單元,用于將接收單元中所述第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在所述查找單元中 的第一地址信息指示的存儲(chǔ)位置中;
[0067] 中斷觸發(fā)單元,用于根據(jù)所述查找單元中第一 CPU的標(biāo)識(shí)向所述第一 CPU發(fā)起第 一中斷請(qǐng)求,觸發(fā)所述第一 CPU根據(jù)所述第一地址信息從該第一 TCP連接時(shí)已經(jīng)將第一 TCP 連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU與第一 TCP連接建立了對(duì)應(yīng)關(guān)系,因此,TOE在處理第一 TCP 連接上傳輸?shù)膱?bào)文數(shù)據(jù)時(shí),可直接根據(jù)與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)向第一 CPU 發(fā)送中斷請(qǐng)求,也就是說,不同的TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求可以與不同的CPU對(duì) 應(yīng),避免了在多核應(yīng)用場景中,TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求均需與統(tǒng)一的CPU進(jìn)行 中斷操作,而導(dǎo)致該統(tǒng)一的CPU資源占用率過高的問題,同時(shí)提高了其他CPU的資源利用 率,使多核系統(tǒng)中的多個(gè)CPU的負(fù)載趨于均衡。
【附圖說明】
[0068] 為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0069] 圖1為普通網(wǎng)卡與TOE網(wǎng)卡的結(jié)構(gòu)示意圖;
[0070] 圖2為SOC系統(tǒng)的架構(gòu)示意圖;
[0071] 圖3為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法的流程示意圖一;
[0072] 圖4為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法的流程示意圖二;
[0073] 圖5為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法的流程示意圖三;
[0074] 圖6為現(xiàn)有技術(shù)中三次握手的流程示意圖;
[0075] 圖7為本發(fā)明實(shí)施例提供的一種TOE的硬件示意圖;
[0076] 圖8為本發(fā)明實(shí)施例提供的一種控制設(shè)備的硬件示意圖;
[0077] 圖9為本發(fā)明實(shí)施例提供的一種多核系統(tǒng)的結(jié)構(gòu)示意圖;
[0078] 圖10為本發(fā)明實(shí)施例提供的一種TOE的結(jié)構(gòu)示意圖一;
[0079] 圖11為本發(fā)明實(shí)施例提供的一種TOE的結(jié)構(gòu)示意圖二;
[0080] 圖12為本發(fā)明實(shí)施例提供的一種TOE的結(jié)構(gòu)示意圖三;
[0081] 圖13為本發(fā)明實(shí)施例提供的一種控制設(shè)備的結(jié)構(gòu)示意圖一;
[0082] 圖14為本發(fā)明實(shí)施例提供的一種控制設(shè)備的結(jié)構(gòu)示意圖二。
【具體實(shí)施方式】
[0083] 以下描述中,為了說明而不是為了限定,提出了諸如特定系統(tǒng)結(jié)構(gòu)、接口、技術(shù)之 類的具體細(xì)節(jié),以便透徹理解本發(fā)明。然而,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)清楚,在沒有這些具體 細(xì)節(jié)的其它實(shí)施例中也可以實(shí)現(xiàn)本發(fā)明。在其它情況中,省略對(duì)眾所周知的裝置、電路以及 方法的詳細(xì)說明,以免不必要的細(xì)節(jié)妨礙本發(fā)明的描述。
[0084] 實(shí)施例1
[0085] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,如圖3所示,包括:
[0086] 101、TOE接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文。
[0087] 102、T0E在本地存儲(chǔ)的連接信息表中查找與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 和第一地址信息,該連接信息表中包括第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及第 一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系。
[0088] 103、TOE將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在第一地址信息指示的存儲(chǔ)位置中。
[0089] 104、TOE根據(jù)第一 CPU的標(biāo)識(shí)向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CPU根據(jù) 第一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù)。
[0090] 在步驟101中,TOE可以在已經(jīng)建立好的第一 TCP連接上接收發(fā)送端發(fā)送的第一 TCP報(bào)文,進(jìn)而通過中斷請(qǐng)求的形式與CPU進(jìn)行交互,使得CPU獲取到該第一 TCP報(bào)文中的 TCP報(bào)文數(shù)據(jù)。
[0091] 具體的,本發(fā)明實(shí)施例提供的數(shù)據(jù)傳輸方法,可以應(yīng)用在包括TOE和多個(gè)CPU的多 核系統(tǒng)中,例如,在使用含有TOE的多核手機(jī)進(jìn)行即時(shí)通訊時(shí),手機(jī)與網(wǎng)絡(luò)側(cè)的服務(wù)器需要 建立TCP連接后,才能在已建立好的TCP連接上傳送數(shù)據(jù),可以看出,一個(gè)含有TOE的多核 手機(jī)可能會(huì)建立很多條TCP連接分別傳輸不同應(yīng)用程序的數(shù)據(jù),而在現(xiàn)有技術(shù)中,處理多 條TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU是固定的,也就是說,TOE只能向已經(jīng)固定的某個(gè)CPU 發(fā)送中斷請(qǐng)求,觸發(fā)該唯一的CPU處理多條TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù),顯而易見的,對(duì)于 包含多個(gè)CPU的多核系統(tǒng)而言,這種CPU與TOE的交互方式可能會(huì)導(dǎo)致某一 CPU的資源占 用率過高,同時(shí)降低了其他CPU的利用率。
[0092] 進(jìn)一步地,在TOE接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文之前,TOE還可以接 收建立該第一 TCP連接所需的配置信息,并通過三次握手的機(jī)制與發(fā)送端建立該第一 TCP 連接,該第一 TCP連接的建立方法將在實(shí)施例2中詳細(xì)闡述,故此處不再贅述。
[0093] 需要說明的是,在建立該第一 TCP連接時(shí),TOE會(huì)根據(jù)第一 TCP連接的配置信息使 用hash算法得到第一TCP連接的CID (Connection IDentifier,連接標(biāo)識(shí)符),也就是說,每 一條TCP連接都由唯一的一個(gè)CID所確定。因此,在TOE接收到第一 TCP報(bào)文后,會(huì)對(duì)第一 TCP報(bào)文的報(bào)頭進(jìn)行解析得到第一 TCP報(bào)文所對(duì)應(yīng)的第一 CID,TOE查找自身是否存儲(chǔ)有第 一 CID,如果沒有存儲(chǔ)第一 CID,則說明第一 CID對(duì)應(yīng)的第一 TCP連接還沒有建立,進(jìn)而TOE 會(huì)通過三次握手的機(jī)制與發(fā)送端建立上述第一 TCP連接,如果存儲(chǔ)第一 CID,TOE則執(zhí)行步 驟 102〇
[0094] 在步驟102中,當(dāng)TOE獲得已建立的第一TCP連接上傳輸?shù)牡谝?TCP報(bào)文之后,TOE 可以在本地存儲(chǔ)的連接信息表中,查找與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址 信息。
[0095] 其中,該連接信息表中包括第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系。該第一 CPU的標(biāo)識(shí)用于指示處理第一 TCP連接上傳 輸?shù)膱?bào)文數(shù)據(jù)的CPU,而該第一地址信息為第一 CPU預(yù)先確定的用于指示通過第一 TCP連接 傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,其中,第一地址信息可以包括報(bào)文數(shù)據(jù)在內(nèi)存中的 起始指針位置以及數(shù)據(jù)大小等信息。
[0096] 示例性的,如表1所示,該連接信息表中可以包括,第一 CID和第一 CPU的標(biāo)識(shí)的 對(duì)應(yīng)關(guān)系,以及第一 CID和第一地址信息的對(duì)應(yīng)關(guān)系,由于每個(gè)CID可以確定唯一的一條 TCP連接,因此,可以用一個(gè)CID表示一條TCP連接。
[0097] 表 1
[0099] 具體的,仕建H該弟一 TUP迕按町,TUE η」以W與弟一 (J1U對(duì)吆的第一 CPU的標(biāo)識(shí) 存儲(chǔ)在該連接信息表中,以建立第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系;類似的,在建 立該第一 TCP連接時(shí),TOE也可以將與第一 CID對(duì)應(yīng)的第一地址信息存儲(chǔ)在該連接信息表 中,以建立第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系。其中,建立該第一 TCP連接的方法將 在實(shí)施例2中詳細(xì)闡述,故此處不在贅述。
[0100] 在步驟103中,當(dāng)TOE通過步驟102中從連接信息表獲取到與第一 TCP連接對(duì)應(yīng) 的第一地址信息后,TOE根據(jù)第一地址信息中指示的第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存 中的存儲(chǔ)位置,將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在該存儲(chǔ)位置處。
[0101] 例如,第一地址信息中指示第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的起始指針為 0020,數(shù)據(jù)大小為IM的內(nèi)存塊中,那么,TOE便可以將第一 TCP報(bào)文中的數(shù)據(jù)寫入起始指針 為0020,數(shù)據(jù)大小為IM的內(nèi)存塊中。
[0102] 在步驟104中,在TOE將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在第一地址信息指示的存儲(chǔ) 位置之后,TOE便可以根據(jù)步驟102中獲取到的第一 CPU的標(biāo)識(shí),向所述第一 CPU發(fā)起第一 中斷請(qǐng)求,由于第一地址信息為第一 CPU預(yù)先確定的用于指示通過第一 TCP連接傳輸?shù)膱?bào) 文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,也就是說,第一 CPU已經(jīng)預(yù)先獲知第一 TCP連接傳輸?shù)膱?bào)文數(shù) 據(jù)在內(nèi)存中的存儲(chǔ)位置,因此,在接收到第一終端請(qǐng)求后,便可以直接根據(jù)第一地址信息從 內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù)。
[0103] 當(dāng)TOE需要在第一 TCP連接上發(fā)送第二TCP報(bào)文時(shí),與TOE在第一 TCP連接上接 收第一 TCP報(bào)文類似的,TOE首先接收第一 CPU發(fā)送的第二地址信息,該第二地址信息用于 指示待發(fā)送數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,這樣,TOE根據(jù)該第二地址信息從內(nèi)存中獲取待發(fā)送 數(shù)據(jù);并將待發(fā)送數(shù)據(jù)封裝成第二TCP報(bào)文;最終,TOE在該第一 TCP連接上發(fā)送封裝后的 第二TCP報(bào)文。
[0104] 可以看出,由于在建立該第一 TCP連接時(shí)已經(jīng)將第一 CPU的標(biāo)識(shí)與第一 TCP連接 建立了對(duì)應(yīng)關(guān)系,因此,TOE在處理第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)時(shí),可直接根據(jù)與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)向第一 CPU發(fā)送中斷請(qǐng)求,也就是說,不同的TCP連接上處 理報(bào)文數(shù)據(jù)的中斷請(qǐng)求可以與不同的CPU對(duì)應(yīng),避免了在多核應(yīng)用場景中,TCP連接上處理 報(bào)文數(shù)據(jù)的中斷請(qǐng)求均需與統(tǒng)一的CPU進(jìn)行中斷操作,而導(dǎo)致該統(tǒng)一的CPU資源占用率過 高的問題。
[0105] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,如圖4所示,包括:
[0106] 201、在接收到TOE發(fā)送的第二中斷請(qǐng)求之后,控制設(shè)備則從N個(gè)CPU中確定一個(gè) CPU為第一 CPU,第一 CPU用于處理第一 TCP連接上傳輸?shù)臄?shù)據(jù),N多1。
[0107] 202、控制設(shè)備向第一 CPU發(fā)送指示信息,該指示信息用于指示第一 CPU處理在第 一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0108] 在步驟201中,在建立該第一 TCP連接時(shí),可參見步驟101的描述,TOE會(huì)對(duì)接收 到的第一 TCP報(bào)文的報(bào)頭進(jìn)行解析,得到第一 TCP報(bào)文所對(duì)應(yīng)的第一 CID,TOE查找自身是 否存儲(chǔ)有第一 CID,如果沒有存儲(chǔ)第一 CID,則說明第一 CID對(duì)應(yīng)的第一 TCP連接還沒有建 立,此時(shí),TOE向控制設(shè)備發(fā)送第二中斷請(qǐng)求,控制設(shè)備接收到第二中斷請(qǐng)求后,從N個(gè)CPU 中確定一個(gè)CPU為第一 CPU,該第一 CPU用于處理第一 TCP連接上傳輸?shù)臄?shù)據(jù),N多1。
[0109] Τ0Ε、控制設(shè)備以及N個(gè)CPU可以組成一個(gè)多核系統(tǒng),控制設(shè)備接收到TOE發(fā)送的 第二中斷請(qǐng)求后,從N個(gè)CPU中確定處理第一 TCP連接上傳輸?shù)臄?shù)據(jù)的CPU為第一 CPU,這 樣,第一 CPU或者控制設(shè)備便可以把第一 CPU的標(biāo)識(shí)發(fā)送至TOE中,以使得TOE將第一 CPU 的標(biāo)識(shí)和第一 CID存儲(chǔ)至連接信息表中,以建立第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān) 系。
[0110] 具體的,控制設(shè)備在接收到第二中斷請(qǐng)求后,可以從N個(gè)CPU中分別獲取這N個(gè) CHJ的負(fù)載值,進(jìn)而根據(jù)所述N個(gè)CPU的負(fù)載值,將負(fù)載值最小的CPU作為該第一 CPU,專門 用于處理第一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0111] 又或者,控制設(shè)備在接收到第二中斷請(qǐng)求后,還可以接收TOE發(fā)送的第一 TCP連接 的配置信息,該配置信息可以用于指示第一 TCP連接的優(yōu)先等級(jí),具體的,如表2所示,該配 置信息可以具體包括該第一 TCP連接的四元組信息(即源IP地址、目的IP地址、源端口地 址以及目的端口地址)、發(fā)送端的MAC地址、該第一 TCP連接的起始序號(hào)、確認(rèn)序號(hào),本地窗 口值以及遠(yuǎn)端窗口值等。
[0112] 表 2
[0114] 控制設(shè)備可以根據(jù)第一 TCP連接的配置信息確定第一 TCP連接的優(yōu)先等級(jí),例如, 根據(jù)第一 TCP連接的四元組信息和MAC地址,確定第一 TCP連接是基于telnet協(xié)議的實(shí)時(shí) 通訊連接,由于該實(shí)時(shí)通訊連接對(duì)實(shí)時(shí)性要求很高,因此,可將該第一 TCP連接的優(yōu)先等級(jí) 設(shè)置為1 (即高優(yōu)先級(jí)的TCP連接),這樣,TOE便可以將負(fù)載值最小的CPU作為該第一 CPU, 用于處理第一 TCP連接上傳輸?shù)臄?shù)據(jù)。相應(yīng)的,如果第一 TCP連接的優(yōu)先等級(jí)為2 (即低優(yōu) 先級(jí)的TCP連接),那么,TOE便可以將占用率較高的CPU作為第一 CPU,例如,在負(fù)載值在 50 %至70 %的多個(gè)CPU中隨機(jī)選擇一個(gè)CPU作為該第一 CPU。
[0115] 當(dāng)然,控制設(shè)備從N個(gè)CPU中確定一個(gè)CPU為第一 CPU的方法可以有根多種,本發(fā) 明對(duì)此不作任何限定,例如,控制設(shè)備可以設(shè)置每個(gè)CPU處理100條TCP連接上傳輸?shù)膱?bào)文 數(shù)據(jù),那么,當(dāng)控制設(shè)備在接收到第二中斷請(qǐng)求后,可隨機(jī)選擇處理不足100條TCP連接上 傳輸?shù)膱?bào)文數(shù)據(jù)的CPU作為該第一 CPU。
[0116] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,TOE接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文后,由于在本地存儲(chǔ)的連接信息表中包括有第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng) 關(guān)系,以及第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系,其中,第一 CPU的標(biāo)識(shí)用于指示處理 第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,第一地址信息為第一 CPU預(yù)先確定的用于指示通過 第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,因此,TOE可以在連接信息表中查找與 第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,進(jìn)而將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ) 在第一地址信息指示的存儲(chǔ)位置中,并向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CPU根據(jù)第 一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù),這樣,由于在建立該第一 TCP連接時(shí)已經(jīng) 將第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU與第一 TCP連接建立了對(duì)應(yīng)關(guān)系,因此,TOE在處 理第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)時(shí),可直接根據(jù)與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 向第一 CPU發(fā)送中斷請(qǐng)求,也就是說,不同的TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求可以與不 同的CPU對(duì)應(yīng),避免了在多核應(yīng)用場景中,TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求均需與統(tǒng)一 的CPU進(jìn)行中斷操作,而導(dǎo)致該統(tǒng)一的CPU資源占用率過高的問題,同時(shí)提高了其他CPU的 資源利用率,使多核系統(tǒng)中的多個(gè)CPU的負(fù)載趨于均衡。
[0117] 實(shí)施例2
[0118] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,如圖5所示,包括:
[0119] 301、TOE從發(fā)送端獲取建立第一 TCP連接的配置信息。
[0120] 302、若根據(jù)配置信息得到的第一 CID沒有存儲(chǔ)在TOE中,TOE則向控制設(shè)備發(fā)送 第二中斷請(qǐng)求。
[0121] 303、控制設(shè)備接收到第二中斷請(qǐng)求后,從N個(gè)CPU中確定一個(gè)CPU作為第一 CPU, 該第一 CPU用于處理第一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0122] 304、控制設(shè)備向第一 CPU發(fā)送指示信息,該指示信息用于指示第一 CPU處理在第 一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0123] 305、第一 CPU根據(jù)指示信息確定第一地址信息,該第一地址信息用于指示第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置。
[0124] 306、第一 CPU將第一地址信息和第一 CPU的標(biāo)識(shí)發(fā)送至Τ0Ε。
[0125] 307、TOE將第一 CID與第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及第一 CID與第一地址信 息的對(duì)應(yīng)關(guān)系存儲(chǔ)至連接信息表中,以建立第一 CPU與第一 TCP連接的對(duì)應(yīng)關(guān)系,以及第一 地址信息與第一 TCP連接的對(duì)應(yīng)關(guān)系。
[0126] 308、TOE生成SYN報(bào)文和ACK報(bào)文,并發(fā)送至發(fā)送端,若接收到發(fā)送端發(fā)送的ACK 報(bào)文,TOE則確認(rèn)第一 TCP連接建立完成。
[0127] 309、TOE在已建立的第一 TCP連接上接收傳輸?shù)牡谝?TCP報(bào)文。
[0128] 310、T0E在本地存儲(chǔ)的連接信息表中查找與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 和第一地址信息,該連接信息表中包括第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及第 一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系。
[0129] 311、TOE將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在第一地址信息指示的存儲(chǔ)位置中。
[0130] 312、TOE根據(jù)第一 CPU的標(biāo)識(shí)向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CPU根據(jù) 第一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù)。
[0131] 在步驟301中,由于TOE需要與發(fā)送端建立第一 TCP連接后,才能在第一 TCP連接 上傳輸數(shù)據(jù),因此,發(fā)送端會(huì)根據(jù)三次握手的機(jī)制,向TOE (本發(fā)明實(shí)施例中涉及的TOE均以 接收端的TOE為例)發(fā)送SYN(Synchronize Sequence Numbers,同步序列編號(hào))報(bào)文,TOE 接收到SYN報(bào)文后對(duì)SYN報(bào)文進(jìn)行報(bào)文解析,獲取SYN報(bào)文中攜帶的建立第一 TCP連接的 配置信息,該建立第一 TCP連接的配置信息的具體描述可參見步驟201。
[0132] 其中,所謂的三次握手的機(jī)制,是指為了提供可靠的數(shù)據(jù)傳送,接收端和發(fā)送端對(duì) 每次數(shù)據(jù)的傳輸進(jìn)行協(xié)商,使數(shù)據(jù)的發(fā)送和接收同步。如圖6所示,第一次握手是指,在建 立TCP連接時(shí),發(fā)送端發(fā)送SYN報(bào)文到接收端,該數(shù)據(jù)包中包含本次TCP連接的配置信息, 以使得接收端根據(jù)配置信息進(jìn)行初始化配置。第二次握手是指,接收端進(jìn)行初始化配置后 發(fā)送響應(yīng)信息(即SYN報(bào)文+ACK (Acknowledgement,確認(rèn)字符)報(bào)文)指示發(fā)送端該TCP 連接的配置完成。第三次握手是指,發(fā)送端收到接收端的響應(yīng)信息后發(fā)送確認(rèn)信息,指示接 收端該TCP連接已經(jīng)建立,準(zhǔn)備傳輸數(shù)據(jù)。
[0133] 基于上述的三次握手的機(jī)制,TOE在獲取到發(fā)送端發(fā)送SYN報(bào)文(即第一次握手) 后,解析得到第一 TCP連接的配置信息,進(jìn)而根據(jù)第一 TCP連接的配置信息使用hash算法 得到第一 TCP連接的第一 CID,此時(shí),TOE查找自身是否存儲(chǔ)有第一 CID,如果沒有存儲(chǔ)第一 CID,則說明第一 CID對(duì)應(yīng)的第一 TCP連接還沒有建立,那么,TOE則執(zhí)行步驟302至308以 建立該第一 TVP連接;如果存儲(chǔ)第一 CID,則說明第一 CID對(duì)應(yīng)的第一 TCP連接已經(jīng)建立完 成,那么,TOE則執(zhí)行步驟309至312。
[0134] 在步驟302中,若根據(jù)配置信息得到的第一 CID沒有存儲(chǔ)在TOE中,TOE則向控制 設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)控制設(shè)備從N個(gè)CPU中確定處理第一 TCP連接上傳輸?shù)臄?shù)據(jù) 的CPU為第一 CPU。
[0135] 在步驟303中,控制設(shè)備接收到TOE發(fā)送的第二中斷請(qǐng)求后,從N個(gè)CPU中確定處 理第一 TCP連接上傳輸?shù)臄?shù)據(jù)的CPU為第一 CPU,這樣,第一 CPU或者控制設(shè)備便可以把第 一 CPU的標(biāo)識(shí)發(fā)送至TOE中,以使得TOE將第一 CPU的標(biāo)識(shí)和第一 CID存儲(chǔ)至連接信息表 中,以建立第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
[0136] 其中,控制設(shè)備從N個(gè)CPU中確定處理第一 TCP連接上傳輸?shù)臄?shù)據(jù)的CPU為第一 CPU的方法可參見實(shí)施例1中步驟201中的相關(guān)描述,此處不再詳述。
[0137] 在步驟304中,控制設(shè)備確定了第一 CPU之后,向第一 CPU發(fā)送指示信息,該指示 信息用于指示第一 CPU處理在第一 TCP連接上傳輸?shù)臄?shù)據(jù)。也就是說,控制設(shè)備確定了第 一 CPU之后,將處理在第一 TCP連接上傳輸?shù)臄?shù)據(jù)的全部任務(wù)下發(fā)至第一 CPU。
[0138] 在步驟305中,第一 CPU根據(jù)步驟304中控制設(shè)備發(fā)送的指示信息,確定第一地址 信息,該第一地址信息用于指示第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置。
[0139] 具體的,第一 CPU獲取到指示信息后,主動(dòng)向內(nèi)存發(fā)送地址申請(qǐng),該地址申請(qǐng)用于 在內(nèi)存中,請(qǐng)求存放第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,內(nèi)存根據(jù)地址申 請(qǐng)劃分一定大小的內(nèi)存塊用于存放第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù),并生成第一地址信息發(fā) 送至第一 CPU。
[0140] 在步驟306中,第一 CPU將第一 CPU的標(biāo)識(shí)和步驟305中確定的第一地址信息發(fā) 送至Τ0Ε。
[0141] 在步驟307中,TOE接收到第一 CPU的標(biāo)識(shí)和第一地址信息后,將第一 CID與第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及第一 CID與第一地址信息的對(duì)應(yīng)關(guān)系存儲(chǔ)至連接信息表中,以 建立第一 CPU與第一 TCP連接的對(duì)應(yīng)關(guān)系,以及第一地址信息與第一 TCP連接的對(duì)應(yīng)關(guān)系。
[0142] 通過步驟301至307, TOE完成了建立第一 TCP連接時(shí),對(duì)第一 TCP連接對(duì)應(yīng)的第 一 CPU和第一地址信息的配置過程,因此,在步驟308中,TOE生成SYN報(bào)文和ACK報(bào)文,并 發(fā)送至發(fā)送端以完成第二次握手過程,進(jìn)一步地,若TOE接收到發(fā)送端發(fā)送的ACK報(bào)文(即 第三次握手過程),TOE則確認(rèn)第一 TCP連接建立完成,可以在第一 TCP連接上以TCP報(bào)文 的形式傳輸數(shù)據(jù)。
[0143] 進(jìn)一步地,TOE可以執(zhí)行步驟309至312在第一 TCP連接上接收第一 TCP報(bào)文,其 中,步驟309至312的具體方法可參見步驟101至104,此處不再詳述。
[0144] 可以看出,在本發(fā)明中,在建立第一 TCP連接時(shí),通過TOE與控制設(shè)備的交互,可以 指定任一個(gè)CPU作為第一 CPU處理在第一 TCP連接上傳輸?shù)臄?shù)據(jù),這樣,TOE和控制設(shè)備可 以將處理各個(gè)TCP連接上傳輸?shù)臄?shù)據(jù)的任務(wù)分配到各個(gè)CPU上,使多核系統(tǒng)中的多個(gè)CPU 的負(fù)載趨于均衡。
[0145] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸方法,TOE接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文后,由于在本地存儲(chǔ)的連接信息表中包括有第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng) 關(guān)系,以及第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系,其中,第一 CPU的標(biāo)識(shí)用于指示處理 第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,第一地址信息為第一 CPU預(yù)先確定的用于指示通過 第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,因此,TOE可以在連接信息表中查找與 第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,進(jìn)而將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ) 在第一地址信息指示的存儲(chǔ)位置中,并向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CPU根據(jù)第 一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù),這樣,由于在建立該第一 TCP連接時(shí)已經(jīng) 將第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU與第一 TCP連接建立了對(duì)應(yīng)關(guān)系,因此,TOE在處 理第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)時(shí),可直接根據(jù)與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 向第一 CPU發(fā)送中斷請(qǐng)求,也就是說,不同的TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求可以與不 同的CPU對(duì)應(yīng),避免了在多核應(yīng)用場景中,TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求均需與統(tǒng)一 的CPU進(jìn)行中斷操作,而導(dǎo)致該統(tǒng)一的CPU資源占用率過高的問題,同時(shí)提高了其他CPU的 資源利用率,使多核系統(tǒng)中的多個(gè)CPU的負(fù)載趨于均衡。
[0146] 實(shí)施例3
[0147] 附圖7示出的是本發(fā)明提供的T0E01的硬件示意圖。
[0148] 其中,所述T0E01包括控制模塊01、與控制模塊01均相連的TOE接收端100和TOE 發(fā)送端200,其中,TOE接收端100具體包括報(bào)頭解析模塊02、第一 DMA控制器03、第一處理 引擎04以及第一緩存05, TOE發(fā)送端200具體包括封裝模塊06、第二DMA控制器07、第二 處理引擎08以及第二緩存09。
[0149] 控制模塊01,是所述T0E01的控制中心,控制模塊01通過對(duì)TOE接收端100或TOE 發(fā)送端200接收到的指令和數(shù)據(jù)進(jìn)行處理,執(zhí)行所述控制模塊01的各項(xiàng)功能。其中,控制 模塊01中存儲(chǔ)有第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及所述第一 TCP連接和所 述第一地址信息的對(duì)應(yīng)關(guān)系,其中,所述第一 CPU的標(biāo)識(shí)用于指示處理所述第一 TCP連接上 傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,所述第一地址信息為第一 CPU預(yù)先確定的用于指示通過所述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置。
[0150] 報(bào)頭解析模塊02,可用于對(duì)在第一 TCP連接上接收到的TCP報(bào)文進(jìn)行解析,獲得所 述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)。
[0151] 第一 DM控制器03和第二DM控制器07,可以在沒有用CPU參與的情況下,使得 T0E01和內(nèi)存之間進(jìn)行雙向數(shù)據(jù)傳輸。
[0152] 第一處理引擎04和第二處理引擎08,可以對(duì)控制模塊01進(jìn)行驅(qū)動(dòng),以使得控制模 塊01執(zhí)行T0E01的各項(xiàng)功能。
[0153] 封裝模塊06,可用于對(duì)在第一 TCP連接上需要發(fā)送的TCP報(bào)文數(shù)據(jù)進(jìn)行封裝,獲得 封裝后的TCP報(bào)文。
[0154] 第一緩存05和第二緩存09,用于分別存放TOE接收端100和TOE發(fā)送端200接收 到或待發(fā)送的數(shù)據(jù)和指令。
[0155] 具體的,在本發(fā)明的實(shí)施例中,報(bào)頭解析模塊02接收到在第一 TCP連接上傳輸?shù)?第一 TCP報(bào)文后進(jìn)行報(bào)文解析,獲得第一 TCP連接的CID并發(fā)送至第一處理引擎04 ;第一 處理引擎04查找與該CID對(duì)應(yīng)的TCP連接為第一 TCP連接后上報(bào)至控制模塊01,控制模 塊01在存儲(chǔ)的連接信息表中查找與所述第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址 信息;進(jìn)而調(diào)用第一 DM控制器03將所述第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在所述第一地址信息 指示的存儲(chǔ)位置中;同時(shí),控制模塊01據(jù)所述第一 CPU的標(biāo)識(shí),驅(qū)動(dòng)第一處理引擎04根向 所述第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)所述第一 CPU根據(jù)所述第一地址信息從所述內(nèi)存中 獲取所述第一 TCP報(bào)文中的數(shù)據(jù)。
[0156] 進(jìn)一步地,在報(bào)頭解析模塊02接收到在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文之 前,還可以包括步驟:控制模塊01驅(qū)動(dòng)第一處理引擎04向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸 發(fā)所述控制設(shè)備確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí);進(jìn)而,第一處理引擎 04獲取到所述第一 CPU的標(biāo)識(shí)后,將所述第一 CPU的標(biāo)識(shí)與所述第一 TCP的連接關(guān)系存儲(chǔ) 至控制模塊01中的連接信息表中,以建立所述第一 TCP連接與所述第一 CPU的對(duì)應(yīng)關(guān)系。
[0157] 進(jìn)一步地,在控制模塊01驅(qū)動(dòng)第一處理引擎04向控制設(shè)備發(fā)送第二中斷請(qǐng)求之 后,還可以包括步驟:控制模塊01驅(qū)動(dòng)第一處理引擎04將建立所述第一 TCP連接所需的配 置信息發(fā)送至所述控制設(shè)備,所述配置信息用于指示所述第一 TCP連接的優(yōu)先等級(jí);
[0158] 此時(shí),觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí), 可以具體包括步驟:觸發(fā)所述控制設(shè)備根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等 級(jí),以便于所述控制設(shè)備根據(jù)所述第一 TCP連接的優(yōu)先等級(jí)確定與所述第一 TCP連接對(duì)應(yīng) 的所述第一 CPU的標(biāo)識(shí)。
[0159] 進(jìn)一步地,在控制模塊01驅(qū)動(dòng)第一處理引擎04向控制設(shè)備發(fā)送第二中斷請(qǐng)求, 觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí)之后,還可以包括 步驟:第一 DM控制器接收所述第一 CPU發(fā)送的所述第一地址信息并發(fā)送至第一處理引擎 04 ;第一處理引擎04將所述第一地址信息和所述第一 TCP連接的對(duì)應(yīng)關(guān)系存儲(chǔ)至控制模塊 01中的連接信息表中,以建立所述第一地址信息與所述第一 TCP連接的對(duì)應(yīng)關(guān)系。
[0160] 進(jìn)一步地,當(dāng)所述T0E01需要在所述第一 TCP連接上發(fā)送第二TCP報(bào)文時(shí),所述方 法還可以包括步驟:第二DM控制器07接收所述第一 CPU發(fā)送的第二地址信息并發(fā)送至控 制模塊01,所述第二地址信息用于指示待發(fā)送數(shù)據(jù)在所述內(nèi)存中的存儲(chǔ)位置;控制模塊01 根據(jù)所述第二地址信息驅(qū)動(dòng)第二處理引擎08從所述內(nèi)存中獲取所述待發(fā)送數(shù)據(jù),并發(fā)送 至封裝模塊06 ;封裝模塊06將所述待發(fā)送數(shù)據(jù)封裝成所述第二TCP報(bào)文,以使得第二處理 引擎08在所述第一 TCP連接上發(fā)送所述封裝模塊06生成的第二TCP報(bào)文。
[0161] 附圖8示出的是本發(fā)明的提供的一種控制設(shè)備02的硬件示意圖。
[0162] 該控制設(shè)備02可應(yīng)用于包含多個(gè)CPU的多核應(yīng)用場景,例如,SOC系統(tǒng)或者包含 T0E01網(wǎng)卡的多核服務(wù)器中。
[0163] 如圖8,所述控制設(shè)備02包括CPU21、通信接口 22、控制設(shè)備存儲(chǔ)器23以及總線 24。
[0164] 其中,CPU21、通訊接口 22、控制設(shè)備存儲(chǔ)器234通過總線24相連接并進(jìn)行通信。
[0165] CPU21,是所述控制設(shè)備02的控制中心,CPU21通過對(duì)通訊接口 22接收到的中斷 請(qǐng)求進(jìn)行中斷處理,并調(diào)用控制設(shè)備存儲(chǔ)器23中的軟件或程序,執(zhí)行所述控制設(shè)備02的各 項(xiàng)功能。
[0166] 通信接口 22,可以由光通訊接口,電通訊接口,無線通訊接口或其任意組合 實(shí)現(xiàn)。例如,光通訊接口可以是小封裝可插拔(英文:small form-factor pluggable transceiver,縮寫:SFP)通訊接口(英文transceiver),增強(qiáng)小封裝可插拔(英文: enhanced small form-factor pluggable,縮寫:SFP+)通訊接口或10吉比特小封裝可插拔 (英文:l〇Gigabit small form-factor pluggable,縮寫:XFP)通訊接口。電通訊接口可以 是以太網(wǎng)(英文:Ethernet)網(wǎng)絡(luò)接口控制器(英文:network interface controller,縮 寫:NIC)。無線通訊接口可以是無線網(wǎng)絡(luò)接口控制器(英文:wireless network interface controller,縮寫:WNIC)。接收端中可以有多個(gè)通信接口 22。
[0167] 控制設(shè)備存儲(chǔ)器23,可用于存儲(chǔ)軟件程序或數(shù)據(jù),CPU21通過運(yùn)行存儲(chǔ)在控制設(shè) 備存儲(chǔ)器23的軟件程序或數(shù)據(jù),從而執(zhí)行所述控制設(shè)備02的各種功能應(yīng)用以及數(shù)據(jù)處理。
[0168] 具體的,在本發(fā)明的實(shí)施例中,若通訊接口 22接收到T0E01發(fā)送的第二中斷請(qǐng)求, 通訊接口 22將所述第二中斷請(qǐng)求發(fā)送至CPU21,CPU21接收到第二中斷請(qǐng)求后,從N個(gè)CPU 中確定一個(gè)CPU為第一 CPU,所述第一 CPU用于處理第一 TCP連接上傳輸?shù)臄?shù)據(jù),N多1 ;進(jìn) 而,CPU21調(diào)用通訊接口 22向第一 CPU發(fā)送指示信息,所述指示信息用于指示所述第一 CPU 處理在所述第一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0169] 進(jìn)一步地,CPU21從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,可以具體包括以下步驟: CPU21調(diào)用通訊接口 22獲取所述N個(gè)CPU的負(fù)載值;CPU21根據(jù)所述N個(gè)CPU的負(fù)載值,將 負(fù)載值最小的CPU作為所述第一 CPU。
[0170] 進(jìn)一步地,在CPU21從N個(gè)CPU中確定一個(gè)CPU為第一 CPU之前,可以包括以下步 驟:通訊接口 22接收所述T0E01發(fā)送的配置信息并發(fā)送至CPU21,所述配置信息用于指示 所述第一 TCP連接的優(yōu)先等級(jí)。
[0171] 此時(shí),CPU21從N個(gè)CPU中確定一個(gè)CPU為第一CPU,可以具體包括以下步驟:CPU21 根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí);并調(diào)用通訊接口 22獲取所述N個(gè) CPU的負(fù)載值;若第一 TCP連接的優(yōu)先等級(jí)高于閾值,CPU21則將負(fù)載值最小的CPU作為所 述第一 CPU。
[0172] 進(jìn)一步地的,如圖9所示,上述T0E01和控制設(shè)備02可以集成在一個(gè)多核系統(tǒng)300 中,該多核系統(tǒng)300具體包括:T0E01、控制設(shè)備02、內(nèi)存03、N個(gè)CPU (該N個(gè)CPU中包括第 一 CPU)以及總線04,其中,T0E01、控制設(shè)備02、內(nèi)存03與N個(gè)CPU的具體交互方法可參見 上述實(shí)施例1至3中的詳細(xì)描述,故此處不再贅述。
[0173] 需要說明的是,在圖9中,控制設(shè)備02中的控制設(shè)備存儲(chǔ)器23可以不集成在控制 設(shè)備內(nèi)部02,其可以作為內(nèi)存03存在,即控制設(shè)備存儲(chǔ)器23和內(nèi)存03為同一個(gè)存儲(chǔ)介質(zhì), 此時(shí),控制設(shè)備02調(diào)用的應(yīng)用程序存儲(chǔ)于內(nèi)存03中。
[0174] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸裝置,TOE接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文后,由于在本地存儲(chǔ)的連接信息表中包括有第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng) 關(guān)系,以及第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系,其中,第一 CPU的標(biāo)識(shí)用于指示處理 第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,第一地址信息為第一 CPU預(yù)先確定的用于指示通過 第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,因此,TOE可以在連接信息表中查找與 第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,進(jìn)而將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ) 在第一地址信息指示的存儲(chǔ)位置中,并向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CPU根據(jù)第 一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù),這樣,由于在建立該第一 TCP連接時(shí)已經(jīng) 將第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU與第一 TCP連接建立了對(duì)應(yīng)關(guān)系,因此,TOE在處 理第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)時(shí),可直接根據(jù)與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 向第一 CPU發(fā)送中斷請(qǐng)求,也就是說,不同的TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求可以與不 同的CPU對(duì)應(yīng),避免了在多核應(yīng)用場景中,TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求均需與統(tǒng)一 的CPU進(jìn)行中斷操作,而導(dǎo)致該統(tǒng)一的CPU資源占用率過高的問題,同時(shí)提高了其他CPU的 資源利用率,使多核系統(tǒng)中的多個(gè)CPU的負(fù)載趨于均衡。
[0175] 實(shí)施例4
[0176] 本發(fā)明的實(shí)施例提供一種Τ0Ε,如圖10所示,包括:
[0177] 接收單元31,用于接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文;
[0178] 查找單元32,用于在本地存儲(chǔ)的連接信息表中查找與所述接收單元31中的第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,所述連接信息表中包括所述第一 TCP連接 和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及所述第一 TCP連接和所述第一地址信息的對(duì)應(yīng)關(guān)系,其 中,所述第一 CPU的標(biāo)識(shí)用于指示處理所述第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,所述第 一地址信息為第一 CPU預(yù)先確定的用于指示通過所述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存 中的存儲(chǔ)位置;
[0179] 存儲(chǔ)單元33,用于將接收單元31中所述第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在所述查找單 元32中的第一地址信息指示的存儲(chǔ)位置中;
[0180] 中斷觸發(fā)單元34,用于根據(jù)所述查找單元32中第一 CPU的標(biāo)識(shí)向所述第一 CPU 發(fā)起第一中斷請(qǐng)求,觸發(fā)所述第一 CPU根據(jù)所述第一地址信息從所述內(nèi)存中獲取所述第一 TCP報(bào)文中的數(shù)據(jù)。
[0181] 進(jìn)一步地,所述中斷觸發(fā)單元34,還用于向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述 控制設(shè)備確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí);
[0182] 所述接收單元31,還用于獲取所述第一 CPU的標(biāo)識(shí);
[0183] 所述存儲(chǔ)單元33,還用于將所述接收單元31中第一 CPU的標(biāo)識(shí)與所述第一 TCP的 連接關(guān)系存儲(chǔ)至所述連接信息表中,以建立所述第一 TCP連接與所述第一 CPU的對(duì)應(yīng)關(guān)系。
[0184] 進(jìn)一步地,如圖11所示,所述TOE還包括發(fā)送單元35,其中,
[0185] 所述發(fā)送單元35,用于將建立所述第一 TCP連接所需的配置信息發(fā)送至所述控制 設(shè)備,所述配置信息用于指示所述第一 TCP連接的優(yōu)先等級(jí);
[0186] 所述中斷觸發(fā)單元34,具體用于向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè) 備根據(jù)所述發(fā)送單元35中的配置信息確定所述第一 TCP連接的優(yōu)先等級(jí),以便于所述控制 設(shè)備根據(jù)所述第一 TCP連接的優(yōu)先等級(jí)確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo) 識(shí)。
[0187] 進(jìn)一步地,所述接收單元31,還用于接收所述第一 CPU發(fā)送的所述第一地址信息;
[0188] 所述存儲(chǔ)單元33,還用于將所述接收單元31中的所述第一地址信息和所述第一 TCP連接的對(duì)應(yīng)關(guān)系存儲(chǔ)至所述連接信息表中,以建立所述第一地址信息與所述第一 TCP 連接的對(duì)應(yīng)關(guān)系。
[0189] 進(jìn)一步地,如圖12所示,所述TOE還包括封裝單元36,其中,
[0190] 所述接收單元31,還用于接收所述第一 CPU發(fā)送的第二地址信息,所述第二地址 信息用于指示待發(fā)送數(shù)據(jù)在所述內(nèi)存中的存儲(chǔ)位置;并根據(jù)所述第二地址信息從所述內(nèi)存 中獲取所述待發(fā)送數(shù)據(jù);
[0191] 所述封裝單元36,用于將所述接收單元31中的所述待發(fā)送數(shù)據(jù)封裝成所述第二 TCP報(bào)文;
[0192] 所述發(fā)送單元35,還用于在所述第一 TCP連接上發(fā)送所述封裝單元36中的所述第 二TCP報(bào)文。
[0193] 本發(fā)明的實(shí)施例提供一種控制設(shè)備,如圖13所示,包括:
[0194] 確定單元41,用于在接收到傳輸控制協(xié)議卸載引擎TOE發(fā)送的第二中斷請(qǐng)求之 后,則從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,所述第一 CPU用于處理第一傳輸控制協(xié)議TCP 連接上傳輸?shù)臄?shù)據(jù),N多1 ;
[0195] 指示單元42,用于向所述確定單元41中確定的所述第一 CPU發(fā)送指示信息,所述 指示信息用于指示所述第一 CPU處理在所述第一 TCP連接上傳輸?shù)臄?shù)據(jù)。
[0196] 進(jìn)一步地,如圖14所示,所述CPU還包括獲取單元43,其中,
[0197] 所述獲取單元43,用于獲取所述N個(gè)CPU的負(fù)載值;
[0198] 所述確定單元41,具體用于根據(jù)所述獲取單元43中所述N個(gè)CPU的負(fù)載值,將負(fù) 載值最小的CPU作為所述第一 CPU。
[0199] 進(jìn)一步地,所述獲取單元43,還用于接收所述TOE發(fā)送的配置信息,所述配置信息 用于指示所述第一 TCP連接的優(yōu)先等級(jí);并獲取所述N個(gè)CPU的負(fù)載值;
[0200] 所述確定單元41,具體用于若所述獲取單元43中所述第一 TCP連接的優(yōu)先等級(jí)高 于閾值,則將負(fù)載值最小的CPU作為所述第一 CPU。
[0201] 本發(fā)明的實(shí)施例提供一種數(shù)據(jù)傳輸裝置,TOE接收在第一 TCP連接上傳輸?shù)牡谝?TCP報(bào)文后,由于在本地存儲(chǔ)的連接信息表中包括有第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng) 關(guān)系,以及第一 TCP連接和第一地址信息的對(duì)應(yīng)關(guān)系,其中,第一 CPU的標(biāo)識(shí)用于指示處理 第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,第一地址信息為第一 CPU預(yù)先確定的用于指示通過 第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置,因此,TOE可以在連接信息表中查找與 第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,進(jìn)而將第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ) 在第一地址信息指示的存儲(chǔ)位置中,并向第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)第一 CPU根據(jù)第 一地址信息從內(nèi)存中獲取第一 TCP報(bào)文中的數(shù)據(jù),這樣,由于在建立該第一 TCP連接時(shí)已經(jīng) 將第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU與第一 TCP連接建立了對(duì)應(yīng)關(guān)系,因此,TOE在處 理第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)時(shí),可直接根據(jù)與第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 向第一 CPU發(fā)送中斷請(qǐng)求,也就是說,不同的TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求可以與不 同的CPU對(duì)應(yīng),避免了在多核應(yīng)用場景中,TCP連接上處理報(bào)文數(shù)據(jù)的中斷請(qǐng)求均需與統(tǒng)一 的CPU進(jìn)行中斷操作,而導(dǎo)致該統(tǒng)一的CPU資源占用率過高的問題,同時(shí)提高了其他CPU的 資源利用率,使多核系統(tǒng)中的多個(gè)CPU的負(fù)載趨于均衡。
[0202] 所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能 模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模 塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功 能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過 程,在此不再贅述。
[0203] 在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以 通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或 單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元 或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所 顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的 間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0204] 所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯 示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè) 網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目 的。
[0205] 另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以 是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單 元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0206] 所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用 時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上 或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式 體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī) 設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各 個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ) 器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光 盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0207] 以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵 蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【主權(quán)項(xiàng)】
1. 一種數(shù)據(jù)傳輸方法,其特征在于,包括: 傳輸控制協(xié)議卸載引擎TOE接收在第一傳輸控制協(xié)議TCP連接上傳輸?shù)牡谝?TCP報(bào) 文; 所述TOE在本地存儲(chǔ)的連接信息表中查找與所述第一 TCP連接對(duì)應(yīng)的第一 CPU的標(biāo)識(shí) 和第一地址信息,所述連接信息表中包括所述第一 TCP連接和第一 CPU的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系, 以及所述第一 TCP連接和所述第一地址信息的對(duì)應(yīng)關(guān)系,其中,所述第一 CPU的標(biāo)識(shí)用于指 示處理所述第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,所述第一地址信息為第一 CPU預(yù)先確定 的用于指示通過所述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位置; 所述TOE將所述第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在所述第一地址信息指示的存儲(chǔ)位置中; 所述TOE根據(jù)所述第一 CPU的標(biāo)識(shí)向所述第一 CPU發(fā)起第一中斷請(qǐng)求,觸發(fā)所述第一 CHJ根據(jù)所述第一地址信息從所述內(nèi)存中獲取所述第一 TCP報(bào)文中的數(shù)據(jù)。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述TOE獲取第一 TCP連接上的第一 TCP報(bào)文之前,還包括: 所述TOE向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接 對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí); 所述TOE獲取所述第一 CPU的標(biāo)識(shí),并將所述第一 CPU的標(biāo)識(shí)與所述第一 TCP的連接 關(guān)系存儲(chǔ)至所述連接信息表中,以建立所述第一 TCP連接與所述第一 CPU的對(duì)應(yīng)關(guān)系。3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述TOE向控制設(shè)備發(fā)送第二中斷請(qǐng)求 之后,還包括: 所述TOE將建立所述第一 TCP連接所需的配置信息發(fā)送至所述控制設(shè)備,所述配置信 息用于指示所述第一 TCP連接的優(yōu)先等級(jí); 其中,觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí),包括: 觸發(fā)所述控制設(shè)備根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí),以便于所述 控制設(shè)備根據(jù)所述第一 TCP連接的優(yōu)先等級(jí)確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU 的標(biāo)識(shí)。4. 根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述TOE向控制設(shè)備發(fā)送第二中斷請(qǐng) 求,觸發(fā)所述控制設(shè)備確定與所述第一 TCP連接所綁定的所述第一 CPU的標(biāo)識(shí)之后,還包 括: 所述TOE接收所述第一 CPU發(fā)送的所述第一地址信息; 所述TOE將所述第一地址信息和所述第一 TCP連接的對(duì)應(yīng)關(guān)系存儲(chǔ)至所述連接信息表 中,以建立所述第一地址信息與所述第一 TCP連接的對(duì)應(yīng)關(guān)系。5. 根據(jù)權(quán)利要求1至4中任一種所述的方法,其特征在于,當(dāng)所述TOE需要在所述第一 TCP連接上發(fā)送第二TCP報(bào)文時(shí),所述方法還包括: 所述TOE接收所述第一 CPU發(fā)送的第二地址信息,所述第二地址信息用于指示待發(fā)送 數(shù)據(jù)在所述內(nèi)存中的存儲(chǔ)位置; 所述TOE根據(jù)所述第二地址信息從所述內(nèi)存中獲取所述待發(fā)送數(shù)據(jù); 所述TOE將所述待發(fā)送數(shù)據(jù)封裝成所述第二TCP報(bào)文; 所述TOE在所述第一 TCP連接上發(fā)送所述第二TCP報(bào)文。6. -種數(shù)據(jù)傳輸方法,其特征在于,包括: 在控制設(shè)備接收到傳輸控制協(xié)議卸載引擎TOE發(fā)送的第二中斷請(qǐng)求之后,所述控制設(shè) 備則從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,所述第一 CPU用于處理第一傳輸控制協(xié)議TCP 連接上傳輸?shù)臄?shù)據(jù),N多1 ; 所述控制設(shè)備向所述第一 CPU發(fā)送指示信息,所述指示信息用于指示所述第一 CPU處 理在所述第一 TCP連接上傳輸?shù)臄?shù)據(jù)。7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述控制設(shè)備則從N個(gè)CPU中確定一個(gè) CPU為第一 CPU,包括: 所述控制設(shè)備獲取所述N個(gè)CPU的負(fù)載值; 所述控制設(shè)備根據(jù)所述N個(gè)CPU的負(fù)載值,將負(fù)載值最小的CPU作為所述第一 CPU。8. 根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述控制設(shè)備則從N個(gè)CPU中確定一個(gè) CPU為第一 CPU之前,還包括: 所述控制設(shè)備接收所述TOE發(fā)送的配置信息,所述配置信息用于指示所述第一 TCP連 接的優(yōu)先等級(jí); 其中,所述控制設(shè)備則從N個(gè)CPU中確定一個(gè)CPU為第一 CPU,包括: 所述控制設(shè)備根據(jù)所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí); 所述控制設(shè)備獲取所述N個(gè)CPU的負(fù)載值; 若第一 TCP連接的優(yōu)先等級(jí)高于閾值,所述控制設(shè)備則將負(fù)載值最小的CPU作為所述 第一 CPU。9. 一種傳輸控制協(xié)議卸載引擎T0E,其特征在于,包括: 接收單元,用于接收在第一傳輸控制協(xié)議TCP連接上傳輸?shù)牡谝?TCP報(bào)文; 查找單元,用于在本地存儲(chǔ)的連接信息表中查找與所述接收單元中的第一 TCP連接對(duì) 應(yīng)的第一 CPU的標(biāo)識(shí)和第一地址信息,所述連接信息表中包括所述第一 TCP連接和第一 CPU 的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,以及所述第一 TCP連接和所述第一地址信息的對(duì)應(yīng)關(guān)系,其中,所述第 一 CPU的標(biāo)識(shí)用于指示處理所述第一 TCP連接上傳輸?shù)膱?bào)文數(shù)據(jù)的CPU,所述第一地址信息 為第一 CPU預(yù)先確定的用于指示通過所述第一 TCP連接傳輸?shù)膱?bào)文數(shù)據(jù)在內(nèi)存中的存儲(chǔ)位 置; 存儲(chǔ)單元,用于將接收單元中所述第一 TCP報(bào)文中的數(shù)據(jù)存儲(chǔ)在所述查找單元中的第 一地址信息指示的存儲(chǔ)位置中; 中斷觸發(fā)單元,用于根據(jù)所述查找單元中第一 CPU的標(biāo)識(shí)向所述第一 CPU發(fā)起第一中 斷請(qǐng)求,觸發(fā)所述第一 CPU根據(jù)所述第一地址信息從所述內(nèi)存中獲取所述第一 TCP報(bào)文中 的數(shù)據(jù)。10. 根據(jù)權(quán)利要求9所述的T0E,其特征在于, 所述中斷觸發(fā)單元,還用于向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備確定與 所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí); 所述接收單元,還用于獲取所述第一 CPU的標(biāo)識(shí); 所述存儲(chǔ)單元,還用于將所述接收單元中第一 CPU的標(biāo)識(shí)與所述第一 TCP的連接關(guān)系 存儲(chǔ)至所述連接信息表中,以建立所述第一 TCP連接與所述第一 CPU的對(duì)應(yīng)關(guān)系。11. 根據(jù)權(quán)利要求10所述的T0E,其特征在于,所述TOE還包括發(fā)送單元,其中, 所述發(fā)送單元,用于將建立所述第一 TCP連接所需的配置信息發(fā)送至所述控制設(shè)備, 所述配置信息用于指示所述第一 TCP連接的優(yōu)先等級(jí); 所述中斷觸發(fā)單元,具體用于向控制設(shè)備發(fā)送第二中斷請(qǐng)求,觸發(fā)所述控制設(shè)備根據(jù) 所述配置信息確定所述第一 TCP連接的優(yōu)先等級(jí),以便于所述控制設(shè)備根據(jù)所述第一 TCP 連接的優(yōu)先等級(jí)確定與所述第一 TCP連接對(duì)應(yīng)的所述第一 CPU的標(biāo)識(shí)。12. 根據(jù)權(quán)利要求10所述的TOE,其特征在于, 所述接收單元,還用于接收所述第一 CPU發(fā)送的所述第一地址信息; 所述存儲(chǔ)單元,還用于將所述接收單元中的所述第一地址信息和所述第一 TCP連接的 對(duì)應(yīng)關(guān)系存儲(chǔ)至所述連接信息表中,以建立所述第一地址信息與所述第一 TCP連接的對(duì)應(yīng) 關(guān)系。13. 根據(jù)權(quán)利要求9至12中任一項(xiàng)所述的TOE,其特征在于,所述TOE還包括封裝單元, 其中, 所述接收單元,還用于接收所述第一 CPU發(fā)送的第二地址信息,所述第二地址信息用 于指示待發(fā)送數(shù)據(jù)在所述內(nèi)存中的存儲(chǔ)位置;并根據(jù)所述第二地址信息從所述內(nèi)存中獲取 所述待發(fā)送數(shù)據(jù); 所述封裝單元,用于將所述接收單元中的所述待發(fā)送數(shù)據(jù)封裝成所述第二TCP報(bào)文; 所述發(fā)送單元,還用于在所述第一 TCP連接上發(fā)送所述封裝單元中的所述第二TCP報(bào) 文。14. 一種控制設(shè)備,其特征在于,包括: 確定單元,用于在接收到傳輸控制協(xié)議卸載引擎TOE發(fā)送的第二中斷請(qǐng)求之后,貝lj從N 個(gè)CPU中確定一個(gè)CPU為第一 CPU,所述第一 CPU用于處理第一傳輸控制協(xié)議TCP連接上傳 輸?shù)臄?shù)據(jù),N多1 ; 指示單元,用于向所述確定單元中確定的所述第一 CPU發(fā)送指示信息,所述指示信息 用于指示所述第一 CPU處理在所述第一 TCP連接上傳輸?shù)臄?shù)據(jù)。15. 根據(jù)權(quán)利要求14所述的控制設(shè)備,其特征在于,所述CPU還包括獲取單元,其中, 所述獲取單元,用于獲取所述N個(gè)CPU的負(fù)載值; 所述確定單元,具體用于根據(jù)所述獲取單元中所述N個(gè)CPU的負(fù)載值,將負(fù)載值最小的 CHJ作為所述第一 CPU。16. 根據(jù)權(quán)利要求14所述的控制設(shè)備,其特征在于, 所述獲取單元,還用于接收所述TOE發(fā)送的配置信息,所述配置信息用于指示所述第 一 TCP連接的優(yōu)先等級(jí);并獲取所述N個(gè)CPU的負(fù)載值; 所述確定單元,具體用于若所述獲取單元中所述第一 TCP連接的優(yōu)先等級(jí)高于閾值, 則將負(fù)載值最小的CPU作為所述第一 CPU。
【文檔編號(hào)】H04L12/803GK106034084SQ201510115405
【公開日】2016年10月19日
【申請(qǐng)日】2015年3月16日
【發(fā)明人】祝磊, 張振興, 李東皤
【申請(qǐng)人】華為技術(shù)有限公司