專利名稱:一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)數(shù)據(jù)處理領(lǐng)域,具體涉及一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法。
背景技術(shù):
在網(wǎng)絡(luò)數(shù)據(jù)分析系統(tǒng)中,往往在一個(gè)硬件平臺(tái)上運(yùn)行多個(gè)應(yīng)用,也就是說需要多 個(gè)應(yīng)用軟件從同一個(gè)網(wǎng)卡向外發(fā)送報(bào)文。然而,在有些系統(tǒng)中,多個(gè)應(yīng)用是有優(yōu)先級(jí)的,當(dāng) 系統(tǒng)CPU計(jì)算資源緊張時(shí),低優(yōu)先級(jí)的應(yīng)用需要主動(dòng)丟棄一部分報(bào)文,把CPU計(jì)算資源讓給 高優(yōu)先級(jí)的應(yīng)用。目前經(jīng)常采用的技術(shù)方案是當(dāng)系統(tǒng)資源緊張時(shí),一般多應(yīng)用發(fā)包采取隨機(jī)丟包的 方式,每個(gè)應(yīng)用都可能隨機(jī)丟棄一些報(bào)文。但隨機(jī)丟包的方式,不能支持應(yīng)用的優(yōu)先級(jí),不能保證在CPU負(fù)載高時(shí),低優(yōu)先級(jí) 的應(yīng)用把計(jì)算資源讓給高優(yōu)先級(jí)應(yīng)用。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法,根據(jù)優(yōu)先級(jí)和當(dāng)前CPU 負(fù)載情況,讓應(yīng)用動(dòng)態(tài)主動(dòng)丟包,實(shí)現(xiàn)多應(yīng)用發(fā)包的優(yōu)先級(jí)管理。一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法,采用軟硬件結(jié)合的系統(tǒng),包括硬件網(wǎng)卡、驅(qū)動(dòng) 軟件、接口庫軟件,步驟如下A、硬件網(wǎng)卡的PCI控制器向主機(jī)注冊(cè)PCI空間;B、驅(qū)動(dòng)軟件為每一個(gè)應(yīng)用申請(qǐng)一片物理地址連續(xù)的內(nèi)存,作為發(fā)送報(bào)文的緩沖 區(qū),把緩沖區(qū)的物理地址和長度寫入PCI空間的對(duì)應(yīng)寄存器,并設(shè)置硬件的寫指針和應(yīng)用 軟件的讀指針為初始值0 ;C、驅(qū)動(dòng)軟件申請(qǐng)一塊內(nèi)存區(qū)域作為驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu),其中包含當(dāng)前CPU負(fù)載, 驅(qū)動(dòng)使用一個(gè)定時(shí)器函數(shù),每隔一個(gè)時(shí)間片計(jì)算一下CPU占用情況,寫入驅(qū)動(dòng)信息數(shù)據(jù)結(jié) 構(gòu)中;D、接口庫中的API接口被一個(gè)應(yīng)用調(diào)用時(shí),首先把內(nèi)核空間的該應(yīng)用的緩沖區(qū)和 硬件的PCI空間映射到該應(yīng)用的用戶空間,然后把驅(qū)動(dòng)信息結(jié)構(gòu)映射出來,查看當(dāng)前的CPU 負(fù)載情況;E、應(yīng)用軟件在調(diào)用接口庫打開設(shè)備時(shí),根據(jù)該應(yīng)用的優(yōu)先級(jí),在接口庫中預(yù)設(shè)一 個(gè)CPU負(fù)載情況的閾值;F、每個(gè)應(yīng)用在發(fā)送報(bào)文之前,先把驅(qū)動(dòng)信息結(jié)構(gòu)中的當(dāng)前CPU負(fù)載和該應(yīng)用優(yōu)先 級(jí)確定的CPU負(fù)載閾值相比較,如果當(dāng)前CPU負(fù)載已經(jīng)超過了該應(yīng)用的閾值,則主動(dòng)丟包; 如果可以發(fā)包,應(yīng)用就把報(bào)文寫入報(bào)文緩沖區(qū),根據(jù)報(bào)文長度,修改PCI空間的寫指針;G、硬件網(wǎng)卡輪詢PCI空間的每個(gè)應(yīng)用的緩沖區(qū)讀寫指針信息判斷硬件寫指針是 否等于軟件的讀指針,如果不相等,則說明讀指針和寫指針之間是新的報(bào)文,需要發(fā)送,則 從主機(jī)內(nèi)存的報(bào)文緩沖區(qū)中讀出報(bào)文,向網(wǎng)絡(luò)發(fā)送出去,并移動(dòng)讀指針;如果讀指針追上了寫指針,則說明緩沖區(qū)內(nèi)報(bào)文已經(jīng)全部讀出,則等待一個(gè)時(shí)間片后,進(jìn)行下一次輪詢。本發(fā)明的一種優(yōu)選技術(shù)方案在于A步驟中所述PCI空括包括報(bào)文緩沖區(qū)地址、長 度、硬件從緩沖區(qū)讀報(bào)文的讀指針、軟件向緩沖區(qū)寫報(bào)文的寫指針,根據(jù)預(yù)設(shè)的最大應(yīng)用軟 件個(gè)數(shù) ,為每一個(gè)應(yīng)用申請(qǐng)一套寄存器。本發(fā)明根據(jù)當(dāng)前CPU負(fù)載情況,動(dòng)態(tài)丟棄報(bào)文,實(shí)現(xiàn)多應(yīng)用發(fā)包的優(yōu)先級(jí)管理。
圖1是本發(fā)明的結(jié)構(gòu)圖
具體實(shí)施例方式本發(fā)明是一個(gè)軟硬件結(jié)合的系統(tǒng),包括硬件網(wǎng)卡、驅(qū)動(dòng)軟件、接口庫軟件。驅(qū)動(dòng)軟件負(fù)責(zé)分配發(fā)送報(bào)文使用的緩沖區(qū),需要為每一個(gè)應(yīng)用,在內(nèi)核中申請(qǐng)一 整片物理地址連續(xù)的內(nèi)存,作為該應(yīng)用發(fā)送報(bào)文的緩沖區(qū)。驅(qū)動(dòng)軟件還申請(qǐng)一塊內(nèi)存區(qū)域,保存驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu),其中包括當(dāng)前的CPU負(fù) 載。并使用定時(shí)器函數(shù),每隔一個(gè)時(shí)間片(比如1秒)計(jì)算一下當(dāng)前CPU的負(fù)載情況,寫入 驅(qū)動(dòng)信息的數(shù)據(jù)結(jié)構(gòu)中。硬件為每一個(gè)應(yīng)用,申請(qǐng)一套PCI空間寄存器,主要有報(bào)文緩沖區(qū)地址、長度、硬 件從緩沖區(qū)讀報(bào)文的讀指針、軟件向緩沖區(qū)寫報(bào)文的寫指針。硬件網(wǎng)卡輪詢PCI空間的每 個(gè)應(yīng)用的緩沖區(qū)讀寫指針信息,查看是否有新的報(bào)文需要發(fā)送,如果有,則從主機(jī)內(nèi)存的報(bào) 文緩沖區(qū)中讀出報(bào)文,向網(wǎng)絡(luò)發(fā)送出去。接口庫軟件在每個(gè)應(yīng)用調(diào)用發(fā)送報(bào)文的API接口時(shí),把報(bào)文緩沖區(qū)和PCI空間映 射到該應(yīng)用的用戶空間,并設(shè)置每個(gè)應(yīng)用的優(yōu)先級(jí)信息。應(yīng)用軟件調(diào)用接口庫API發(fā)送報(bào)文時(shí),接口庫根據(jù)該應(yīng)用的優(yōu)先級(jí)和當(dāng)前CPU負(fù) 載情況,決定是否丟棄報(bào)文,如果可以發(fā)送,就把報(bào)文寫入發(fā)送緩沖區(qū),通過寫PCI空間的 寄存器通知硬件。實(shí)現(xiàn)方法和過程如下(1)硬件網(wǎng)卡的PCI控制器向主機(jī)注冊(cè)PCI空間,其中定義發(fā)送報(bào)文相關(guān)的寄存器 地址,包括報(bào)文緩沖區(qū)地址、長度、硬件從緩沖區(qū)讀報(bào)文的讀指針、軟件向緩沖區(qū)寫報(bào)文的 寫指針,根據(jù)預(yù)設(shè)的最大應(yīng)用軟件個(gè)數(shù),為每一個(gè)應(yīng)用申請(qǐng)一套寄存器。(2)驅(qū)動(dòng)軟件申請(qǐng)報(bào)文緩沖區(qū)驅(qū)動(dòng)軟件為每一個(gè)應(yīng)用申請(qǐng)一片物理地址連續(xù)的內(nèi)存,作為發(fā)送報(bào)文的緩沖區(qū), 把緩沖區(qū)的物理地址和長度寫入PCI空間的對(duì)應(yīng)寄存器,并設(shè)置硬件的寫指針和應(yīng)用軟件 的讀指針為初始值0。(3)驅(qū)動(dòng)軟件定時(shí)計(jì)算CPU負(fù)載驅(qū)動(dòng)軟件申請(qǐng)一塊內(nèi)存區(qū)域作為驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu),其中包含當(dāng)前CPU負(fù)載,驅(qū) 動(dòng)使用一個(gè)定時(shí)器函數(shù),每隔一個(gè)時(shí)間片計(jì)算一下CPU專用情況,寫入驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu) 中。(4)接口庫映射報(bào)文緩沖區(qū)、PCI空間寄存器、驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu)接口庫中的API接口被一個(gè)應(yīng)用調(diào)用時(shí),首先把內(nèi)核空間的該應(yīng)用的緩沖區(qū)和硬件的PCI空間映射到該應(yīng)用的用戶空間,還把驅(qū)動(dòng)信息結(jié)構(gòu)映射處理,從中可以看到當(dāng)前 的CPU負(fù)載情況。(5)接口庫配置應(yīng)用優(yōu)先級(jí)應(yīng)用軟件在調(diào) 用接口庫打開設(shè)備時(shí),根據(jù)該應(yīng)用的優(yōu)先級(jí),在接口庫中預(yù)設(shè)一個(gè) CPU負(fù)載情況的閾值,比如高優(yōu)先級(jí)設(shè)置為80%,表示CPU負(fù)載超過80%丟包,低優(yōu)先級(jí)設(shè) 置為20 %,表示CPU負(fù)載超過20 %丟包。(6)應(yīng)用軟件發(fā)包每個(gè)應(yīng)用在發(fā)送報(bào)文之前,先把驅(qū)動(dòng)信息結(jié)構(gòu)中的當(dāng)前CPU負(fù)載和該應(yīng)用優(yōu)先級(jí) 確定的CPU負(fù)載閾值相比較,如果當(dāng)前CPU負(fù)載已經(jīng)超過了該應(yīng)用的閾值,比如應(yīng)用優(yōu)先級(jí) 的閾值是50%,當(dāng)前驅(qū)動(dòng)信息中顯示的CPU負(fù)載是60%,則主動(dòng)丟包。如果可以發(fā)包,應(yīng)用 就把報(bào)文寫入報(bào)文緩沖區(qū),根據(jù)報(bào)文長度,修改PCI空間的寫指針。(7)硬件發(fā)包硬件網(wǎng)卡輪詢PCI空間的每個(gè)應(yīng)用的緩沖區(qū)讀寫指針信息判斷硬件寫指針是否 等于軟件的讀指針,如果不相等,則說明讀指針和寫指針之間是新的報(bào)文,需要發(fā)送,則從 主機(jī)內(nèi)存的報(bào)文緩沖區(qū)中讀出報(bào)文,向網(wǎng)絡(luò)發(fā)送出去,并移動(dòng)讀指針。如果讀指針追上了寫 指針,則說明緩沖區(qū)內(nèi)報(bào)文已經(jīng)全部讀出,則等待一個(gè)時(shí)間片后,進(jìn)行下一次輪詢。
權(quán)利要求
1.一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法,其特征在于采用軟硬件結(jié)合的系統(tǒng),包括硬 件網(wǎng)卡、驅(qū)動(dòng)軟件、接口庫軟件,步驟如下A、硬件網(wǎng)卡的PCI控制器向主機(jī)注冊(cè)PCI空間;B、驅(qū)動(dòng)軟件為每一個(gè)應(yīng)用申請(qǐng)一片物理地址連續(xù)的內(nèi)存,作為發(fā)送報(bào)文的緩沖區(qū),把 緩沖區(qū)的物理地址和長度寫入PCI空間的對(duì)應(yīng)寄存器,并設(shè)置硬件的寫指針和應(yīng)用軟件的 讀指針為初始值0 ;C、驅(qū)動(dòng)軟件申請(qǐng)一塊內(nèi)存區(qū)域作為驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu),其中包含當(dāng)前CPU負(fù)載,驅(qū)動(dòng) 使用一個(gè)定時(shí)器函數(shù),每隔一個(gè)時(shí)間片計(jì)算一下CPU占用情況,寫入驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu)中;D、接口庫中的API接口被一個(gè)應(yīng)用調(diào)用時(shí),首先把內(nèi)核空間的該應(yīng)用的緩沖區(qū)和硬件 的PCI空間映射到該應(yīng)用的用戶空間,然后把驅(qū)動(dòng)信息結(jié)構(gòu)映射出來,查看當(dāng)前的CPU負(fù)載 情況;E、應(yīng)用軟件在調(diào)用接口庫打開設(shè)備時(shí),根據(jù)該應(yīng)用的優(yōu)先級(jí),在接口庫中預(yù)設(shè)一個(gè)CPU 負(fù)載情況的閾值;F、每個(gè)應(yīng)用在發(fā)送報(bào)文之前,先把驅(qū)動(dòng)信息結(jié)構(gòu)中的當(dāng)前CPU負(fù)載和該應(yīng)用優(yōu)先級(jí)確 定的CPU負(fù)載閾值相比較,如果當(dāng)前CPU負(fù)載已經(jīng)超過了該應(yīng)用的閾值,則主動(dòng)丟包;如果 可以發(fā)包,應(yīng)用就把報(bào)文寫入報(bào)文緩沖區(qū),根據(jù)報(bào)文長度,修改PCI空間的寫指針;G、硬件網(wǎng)卡輪詢PCI空間的每個(gè)應(yīng)用的緩沖區(qū)讀寫指針信息判斷硬件寫指針是否等 于軟件的讀指針,如果不相等,則說明讀指針和寫指針之間是新的報(bào)文,需要發(fā)送,則從主 機(jī)內(nèi)存的報(bào)文緩沖區(qū)中讀出報(bào)文,向網(wǎng)絡(luò)發(fā)送出去,并移動(dòng)讀指針;如果讀指針追上了寫指 針,則說明緩沖區(qū)內(nèi)報(bào)文已經(jīng)全部讀出,則等待一個(gè)時(shí)間片后,進(jìn)行下一次輪詢。
2.如權(quán)利要求1所述一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法,其特征在于A步驟中所述 PCI空括包括報(bào)文緩沖區(qū)地址、長度、硬件從緩沖區(qū)讀報(bào)文的讀指針、軟件向緩沖區(qū)寫報(bào)文 的寫指針,根據(jù)預(yù)設(shè)的最大應(yīng)用軟件個(gè)數(shù),為每一個(gè)應(yīng)用申請(qǐng)一套寄存器。
全文摘要
本發(fā)明提供了一種多應(yīng)用發(fā)包的優(yōu)先級(jí)管理方法。硬件網(wǎng)卡的PCI控制器向主機(jī)注冊(cè)PCI空間,驅(qū)動(dòng)軟件申請(qǐng)報(bào)文緩沖區(qū),構(gòu)造驅(qū)動(dòng)信息結(jié)構(gòu),驅(qū)動(dòng)軟件定時(shí)計(jì)算CPU負(fù)載,并記錄到驅(qū)動(dòng)信息結(jié)構(gòu)中,接口庫把報(bào)文緩沖區(qū)、PCI空間寄存器、驅(qū)動(dòng)信息數(shù)據(jù)結(jié)構(gòu)映射到每個(gè)應(yīng)用的進(jìn)程空間,并配置應(yīng)用優(yōu)先級(jí),應(yīng)用軟件發(fā)包時(shí),把自己的應(yīng)用優(yōu)先級(jí)和當(dāng)前cpu負(fù)載比較,如果超過負(fù)載閾值,則主動(dòng)丟包,否則由硬件把報(bào)文發(fā)送出去。本發(fā)明根據(jù)當(dāng)前CPU負(fù)載情況,動(dòng)態(tài)丟棄報(bào)文,實(shí)現(xiàn)多應(yīng)用發(fā)包的優(yōu)先級(jí)管理。
文檔編號(hào)H04L12/56GK102055671SQ20101059775
公開日2011年5月11日 申請(qǐng)日期2010年12月17日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者萬偉, 劉興彬, 劉朝輝, 劉燦, 李鋒偉 申請(qǐng)人:天津曙光計(jì)算機(jī)產(chǎn)業(yè)有限公司