版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、這份文件的復(fù)印件屬于yfydz。它由GPL出版,可以自由復(fù)制。重印時請保持文件的完整性。嚴(yán)禁將其用于任何商業(yè)目的。MSN : yfydz_資料來源:1.前言linux內(nèi)核為流量控制提供了相關(guān)的處理功能,相關(guān)的代碼在net/sched目錄中。應(yīng)用層的控制是通過iproute2軟件包中的tc實現(xiàn)的。tc和sched之間的關(guān)系就像iptables和netfilter之間的關(guān)系一樣。一個是用戶層接口,另一個是具體實現(xiàn)。對于tc的使用,可以詳細(xì)了解Linux高級路由方法。本文主要分析了在內(nèi)核中的具體實現(xiàn)。流量控制包括:流量控制算法的幾
2、個部分,通常在net/sched/sch _ *中實現(xiàn)。默認(rèn)是先進先出,這是一個典型的黑盒模式。外部只能看到兩個操作,即隊列進入和隊列退出。流量控制結(jié)構(gòu)的操作和處理;并且通過以下方式控制用戶空間Rtnetlink。以下內(nèi)核代碼版本是。2.控制入口2.1控制條目linux流控制功能反映為網(wǎng)卡設(shè)備的屬性,表明它是網(wǎng)絡(luò)的最低處理部分,與上層網(wǎng)絡(luò)協(xié)議棧:無關(guān)/* include/linux/netdevice.h */struct網(wǎng)絡(luò)設(shè)備./*緩存行主要用于隊列傳輸路徑(qdisc)*/*設(shè)備隊列鎖定*/spin lock _ t queue _ lock _ _ _ _ _ cach
3、e line _ aligned _ in _ SMP。/這是發(fā)送數(shù)據(jù)時的隊列處理結(jié)構(gòu)Qdisc*qdisc。/網(wǎng)卡停止時保存網(wǎng)卡活動的隊列處理方法結(jié)構(gòu)Qdisc * qdisc _ sleeping/網(wǎng)卡處理的數(shù)據(jù)隊列鏈表結(jié)構(gòu)列表_headqdisc_list。/最大隊列長度無符號longtx _ queue _ len/*每個隊列允許的最大幀數(shù)*/*部分傳輸?shù)腉SO數(shù)據(jù)包。*/struct sk _ buff * gso _ skb/*入口路徑同步器*/輸入流量控制鎖spinlock _ tingress _ lock/這是接收數(shù)據(jù)時的隊列處理結(jié)構(gòu)Qdisc * Qdisc _ entry
4、;.2.1.2輸出流量控制當(dāng)數(shù)據(jù)發(fā)送出去進行流量控制處理時,上層的所有處理都已經(jīng)完成,數(shù)據(jù)包已經(jīng)傳送到網(wǎng)卡設(shè)備進行傳輸,與流量控制處理相關(guān)的網(wǎng)絡(luò)數(shù)據(jù)的導(dǎo)出功能為dev _ queue _ xmit();如果它正在接收流量控制,則數(shù)據(jù)剛剛從網(wǎng)卡設(shè)備接收到,還沒有提交給網(wǎng)絡(luò)的上層進行處理。然而,網(wǎng)卡的輸入流控制不是必需的,并且默認(rèn)情況下不執(zhí)行流控制。輸入流控制入口函數(shù)是ing_filter()函數(shù),由skb_receive_skb()調(diào)用。/* net/core/dev.c */int dev_queue_xmit(結(jié)構(gòu)sk_buff *skb)struct net _ device * dev=
5、skb-dev;結(jié)構(gòu)Qdisc * RC=-ENOMEM;./* qdisc的更新由queue_lock序列化。* Qdisc指向的結(jié)構(gòu)Qdisc現(xiàn)在是一個*區(qū)域協(xié)調(diào)股結(jié)構(gòu)-可以在不獲取的情況下獲取*鎖(但結(jié)構(gòu)可能已經(jīng)過時。)的解放* qdisc將被推遲,直到它知道沒有*更多參考。*如果qdisc具有入隊功能,我們?nèi)匀恍枰?在調(diào)用隊列_鎖之前保持隊列_鎖,因為隊列_鎖*還序列化對設(shè)備隊列的訪問。*/獲取網(wǎng)卡的qdisc指針,它不需要加鎖,是每個CPU的私有數(shù)據(jù)。q=rcu _ de reference(dev-q disc);#ifdef CONFIG_NET_CLS_ACTskb-
6、TC _ verd=SET _ TC _ AT(skb-TC _ verd,AT _ EXCEPT);#endif/如果隊列輸入不為空,則將數(shù)據(jù)包排隊/對于物理網(wǎng)卡設(shè)備,默認(rèn)情況下使用先進先出qdisc。此成員函數(shù)不為空,僅使用邏輯網(wǎng)卡/只能為空如果(q-入隊)/*抓取設(shè)備隊列*/鎖定自旋鎖(開發(fā)隊列鎖);/dev-qdisc可以直接訪問q=dev-q disc;如果(q-入隊)/進入團隊進行處理RC=q-入隊(skb,q);/運行流量控制和隊列操作qdisc _ run(dev);旋轉(zhuǎn)解鎖(開發(fā)隊列鎖定);rc=rc=NET_XMIT_BYPASS?NET _ XMIT _ SUCCESS
7、: rc出去;旋轉(zhuǎn)解鎖(開發(fā)隊列鎖定);./團隊外操作靜態(tài)內(nèi)嵌void qdisc _ run(struct net _ device * dev)如果(!netif_queue_stopped(dev)!測試和設(shè)置位(_ _鏈接_狀態(tài)_ QDISC _運行,開發(fā)狀態(tài))_ _ qdisc _ run(dev);/* net/sched/sch_generic.c */void _ _ qdisc _ run(struct net _ device * dev)/如果是noop_qdisc流量控制,實際上是丟包if(不太可能(dev-qdisc=noop_qdisc)出去;同時(qdisc_re
8、start(dev) 0!netif_queue_stopped(dev)/*無*/;out:清零位(_ _鏈接_狀態(tài)_ QDISC _運行,開發(fā)狀態(tài));/*踢腿裝置。請注意,該過程可以由看門狗定時器調(diào)用,因此我們這里不檢查dev-tbusy標(biāo)志。返回3360 0 -隊列為空。0 -隊列不為空,但已節(jié)流。0 -隊列不為空。設(shè)備已被節(jié)流,如果開發(fā)失敗!=0 .注:在本地禁用的進程隊列鎖定下調(diào)用。*/靜態(tài)內(nèi)聯(lián)int qdisc_restart(結(jié)構(gòu)網(wǎng)絡(luò)_設(shè)備*開發(fā))結(jié)構(gòu)Qdisc *q=dev-qdisc .struct sk _ buff * skb/*出隊數(shù)據(jù)包*/數(shù)據(jù)包出隊if(skb=de
9、v-GSO _ skb)| |(skb=q-出列(q)無符號nolock=(開發(fā)特性NETIF _ F _ LLTX);dev-gso_skb=空;.2.1.3輸入流控輸入流控好象不是必須的,目前內(nèi)核需要配置CLS法案選項才起作用:/* net/core/dev.c */int netif_receive_skb(結(jié)構(gòu)sk_buff *skb).#ifdef CONFIG_NET_CLS_ACTif (pt_prev) ret=deliver_skb(skb,pt_prev,orig _ dev);pt_prev=空;/*在*/其他skb-TC _ verd=SET _ TC _ OK2 UN
10、GE(skb-TC _ verd);ret=ing _ filter(skb);if(ret=TC _ ACT _ SHOT | |(ret=TC _ ACT _ STORE)kfree _ skb(skb);出去;skb-TC _ verd=0;ncls:#endif.靜態(tài)int _ filter(struct sk _ buff * skb)結(jié)構(gòu)Qdisc *q .struct net _ device * dev=skb-dev;內(nèi)部結(jié)果=正常;/如果網(wǎng)卡設(shè)備有輸入流控處理if(dev-qdisc _ entry)_ _ u32 TTL=(_ _ u32)RTTL;如果(最大紅色循環(huán)時間
11、)printk(KERN_WARNING Redir循環(huán)檢測到丟棄數(shù)據(jù)包(%s-%)s)n ,skb-input_dev-name,skb-dev-name);返回動作鏡頭/設(shè)置數(shù)據(jù)包的TC參數(shù)skb-TC _ verd=SET _ TC _ RTTL(skb-TC _ verd,TTL);skb-TC _ verd=SET _ TC _ AT(skb-TC _ verd,AT _ ENTRY);自旋鎖(開發(fā)入口鎖);if(q=dev-qdisc _ entry)!=空)/數(shù)據(jù)入隊結(jié)果=q-入隊(skb,q);旋轉(zhuǎn)解鎖(開發(fā)入口鎖定);返回結(jié)果;2.2初始化本節(jié)先跟蹤一下網(wǎng)卡設(shè)備的qdisc指
12、針是如何被賦值的,缺省賦值為何值。在網(wǎng)卡設(shè)備的初始化函數(shù)register_netdevice()函數(shù)中調(diào)用dev_init_scheduler()函數(shù)對網(wǎng)卡設(shè)備的流控隊列處理進行了初始化,也就是說每個網(wǎng)絡(luò)網(wǎng)卡設(shè)備的qdisc指針都不會是空的:/* net/sched/sch_gentric.c */void dev_init_scheduler(結(jié)構(gòu)網(wǎng)絡(luò)_設(shè)備*開發(fā))qdisc _ lock _ tree(dev);/處理發(fā)出數(shù)據(jù)的qdisc是必須的,而處理輸入數(shù)據(jù)的qdisc _ entry則不是必須的/缺省情況下的qdiscdev-qd disc=noop _ qd disc .dev-q
13、d光盤_ sleeping=noop _ qd光盤;初始化_列表_標(biāo)題(dev-q光盤_列表);qdisc _ unlock _ tree(dev);dev _ watchdog _ init(dev);當(dāng)然noop _ qd盤中的調(diào)度是不可用的,只進行丟包處理;網(wǎng)卡在激活(dev_open)時會調(diào)用dev_activate()函數(shù)重新對qdisc指針賦值,但未對qdisc _ entry賦值:/* net/sched/sch_generic.c */void dev _ activate(struct net _ device * dev)/*設(shè)備沒有附加排隊規(guī)則;為設(shè)備創(chuàng)建默認(rèn)設(shè)置,即pfifo_fast,哪個需要排隊和noqueue_qdisc虛擬接口*/如果當(dāng)前的qdisc_sleeping是noop _ qdisc,重新找一個流控操作指針i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工地國際工程項目管理方案
- 廢硅橡膠資源綜合利用項目環(huán)境影響報告書
- 城鄉(xiāng)廚余垃圾資源化利用項目節(jié)能評估報告
- 地下管網(wǎng)信息化巡檢方案
- 第13講 祝福(寒假預(yù)習(xí)講義)【含答案詳解】
- 城區(qū)供排水一體化及管網(wǎng)更新改造項目風(fēng)險評估報告
- 光伏電池片生產(chǎn)工藝改進
- 光伏系統(tǒng)不間斷供電方案
- 鋼結(jié)構(gòu)橋梁設(shè)計與施工方案
- 小學(xué)體育籃球課堂中游戲教學(xué)法的實證研究
- 2026年廣西出版?zhèn)髅郊瘓F有限公司招聘(98人)考試備考題庫附答案
- 設(shè)備技術(shù)員轉(zhuǎn)正述職報告
- 2026年數(shù)據(jù)管理局考試題庫及實戰(zhàn)解答
- 2025年上海師范大學(xué)馬克思主義基本原理概論期末考試筆試真題匯編
- 智啟萬物:全球AI應(yīng)用平臺市場全景圖與趨勢洞察報告
- 2025年高職植物保護(植物檢疫技術(shù))試題及答案
- 2026年中國科學(xué)院心理研究所國民心理健康評估發(fā)展中心招聘備考題庫及答案詳解(新)
- 藥物相互作用與不良反應(yīng)預(yù)防解析講座
- 2025年無人駕駛公共交通項目可行性研究報告
- 江蘇省2024年普通高中學(xué)業(yè)水平合格性考試數(shù)學(xué)試卷+答案
- 基于多模型構(gòu)建與數(shù)值模擬的禽流感傳播機制及防控策略研究
評論
0/150
提交評論