日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux qos 软件,linux下QOS:应用篇 - 博客 - 伯乐在线

發(fā)布時(shí)間:2023/12/19 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux qos 软件,linux下QOS:应用篇 - 博客 - 伯乐在线 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文出處: linuxDOS???歡迎分享原創(chuàng)到伯樂頭條

上一篇我們講了QOS的理論知識(shí),了解了它是做什么用的,以及設(shè)計(jì)模式,下面就以tc的應(yīng)用的更深入的理解qos.

Linux采用了基于對(duì)象的實(shí)現(xiàn)方法,qos還能保證對(duì)不同接口采用不同的策略,TC QOS有很多擁塞控制的機(jī)制默認(rèn)的是FIFo還有其他PQ、CQ、WFQ等.

策略類 用結(jié)構(gòu)體:Qdisc_ops表示。每個(gè)設(shè)備可以采用不同的策略對(duì)象,在設(shè)備和對(duì)象的關(guān)聯(lián)需要到Qdisc結(jié)構(gòu)體

通過上面的描述,整個(gè)TC的架構(gòu)也就出來了,發(fā)送數(shù)據(jù)包的流程應(yīng)該是這樣的:

(1) 上層協(xié)議開始發(fā)送數(shù)據(jù)包

(2) 獲得當(dāng)前設(shè)備所采用的策略對(duì)象

(3) 調(diào)用此對(duì)象的enqueue方法把數(shù)據(jù)包壓入隊(duì)列

(4) 調(diào)用此對(duì)象的dequeue方法從隊(duì)列中取出數(shù)據(jù)包

(5) 調(diào)用網(wǎng)卡驅(qū)動(dòng)的發(fā)送函數(shù)發(fā)送

并且在上一節(jié)我們已經(jīng)講了tc的三級(jí)樹型組織.這里不再貼圖. 還有一點(diǎn)注意的就是tc控發(fā)不空收.

下面就從tc的命令說起:

命令格式:

1

2

3

4

5

6

7

8

9tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

tcclass [ add | change | replace ] dev DEV parent qdisc-id [ classidclass-id ] qdisc [ qdisc specific parameters ]

tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id

tc [-s | -d ] qdisc show [ dev DEV ]

tc [-s | -d ]class show dev DEV tc filter show dev DEV

具體的配置流程如下:

Linux流量控制主要分為建立隊(duì)列、建立分類和建立過濾器三個(gè)方面。

基本實(shí)現(xiàn)步驟

(1) 針對(duì)網(wǎng)絡(luò)物理設(shè)備(如以太網(wǎng)卡eth0)綁定一個(gè)隊(duì)列QDisc;

(2) 在該隊(duì)列上建立分類class;

(3) 為每一分類建立一個(gè)基于路由的過濾器filter;

(4) 最后與過濾器相配合,建立特定的路由表等

1. tc 命令的基本用法

查看tc help 或者man tc

2. 針對(duì)不同算法的不同配置 (為什么這說,不同的策略算法,它的參數(shù)不一樣需要根據(jù)實(shí)際情況實(shí)際分析)

3. 無分類qdisc 和分類qdisc

(1) 無分類:

[p|b]fifo

使用最簡(jiǎn)單的qdisc,純粹的先進(jìn)先出。只有一個(gè)參數(shù):limit,用來設(shè)置隊(duì)列的長(zhǎng)度,pfifo是以數(shù)據(jù)包的個(gè)數(shù)為單位;bfifo是以字節(jié)數(shù)為單位。

pfifo_fast

在 編譯內(nèi)核時(shí),如果打開了高級(jí)路由器(AdvancedRouter)編譯選項(xiàng),pfifo_fast就是系統(tǒng)的標(biāo)準(zhǔn)QDISC。它的隊(duì)列包括三個(gè)波段(band)。在每個(gè)波段里面,使用先進(jìn)先出規(guī)則。而三個(gè)波段(band)的優(yōu)先級(jí)也不相同,band 0的優(yōu)先級(jí)最高,band 2的最低。如果band里面有數(shù)據(jù)包,系統(tǒng)就不會(huì)處理band1里面的數(shù)據(jù)包,band 1和band 2之間也是一樣。數(shù)據(jù)包是按照服務(wù)類型(Type ofService,TOS)被分配多三個(gè)波段(band)里面的

red

red是Random Early Detection(隨機(jī)早期探測(cè))的簡(jiǎn)寫。如果使用這種QDISC,當(dāng)帶寬的占用接近于規(guī)定的帶寬時(shí),系統(tǒng)會(huì)隨機(jī)地丟棄一些數(shù)據(jù)包。它非常適合高帶寬應(yīng)用。

sfq

sfq是Stochastic Fairness Queueing的簡(jiǎn)寫。它按照會(huì)話(session–對(duì)應(yīng)于每個(gè)TCP連接或者UDP流)為流量進(jìn)行排序,然后循環(huán)發(fā)送每個(gè)會(huì)話的數(shù)據(jù)包

tbf

tbf是Token Bucket Filter的簡(jiǎn)寫,適合于把流速降低到某個(gè)值 。

如果沒有可分類QDisc,不可分類QDisc只能附屬于設(shè)備的根。它們的用法如下:

tc qdisc add dev DEV root QDISC QDISC-PARAMETERS

要?jiǎng)h除一個(gè)不可分類QDisc,需要使用如下命令:

tc qdisc del dev DEV root

一個(gè)網(wǎng)絡(luò)接口上如果沒有設(shè)置QDisc,pfifo_fast就作為缺省的QDisc。

(2) 分類:

CBQ

CBQ 是Class Based

Queueing(基于類別排隊(duì))的縮寫。它實(shí)現(xiàn)了一個(gè)豐富的連接共享類別結(jié)構(gòu),既有限制(shaping)帶寬的能力,也具有帶寬優(yōu)先級(jí)管理的能力。帶

寬限制是通過計(jì)算連接的空閑時(shí)間完成的。空閑時(shí)間的計(jì)算標(biāo)準(zhǔn)是數(shù)據(jù)包離隊(duì)事件的頻率和下層連接(數(shù)據(jù)鏈路層)的帶寬

HTB

HTB是 Hierarchy Token

Bucket的縮寫。通過在實(shí)踐基礎(chǔ)上的改進(jìn),它實(shí)現(xiàn)了一個(gè)豐富的連接共享類別體系。使用HTB可以很容易地保證每個(gè)類別的帶寬,雖然它也允許特定的類可

以突破帶寬上限,占用別的類的帶寬。HTB可以通過TBF(Token Bucket Filter)實(shí)現(xiàn)帶寬限制,也能夠劃分類別的優(yōu)先級(jí)。

PRIO

PRIO QDisc不能限制帶寬,因?yàn)閷儆诓煌悇e的數(shù)據(jù)包是順序離隊(duì)的。使用PRIO

QDisc可以很容易對(duì)流量進(jìn)行優(yōu)先級(jí)管理,只有屬于高優(yōu)先級(jí)類別的數(shù)據(jù)包全部發(fā)送完畢,才會(huì)發(fā)送屬于低優(yōu)先級(jí)類別的數(shù)據(jù)包。為了方便管理,需要使用

iptables或者ipchains處理數(shù)據(jù)包的服務(wù)類型(Type Of Service,ToS)

class的操作原理:

類(Class)組成一個(gè)樹,每個(gè)類都只有一個(gè)父類,而一個(gè)類可以有多個(gè)子類。某些QDisc(例如:CBQ和HTB)允許在運(yùn)行時(shí)動(dòng)態(tài)添加類,而其它的QDisc(例如:PRIO)不允許動(dòng)態(tài)建立類。

允許動(dòng)態(tài)添加類的QDisc可以有零個(gè)或者多個(gè)子類,由它們?yōu)閿?shù)據(jù)包排隊(duì)。

此外,每個(gè)類都有一個(gè)葉子QDisc,默認(rèn)情況下,這個(gè)葉子QDisc使用pfifo的方式排隊(duì),我們也可以使用其它類型的QDisc代

替這個(gè)默認(rèn)的QDisc。而且,這個(gè)葉子葉子QDisc有可以分類,不過每個(gè)子類只能有一個(gè)葉子QDisc。

當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入一個(gè)分類QDisc,它會(huì)被歸入某個(gè)子類。我們可以使用以下三種方式為數(shù)據(jù)包歸類,不過不是所有的QDisc都能夠使用這三種方式。

其他:

顯示隊(duì)列情況 :

Tc qdisc ls dev eth0

顯示分類狀況

Tc class ls dev eth0更詳細(xì)的可以加 –s參數(shù)

顯示過濾器的狀況

Tc –s filter ls dev eth0

顯示路由的情況

Ip route

Qdisc的參數(shù):

parent major:minor 或者 root。 一個(gè)qdisc是根節(jié)點(diǎn)就是root,否則其他的情況指定parent。其中major:minor是class的handle id,每個(gè)class都要指定一個(gè)id用于標(biāo)識(shí)。

handle major: ,這個(gè)語法有點(diǎn)奇怪,是可選的,如果qdisc下面還要分類(多個(gè)class),則需要指定這個(gè)hanlde。對(duì)于root,通常是”1:”。

注意:對(duì)于tc命令中的qdiscs和classes,標(biāo)識(shí)handle(classid)的語法都是x:y,其中x是一個(gè)整數(shù)用來標(biāo)識(shí)一個(gè) qdisc,y是一個(gè)整數(shù),用來標(biāo)識(shí)屬于該qdisc的class。qdisc的handle的y值必須是0,class的handle的y值必須是非 0。通常”1:0″簡(jiǎn)寫為”1:”,也就是上面看到的寫法。

default minor-id,未分類(不能和filter匹配)的流量(默認(rèn)的)會(huì)被送到這個(gè)minor所指定的類(class id為major:minor-id)。

tc class … dev dev parent major:[minor] [ classid major:minor ] htb rate rate [ ceil rate ] burst bytes [ cburst bytes ] [ prio priority ]

Class的參數(shù):

parent major:minor,指定這個(gè)類的父節(jié)點(diǎn),父節(jié)點(diǎn)可以是Qdisc,也可以是Class,如果是Qdisc,那么就不用指定minor,這個(gè)是必須的參數(shù)。

classid major:minor,classid作為class的標(biāo)識(shí),這個(gè)是可選的。如果這個(gè)class沒有子節(jié)點(diǎn),就可以不指定。major是父qdisc的handle。

參數(shù)說明:

rate: 是一個(gè)類保證得到的帶寬值.如果有不只一個(gè)類,請(qǐng)保證所有子類總和是小于或等于父類.

prio:用來指示借用帶寬時(shí)的競(jìng)爭(zhēng)力,prio越小,優(yōu)先級(jí)越高,競(jìng)爭(zhēng)力越強(qiáng). 低優(yōu)先級(jí)的class會(huì)優(yōu)先匹配

ceil: ceil是一個(gè)類最大能得到的帶寬值。即可以借用的帶寬(默認(rèn)ceil=rate),根類是不允許被借用的. 這個(gè)借用在什么時(shí)候生效呢?如果父類有空余帶寬,最高可以分配給當(dāng)前class的值,默認(rèn)是和rate一樣。

Burst 突發(fā),突發(fā)的流量,即大于限制帶寬的時(shí)候 > rate < ceil ;允許以ceil的速率發(fā)送的字節(jié)數(shù),應(yīng)該至少和子類的burst最大值一樣。

cburst 允許以網(wǎng)口的最高速率發(fā)送的字節(jié)數(shù),應(yīng)該至少和子類的cburst最大值一樣。功能類似tbf中的peakrate,當(dāng)這個(gè)值限制很小時(shí),可以避免突發(fā)的流量,以避免瞬間速率超過ceil。

quantum 每輪當(dāng)前的class能發(fā)送的字節(jié)數(shù),默認(rèn)的計(jì)算quantum = rate / r2q. Quantum必須大于1500 小于 60000。

quantum只在class的流量超過了rate但是沒超過ceil時(shí)使用。quantum越小,帶寬共享的效果就越好。 r2q 用來計(jì)算quantum,r2q默認(rèn)是10。

我們先看一個(gè)實(shí)際class的分類圖:

下面我們就實(shí)際看幾個(gè)應(yīng)用的例子:

1. 多用戶ip帶寬平均分配問題

實(shí)際應(yīng)用場(chǎng)景為小區(qū)里,共享一根帶寬上網(wǎng)問題。假如實(shí)際帶寬為20m ;用戶數(shù)量為100,都在一個(gè)vlan里;

限制用戶下載帶寬200kbps ;gw;先看實(shí)際環(huán)境的布局:

我們把小區(qū)的部分放大:

1

2

3

4

5Tc qdisc del dev eth0 root

tc qdisc add dev eth0 root handle 1: htb r2q 1

tcclass add dev eth0 parent 1: classid 1:1 htb rate 20mbitceil 100mbit

tcclass add dev eth0 parent 1:1 classid 1:10 htb rate 200kbitceil 250kbit

tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.0/24 flowid 1:10

關(guān)于filter匹配策略,也可以用iptables的MARK,在tc里為fw,用法如下:

1

2tc filter add dev eth0 parent 1: protocol ip prio 10 handle 1 fw classid 10:10

iptables -t mangle -A POSTROUTING -d 192.168.1.0/24 -j MARK --set-mark 1

有時(shí)候?qū)τ谧臃诸惱镔Y源有可能被某一個(gè)會(huì)話一直占有而其他得不到分配,所以需要添加子隊(duì)列來實(shí)現(xiàn)資源公平分配:

1tc qdisc add dev eth1 parent 1:10 handle 101: sfq perturb 10

假如有兩個(gè)子網(wǎng)呢?平均分配這20M帶寬:

1

2

3

4

5

6

7

8

9

10

11Tc qdisc add dev eth0 root handle 1: htb r2q 1

Tcclass add dev eth0 parent 1: classid 1:1 htb rate 20mbitceil 100mbit

Tcclass add dev eth0 parent 1:1 classid 1:10 htb rate 10mbitceil 20mbit

Tcclass add dev eth0 parent 1:1 classid 1:20 htb rate 10mbitceil 20mbit

Tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10

Tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10

Tc filter add dev eth0 protocol ip parent 1: prio 10 u32 match ip dst 192.168.1.0/24 flowid 1:10

Tc filter add dev eth0 protocol ip parent 1: prio 20 u32 match ip dst 192.168.2.0/24 flowid 1:20

2. 單獨(dú)限制某一個(gè)應(yīng)用的速率問題

這個(gè)問題主要在于filter上,是匹配端口還是什么,可以通過iptables來實(shí)現(xiàn).這里不詳細(xì)列舉配置了.

3.多應(yīng)用優(yōu)先級(jí)問題 (voip 視頻 vpn、其他)

同樣我們還使用htb 算法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22Tc qdisc add dev eth0 root handle 1: htb

Tcclass add dev eth0 parent 1: classid 1:1 htb rate 100mbitceil 100mbit prio 0

1>Tcclass add dev eth0 parent 1:1 classid 1:10 htb rate 100mbitceil 100mbit prio 1

2>Tcclass add dev eth0 parent 1:1 classid 1:11 htb rate 100mbitceil 100mbit prio 2

3>Tcclass add dev eth0 parent 1:1 classid 1:12 htb rate 50mbitceil 50mbit prio 3

4>Tcclass add dev eth0 parent 1:1 classid 1:13 htb rate 50mbitceil 50mbit prio 4

Tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10

Tc qdisc add dev eth0 parent 1:11 handle 11: sfq perturb 10

Tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 10

Tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 10

Tc filter add dev eth0 prarent 1:0 protocol ip prio 1 handle 1 fw classid 1:10

Tc filter add dev eth0 prarent 1:0 protocol ip prio 2 handle 2 fw classid 1:11

Tc filter add dev eth0 prarent 1:0 protocol ip prio 3 handle 3 fw classid 1:12

Tc filter add dev eth0 prarent 1:0 protocol ip prio 4 handle 4 fw classid 1:13

Set-mark:

1.??? voip

2.??? vpn

3.??? 視頻

4.??? 其他

上面我們簡(jiǎn)單介紹了實(shí)際應(yīng)用的三個(gè)例子。至少我們明白了tc應(yīng)用的基本流程和簡(jiǎn)單配置,更復(fù)雜的用法需要自己去深入學(xué)習(xí).

我們需要注意的是上傳與下載雖然相對(duì)獨(dú)立,但是他們也會(huì)相互影響,比如tcp的性能問題,每傳輸一個(gè)報(bào)文同時(shí)都需要得到一個(gè)響應(yīng)報(bào)文.還有關(guān)于報(bào)文大小的問題,

也需要注意,有時(shí)候配置tc的時(shí)候,需要我們把mtu的值調(diào)大,不然就會(huì)造成丟包.例:

1tc qdisc add dev eth0 handle 2 root tbf burst 200kb rate 200kbps mtu 8000 latency 10

在我們具體配置隊(duì)列的時(shí)候,會(huì)被一大堆參數(shù)繞暈,其實(shí)我們只需要針對(duì)具體的策略算法,查看幫助即可,本身命令的幫助已經(jīng)很清晰,然后我們?cè)籴槍?duì)具體算法查詢資料即可

這里講的也僅僅是linux系統(tǒng)自帶的功能,對(duì)于更復(fù)雜的則需要我們自己去實(shí)現(xiàn)一些特殊的功能,比如cos和dscp等.

1 贊 收藏 評(píng)論

總結(jié)

以上是生活随笔為你收集整理的linux qos 软件,linux下QOS:应用篇 - 博客 - 伯乐在线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。