亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種應用于具有多cpu和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法

文檔序號:6506266閱讀:246來源:國知局
一種應用于具有多cpu和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法
【專利摘要】本發(fā)明提供了一種應用于具有多CPU和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法,包括網(wǎng)卡驅(qū)動過程一和二,且在各個CPU中創(chuàng)建數(shù)據(jù)接收設備隊列和數(shù)據(jù)發(fā)送設備隊列;網(wǎng)卡驅(qū)動過程一包括:①在數(shù)據(jù)到達網(wǎng)卡時,產(chǎn)生硬件中斷,關(guān)閉硬件中斷,調(diào)用中斷處理進程;②將網(wǎng)卡添加至一CPU的數(shù)據(jù)接收設備隊列中;③重新開啟硬件中斷,設置軟中斷,中斷處理進程返回;網(wǎng)卡驅(qū)動過程二包括:軟中斷輪詢;對于軟中斷置位的CPU,先掃描其數(shù)據(jù)接收設備隊列,依次對該隊列中的網(wǎng)卡進行數(shù)據(jù)讀取處理,再依次對其數(shù)據(jù)發(fā)送設備隊列中的設備進行數(shù)據(jù)發(fā)送處理。本發(fā)明大大縮短了硬件中斷上半部分處理時間,并將硬件中斷下半部的處理任務分攤到各個CPU上,從而提高了系統(tǒng)性能。
【專利說明】—種應用于具有多CPU和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法
【技術(shù)領域】
[0001]本發(fā)明涉及通信【技術(shù)領域】,尤其涉及一種應用于具有多CPU和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法。
【背景技術(shù)】
[0002]通常,Iinux系統(tǒng)的網(wǎng)卡驅(qū)動過程主要包括兩部分。
[0003]如圖1所示,網(wǎng)卡驅(qū)動過程的上半部包括:
101、在來自通信對端的以太網(wǎng)數(shù)據(jù)傳輸?shù)奖径说木W(wǎng)卡后,系統(tǒng)產(chǎn)生硬件中斷,同時關(guān)閉硬件中斷,即此時不會再接收網(wǎng)絡中斷。
[0004]102、硬件中斷產(chǎn)生后,系統(tǒng)CPU調(diào)用上述網(wǎng)卡在open時注冊的中斷處理函數(shù),進行以下中斷處理:首先從網(wǎng)卡的數(shù)據(jù)寄存器中讀取所接收的以太網(wǎng)數(shù)據(jù);然后創(chuàng)建一塊緩存(skb_buf),將以太網(wǎng)數(shù)據(jù)寫入到該緩存中;之后將該緩存以結(jié)構(gòu)鏈表的方式掛入到上述網(wǎng)卡的接收隊列中。
[0005]網(wǎng)卡的接收隊列其實就是一個鏈表,是用來臨時存放skb_buf對象實例的;所有網(wǎng)卡在將接收到的數(shù)據(jù)寫入Skb_buf之后都會將此skb_buf鏈入到其接收隊列中,接收隊列中的各skb_buf將在網(wǎng)絡驅(qū)動過程的下半部分被取出發(fā)送至協(xié)議棧。
[0006]103、在網(wǎng)卡設備接收完數(shù)據(jù)之后,將該網(wǎng)卡掛到當前CPU的設備隊列中,然后設置軟中斷,等待在軟中斷中繼續(xù)處理數(shù)據(jù)。CPU的設備隊列用以維護當前所有需要處理的網(wǎng)絡設備。
[0007]104、重新開啟硬件中斷,此時系統(tǒng)可再次響應硬件中斷。
[0008]如圖2所示,網(wǎng)卡驅(qū)動過程的下半部包括:
201、系統(tǒng)在進行軟中斷輪詢時,由于在上半部設置了軟中斷,因此發(fā)現(xiàn)CPU的軟中斷被置位。
[0009]202、依次對CPU的設備隊列中各網(wǎng)卡設備所接收到的以太網(wǎng)數(shù)據(jù)進行處理:首先從CPU的設備隊列中取得網(wǎng)卡設備,再從該網(wǎng)卡設備的接收隊列中取得數(shù)據(jù)包,根據(jù)包頭內(nèi)容做相應的處理之后就將該數(shù)據(jù)包送往網(wǎng)絡協(xié)議棧。
[0010]203、數(shù)據(jù)處理完畢后,從CPU的設備隊列中移出數(shù)據(jù)處理完畢的網(wǎng)卡設備,同時關(guān)閉軟中斷。
[0011 ] 但是上述網(wǎng)卡驅(qū)動流程在應用于具有多個CPU和網(wǎng)卡的系統(tǒng)中時,上半部分中的關(guān)閉硬件中斷、CPU申請內(nèi)存及讀取寄存器中的數(shù)據(jù)、將數(shù)據(jù)寫入內(nèi)存中、將內(nèi)存以skb_buf結(jié)構(gòu)的形式掛入設備隊列、將該設備掛入到CPU維護的設備隊列中等等這一系列的操作將會耗費大量時間,使得系統(tǒng)對下一次硬件中斷處理將不及時。如果硬件中斷很頻繁,而此時系統(tǒng)處于硬件關(guān)中斷狀態(tài),即使系統(tǒng)中有其他CPU處于空閑狀態(tài),那中斷請求也得不到及時處理。因而,有必要對此驅(qū)動方法進行改進。

【發(fā)明內(nèi)容】
[0012]本發(fā)明的目的在于提供一種網(wǎng)卡驅(qū)動方法,應用于具有多CPU和網(wǎng)卡的系統(tǒng),縮短系統(tǒng)處于硬件中斷關(guān)閉狀態(tài)的時間,提高對新的硬件中斷的響應速度。
[0013]本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的:
一種應用于具有多CPU和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法,包括網(wǎng)卡驅(qū)動過程一和網(wǎng)卡驅(qū)動過程二,還包括步驟:在各個CPU的數(shù)據(jù)結(jié)構(gòu)中分別創(chuàng)建數(shù)據(jù)接收設備隊列和數(shù)據(jù)發(fā)送設備隊列,初始化為空;
所述網(wǎng)卡驅(qū)動過程一具體包括:
①在通信對端的以太網(wǎng)數(shù)據(jù)到達網(wǎng)卡時,產(chǎn)生硬件中斷,同時關(guān)閉硬件中斷,調(diào)用中斷處理進程;
②將所述網(wǎng)卡添加至一CPU的數(shù)據(jù)接收設備隊列中;
③重新開啟硬件中斷,同時設置所述網(wǎng)卡當前所處數(shù)據(jù)接收設備隊列所屬的CPU軟中斷,所述中斷處理進程返回;
所述網(wǎng)卡驅(qū)動過程二具體包括:
進行軟中斷輪詢;對于軟中斷置位的CPU,
先掃描其數(shù)據(jù)接收設備隊列,依次對該數(shù)據(jù)接收設備隊列中的每個網(wǎng)卡進行處理:先從設備寄存器中讀取相應的數(shù)據(jù),將數(shù)據(jù)打包后掛入當前網(wǎng)卡的數(shù)據(jù)接收鏈表中;然后從數(shù)據(jù)接收設備隊列中摘除當前網(wǎng)卡,并將當前網(wǎng)卡掛入一 CPU的數(shù)據(jù)發(fā)送設備隊列中;再依次對其數(shù)據(jù)發(fā)送設備隊列中的設備進行處理:將當前網(wǎng)卡的數(shù)據(jù)接收鏈表中的數(shù)據(jù)處理后發(fā)送至協(xié)議棧。
[0014]其中,所述步驟②,將所述網(wǎng)卡添加至一 CPU的數(shù)據(jù)接收設備隊列的過程進一步包括:
所述中斷處理進程輪詢各CPU,查看所述網(wǎng)卡存在于當前CPU的數(shù)據(jù)接收設備隊列還是數(shù)據(jù)發(fā)送設備隊列中,
若存在于當前CPU的數(shù)據(jù)接收設備隊列,則跳轉(zhuǎn)至步驟③;
若存在于當前CPU的數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡移到一 CPU的數(shù)據(jù)接收設備隊列后跳轉(zhuǎn)至步驟③;
若不存在于任一 CPU的數(shù)據(jù)接收設備隊列及數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡添加至一 CPU的數(shù)據(jù)接收設備隊列中,之后跳轉(zhuǎn)至步驟③。
[0015]其中,所述步驟②中,在中斷處理進程輪詢各CPU的過程中,若所述網(wǎng)卡存在于當前CPU的數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡移到負載最少的CPU的數(shù)據(jù)接收設備隊列后跳
轉(zhuǎn)至步驟③。
[0016]其中,所述步驟②中,在中斷處理進程輪詢各CPU的過程中,若所述網(wǎng)卡存在于當前CPU的數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡移到當前CPU的數(shù)據(jù)接收設備隊列后跳轉(zhuǎn)至步驟③。
[0017]其中,所述步驟②中,在中斷處理進程輪詢各CPU的過程中,若所述網(wǎng)卡不存在于任一 CPU的數(shù)據(jù)接收設備隊列及數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡添加至負載最少的CPU的數(shù)據(jù)接收設備隊列,之后跳轉(zhuǎn)至步驟③。
[0018]其中,所述網(wǎng)卡驅(qū)動過程二中,在將當前網(wǎng)卡從軟中斷置位的CPU的數(shù)據(jù)接收設備隊列中摘除后,將該網(wǎng)卡掛入負載最少的CPU的數(shù)據(jù)發(fā)送設備隊列中。[0019]其中,判定其數(shù)據(jù)發(fā)送設備隊列中設備數(shù)量最少的CPU為負載最少的CPU。
[0020]與現(xiàn)有技術(shù)相比,本發(fā)明實施例具有以下有益效果:
本發(fā)明實施例大大縮短了硬件中斷上半部分處理時間,從而能夠很快的處理其他中斷,并將硬件中斷下半部的處理任務分攤到各個CPU上,從而提高了系統(tǒng)性能,尤其對硬件中斷共享這種情況,系統(tǒng)性能會顯著提高。
【專利附圖】

【附圖說明】
[0021]圖1是現(xiàn)有技術(shù)中網(wǎng)卡驅(qū)動方法的上半部分流程圖。
[0022]圖2是現(xiàn)有技術(shù)中網(wǎng)卡驅(qū)動方法的下半部分流程圖。
[0023]圖3是本發(fā)明實施例中網(wǎng)卡驅(qū)動方法的上半部分流程圖。
[0024]圖4是本發(fā)明實施例中網(wǎng)卡驅(qū)動方法的下半部分流程圖。
【具體實施方式】
[0025]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0026]根據(jù)網(wǎng)卡驅(qū)動分為上下兩部分的設計思想,為了能夠快速響應網(wǎng)絡硬件中斷,需要再次壓縮中斷上半部的處理時間?,F(xiàn)有技術(shù)中上半部的處理操作為申請內(nèi)存(SKB)、讀取寄存器,將讀取內(nèi)容做簡單操作之后放入設備的接收隊列中,再將設備加入CPU的設備隊列中。本發(fā)明的改進方法是,只執(zhí)行最后一步,即將中斷設備添加到CPU的設備隊列后,便重新開啟硬件中斷,讓中斷處理例程返回就行了,所有剩下的處理放在下半部執(zhí)行。
[0027]為了實現(xiàn)上述改進方法,本實施例中需要在CPU的數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建兩個設備隊列,分別為數(shù)據(jù)接收設備隊列(以下簡稱隊列A)和數(shù)據(jù)發(fā)送設備隊列(以下簡稱隊列B),隊列A用以掛載需要從網(wǎng)卡寄存器中讀取數(shù)據(jù)的網(wǎng)卡設備,隊列B用以掛載已經(jīng)從寄存器中讀取出數(shù)據(jù)繽并等待將數(shù)據(jù)發(fā)送至協(xié)議棧的網(wǎng)卡設備。具體地,在網(wǎng)卡設備需要從寄存器中讀取數(shù)據(jù)時,將該網(wǎng)卡設備掛到隊列A中,在網(wǎng)卡設備成功讀取數(shù)據(jù)之后將其從隊列A移至隊列B中,在網(wǎng)卡設備所讀取的數(shù)據(jù)發(fā)送至協(xié)議棧之后將其從隊列B中移除。本實施例中,隊列A的優(yōu)先級比隊列B的要高,隊列A中的網(wǎng)卡設備全部處理完之后再處理隊列B中的設備。在隊列A中摘除設備時,可以根據(jù)當前CPU的負載情況,將設備掛到其他CPU的隊列B中,由其他CPU處理數(shù)據(jù),這樣可以形成三級流水線的模式,理論上可以提高系統(tǒng)性能。
[0028]請參閱圖3,本實施例中網(wǎng)卡驅(qū)動的上半部流程具體為:
301、以太網(wǎng)數(shù)據(jù)包到達網(wǎng)卡,產(chǎn)生硬件中斷,同時關(guān)閉硬件中斷,調(diào)用中斷處理進程進行中斷處理。
[0029]302、中斷處理進程輪詢CPU,判斷該網(wǎng)卡設備存在于哪個CPU的隊列A或者隊列B中。由于系統(tǒng)中不會有特別多的CPU,也不會有特別多的網(wǎng)卡設備(包括虛擬網(wǎng)絡設備),因而此輪詢操作不會影響性能。
[0030]判斷結(jié)果存在以下幾種情況:
Cl)設備在隊列A中,則跳轉(zhuǎn)到步驟303 ;
(2)設備在隊列B中,則先將該設備移到隊列A中,再跳轉(zhuǎn)到步驟303 ; (3)設備不在隊列A或隊列B中,則先將該設備掛到當前CPU的隊列A中,再跳轉(zhuǎn)到步驟 303。
[0031]303、重新開啟硬件中斷,設置軟中斷,中斷處理進程返回。
[0032]請參閱圖4,本實施例中網(wǎng)卡驅(qū)動的下半部流程具體為:
401、軟中斷輪詢。判斷當前CPU的軟中斷是否置位,未置位則查詢下一個CPU。
[0033]402、如當前CPU已置位,則掃描其設備隊列A。
[0034](I)若隊列A不為空,則依次處理該隊列中的每一個設備后再跳轉(zhuǎn)至步驟403:先讀取設備寄存器,將數(shù)據(jù)組織成包的格式掛入到該設備的接收隊列(即該設備自己維護的一個數(shù)據(jù)接收鏈表)中;然后從隊列A中摘除該設備,并尋找負載輕的CPU,將該設備掛入負載輕的CPU的隊列B中??梢酝ㄟ^查看CPU的設備隊列B中掛載的設備數(shù)量來判斷CPU的
負載輕重。
[0035](2)若隊列A為空,那么直接跳轉(zhuǎn)至步驟403。
[0036]403、對當前CPU的隊列B中設備進行處理,處理流程和現(xiàn)有技術(shù)中流程一樣,將數(shù)據(jù)簡單的處理一下就送往協(xié)議棧。
[0037]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種應用于具有多CPU和網(wǎng)卡的系統(tǒng)的網(wǎng)卡驅(qū)動方法,包括網(wǎng)卡驅(qū)動過程一和網(wǎng)卡驅(qū)動過程二,其特征在于,還包括步驟:在各個CPU的數(shù)據(jù)結(jié)構(gòu)中分別創(chuàng)建數(shù)據(jù)接收設備隊列和數(shù)據(jù)發(fā)送設備隊列,初始化為空; 所述網(wǎng)卡驅(qū)動過程一具體包括: ①在通信對端的以太網(wǎng)數(shù)據(jù)到達網(wǎng)卡時,產(chǎn)生硬件中斷,同時關(guān)閉硬件中斷,調(diào)用中斷處理進程; ②將所述網(wǎng)卡添加至一CPU的數(shù)據(jù)接收設備隊列中; ③重新開啟硬件中斷,同時設置所述網(wǎng)卡當前所處數(shù)據(jù)接收設備隊列所屬的CPU軟中斷,所述中斷處理進程返回; 所述網(wǎng)卡驅(qū)動過程二具體包括: 進行軟中斷輪詢;對于軟中斷置位的CPU, 先掃描其數(shù)據(jù)接收設備隊列,依次對該數(shù)據(jù)接收設備隊列中的每個網(wǎng)卡進行處理:先從設備寄存器中讀取相應的數(shù)據(jù),將數(shù)據(jù)打包后掛入當前網(wǎng)卡的數(shù)據(jù)接收鏈表中;然后從數(shù)據(jù)接收設備隊列中摘除當前網(wǎng)卡,并將當前網(wǎng)卡掛入一 CPU的數(shù)據(jù)發(fā)送設備隊列中; 再依次對其數(shù)據(jù)發(fā)送設備隊列中的設備進行處理:將當前網(wǎng)卡的數(shù)據(jù)接收鏈表中的數(shù)據(jù)處理后發(fā)送至協(xié)議棧。
2.如權(quán)利要求1所述的網(wǎng)卡驅(qū)動方法,其特征在于,所述步驟②,將所述網(wǎng)卡添加至一CPU的數(shù)據(jù)接收設備隊列的過程進一步包括: 所述中斷處理進程輪詢各CPU,查看所述網(wǎng)卡存在于當前CPU的數(shù)據(jù)接收設備隊列還是數(shù)據(jù)發(fā)送設備隊列中, 若存在于當前CPU的數(shù)據(jù)接收設備隊列,則跳轉(zhuǎn)至步驟③; 若存在于當前CPU的數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡移到一 CPU的數(shù)據(jù)接收設備隊列后跳轉(zhuǎn)至步驟③; 若不存在于任一 CPU的數(shù)據(jù)接收設備隊列及數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡添加至一 CPU的數(shù)據(jù)接收設備隊列中,之后跳轉(zhuǎn)至步驟③。
3.如權(quán)利要求2所述的網(wǎng)卡驅(qū)動方法,其特征在于,所述步驟②中,在中斷處理進程輪詢各CPU的過程中,若所述網(wǎng)卡存在于當前CPU的數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡移到負載最少的CPU的數(shù)據(jù)接收設備隊列后跳轉(zhuǎn)至步驟③。
4.如權(quán)利要求2所述的網(wǎng)卡驅(qū)動方法,其特征在于,所述步驟②中,在中斷處理進程輪詢各CPU的過程中,若所述網(wǎng)卡存在于當前CPU的數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡移到當前CPU的數(shù)據(jù)接收設備隊列后跳轉(zhuǎn)至步驟③。
5.如權(quán)利要求2所述的網(wǎng)卡驅(qū)動方法,其特征在于,所述步驟②中,在中斷處理進程輪詢各CPU的過程中,若所述網(wǎng)卡不存在于任一 CPU的數(shù)據(jù)接收設備隊列及數(shù)據(jù)發(fā)送設備隊列中,則將該網(wǎng)卡添加至負載最少的CPU的數(shù)據(jù)接收設備隊列,之后跳轉(zhuǎn)至步驟③。
6.如權(quán)利要求1所述的網(wǎng)卡驅(qū)動方法,其特征在于,所述網(wǎng)卡驅(qū)動過程二中,在將當前網(wǎng)卡從軟中斷置位的CPU的數(shù)據(jù)接收設備隊列中摘除后,將該網(wǎng)卡掛入負載最少的CPU的數(shù)據(jù)發(fā)送設備隊列中。
7.如權(quán)利要求3、5或6所述的網(wǎng)卡驅(qū)動方法,其特征在于,該方法中,判定其數(shù)據(jù)發(fā)送設備隊列中設備數(shù)量最少的CPU為負載最少的CPU。
【文檔編號】G06F13/10GK103440213SQ201310309455
【公開日】2013年12月11日 申請日期:2013年7月23日 優(yōu)先權(quán)日:2013年7月23日
【發(fā)明者】劉炳偉, 王金桂 申請人:深圳市共進電子股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1