專利名稱:一種多路服務(wù)器多緩沖區(qū)并行發(fā)包的性能優(yōu)化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)數(shù)據(jù)處理領(lǐng)域,具體涉及一種多路服務(wù)器多緩沖區(qū)并行發(fā)包的性 能優(yōu)化方法。
背景技術(shù):
在多路服務(wù)器(主板上有多個CPU的服務(wù)器)運行的網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng),一般需 要使用多線程模式,啟動和CPU個數(shù)相同的多個線程并行處理,每個線程處理一部分流量, 以便把每個CPU都利用起來。目前常用的技術(shù)方案中每個線程申請自己的報文緩沖區(qū),每個線程要發(fā)送的報 文,放到該線程的緩沖區(qū)中,發(fā)送出去。另外,在一般多路CPU的服務(wù)器上,每個CPU的內(nèi)存控制器直接連到一些內(nèi)存條 上,稱為本地內(nèi)存,主板上沒有和本地內(nèi)存直接相連的內(nèi)存,稱為遠地內(nèi)存。對服務(wù)器主板 上每個CPU來說,訪問本地內(nèi)存的效率要比遠地內(nèi)存高得多。在一般技術(shù)方案中,每個線程 申請報文緩沖區(qū)時,是在所有內(nèi)存中隨機申請的,無法保證盡量使用本地內(nèi)存提高效率。在一般操作系統(tǒng)中,應(yīng)用軟件的多個線程是在多個CPU上隨機調(diào)度的,線程調(diào)度 會引起線程數(shù)據(jù)遷移和上下文切換的開銷,會影響到服務(wù)器系統(tǒng)性能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種多路服務(wù)器多緩沖區(qū)并行發(fā)包的性能優(yōu)化方法來提升 多線程多緩沖區(qū)應(yīng)用在多路服務(wù)器上的性能?!N多路服務(wù)器多緩沖區(qū)并行發(fā)包的性能優(yōu)化方法,包括內(nèi)核驅(qū)動和應(yīng)用接口庫 文件,實現(xiàn)方法如下A、驅(qū)動加載時,根據(jù)預(yù)先設(shè)定的線程個數(shù),為每個線程從對應(yīng)的CPU上申請本地 內(nèi)存,作為報文緩沖區(qū);B、應(yīng)用軟件的線程第一次調(diào)用接口庫中的API接口時,首先把內(nèi)核空間的對應(yīng)編 號的緩沖區(qū)映射到該應(yīng)用的用戶空間,然后把自己綁定到對應(yīng)編號的CPU上;C、每個線程發(fā)送報文時,在自己對應(yīng)的緩沖區(qū)中寫入報文,這個過程中,線程與 CPU綁定,不會在CPU之間遷移,報文緩沖區(qū)為該CPU的本地內(nèi)存,不會產(chǎn)生訪問遠地內(nèi)存的 開銷。本發(fā)明的一種優(yōu)選技術(shù)方案在于在所述A步驟中線程編號與CPU編號是固定的 對應(yīng)關(guān)系,把線程編號對CPU個數(shù)取模,作為該線程對應(yīng)的CPU編號,使得線程個數(shù)大于CPU 個數(shù)時,一個CPU上的多個線程和多個報文緩沖區(qū)的編號,仍然與CPU編號有固定對應(yīng)關(guān)系。本發(fā)明有效避免了 CPU訪問遠地內(nèi)存和線程在多個CPU上調(diào)度的開銷,提高了多 線程發(fā)包的效率。
圖1是本發(fā)明系統(tǒng)邏輯結(jié)構(gòu) 具體實施方案本發(fā)明是基于多路CPU的服務(wù)器,包含內(nèi)核驅(qū)動和應(yīng)用接口庫的系統(tǒng),可實現(xiàn) CPU、緩沖區(qū)和線程的緊密結(jié)合。驅(qū)動軟件負責(zé)分配發(fā)送報文使用的緩沖區(qū),需要在內(nèi)核中為每一個線程申請一個 報文緩沖區(qū),因為在內(nèi)核中申請,所以申請內(nèi)存時,可以通過參數(shù)指定內(nèi)存的相連的CPU號 為線程編號,也就是說,為線程0申請0號CPU上的本地內(nèi)存,為線程1申請1號CPU上的 本地內(nèi)存。接口庫軟件在每個線程第一次調(diào)用發(fā)送報文的API接口時,把線程綁定到與線程 號相對應(yīng)的CPU上。該發(fā)明的實現(xiàn)方法和過程如下(1)驅(qū)動為每個線程對應(yīng)的CPU申請本地內(nèi)存作為報文緩沖區(qū)。驅(qū)動加載時,根據(jù)預(yù)先設(shè)定的線程個數(shù),為每個線程從對應(yīng)的CPU上申請本地內(nèi) 存,作為報文緩沖區(qū)。線程編號與CPU編號是固定的對應(yīng)關(guān)系,把線程編號對CPU個數(shù)取模, 作為該線程對應(yīng)的CPU編號,這樣使得線程個數(shù)大于CPU個數(shù)時,一個CPU上的多個線程和 多個報文緩沖區(qū)的編號,仍然與CPU編號有固定對應(yīng)關(guān)系。(2)接口庫映射報文緩沖區(qū),綁定對應(yīng)的CPU。應(yīng)用軟件的線程第一次調(diào)用接口庫中的API接口時,首先把內(nèi)核空間的對應(yīng)編號 的緩沖區(qū)映射到該應(yīng)用的用戶空間,然后把自己綁定到對應(yīng)編號的CPU上。(3)線程并行發(fā)送報文。每個線程發(fā)送報文時,在自己對應(yīng)的緩沖區(qū)中寫入報文,這個過程中,線程與CPU 綁定,不會在CPU之間遷移,報文緩沖區(qū)是該CPU的本地內(nèi)存,不會產(chǎn)生訪問遠地內(nèi)存的開 銷。權(quán)利要求
1.一種多路服務(wù)器多緩沖區(qū)并行發(fā)包的性能優(yōu)化方法,其特征在于包括內(nèi)核驅(qū)動和 應(yīng)用接口庫文件,實現(xiàn)方法如下A、驅(qū)動加載時,根據(jù)預(yù)先設(shè)定的線程個數(shù),為每個線程從對應(yīng)的CPU上申請本地內(nèi)存, 作為報文緩沖區(qū);B、應(yīng)用軟件的線程第一次調(diào)用接口庫中的API接口時,首先把內(nèi)核空間的對應(yīng)編號的 緩沖區(qū)映射到該應(yīng)用的用戶空間,然后把自己綁定到對應(yīng)編號的CPU上;C、每個線程發(fā)送報文時,在自己對應(yīng)的緩沖區(qū)中寫入報文,這個過程中,線程與CPU綁 定,不會在CPU之間遷移,報文緩沖區(qū)為該CPU的本地內(nèi)存,不會產(chǎn)生訪問遠地內(nèi)存的開銷。
2.如權(quán)利要求1所述一種多路服務(wù)器多緩沖區(qū)并行發(fā)包的性能優(yōu)化方法,其特征在 于在所述A步驟中線程編號與CPU編號是固定的對應(yīng)關(guān)系,把線程編號對CPU個數(shù)取模, 作為該線程對應(yīng)的CPU編號,使得線程個數(shù)大于CPU個數(shù)時,一個CPU上的多個線程和多個 報文緩沖區(qū)的編號,仍然與CPU編號有固定對應(yīng)關(guān)系。
全文摘要
本發(fā)明提供了一種多路服務(wù)器多緩沖區(qū)并行發(fā)包的性能優(yōu)化方法。驅(qū)動軟件負責(zé)分配發(fā)送報文使用的緩沖區(qū),需要在內(nèi)核中為每一個線程申請一個報文緩沖區(qū),因為在內(nèi)核中申請,所以申請內(nèi)存時,可以通過參數(shù)指定內(nèi)存的相連的CPU號為線程編號,也就是說,為線程0申請0號CPU上的本地內(nèi)存,為線程1申請1號CPU上的本地內(nèi)存。接口庫軟件在每個線程第一次調(diào)用發(fā)送報文的API接口時,把線程綁定到與線程號相對應(yīng)的CPU上。有效避免了CPU訪問遠地內(nèi)存和線程在多個CPU上調(diào)度的開銷,提高了多線程發(fā)包的效率。
文檔編號H04L12/24GK102045199SQ201010597758
公開日2011年5月4日 申請日期2010年12月17日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者劉興奎, 劉朝輝, 劉燦, 李鋒偉, 竇曉光 申請人:天津曙光計算機產(chǎn)業(yè)有限公司