摘要: Linux從kernel
開始支持QOS
不過
需要重新編譯內核
運行make config時將EXPERIMENTAL _OPTIONS設置成y
並且將Class Based Queueing (CBQ)
Token Bucket Flow
Traffic Shapers 設置為 y
運行 make dep; make clean; make bzilo
生成新的內核
Linux從kernel
開始支持QOS
不過
需要重新編譯內核
運行make config時將EXPERIMENTAL _OPTIONS設置成y
並且將Class Based Queueing (CBQ)
Token Bucket Flow
Traffic Shapers 設置為 y
運行 make dep; make clean; make bzilo
生成新的內核
在Linux操作系統中流量控制器(TC)主要是在輸出端口處建立一個隊列進行流量控制
控制的方式是基於路由
亦即基於目的IP地址或目的子網的網絡號的流量控制
流量控制器TC
其基本的功能模塊為隊列
分類和過濾器
Linux內核中支持的隊列有
Class Based Queue
Token Bucket Flow
CSZ
First In First Out
Priority
TEQL
SFQ
ATM
RED
這裡我們討論的隊列與分類都是基於CBQ(Class Based Queue)的
而過濾器是基於路由(Route)的
配置和使用流量控制器TC
主要分以下幾個方面
分別為建立隊列
建立分類
建立過濾器和建立路由
另外還需要對現有的隊列
分類
過濾器和路由進行監視
其基本使用步驟為
) 針對網絡物理設備(如以太網卡eth
)綁定一個CBQ隊列
) 在該隊列上建立分類
) 為每一分類建立一個基於路由的過濾器
) 最後與過濾器相配合
建立特定的路由表
先假設一個簡單的環境
流量控制器上的以太網卡(eth
) 的IP地址為
在其上建立一個CBQ隊列
假設包的平均大小為
字節
包間隔發送單元的大小為
字節
可接收沖突的發送最長包數目為
字節
假如有三種類型的流量需要控制:
) 是發往主機
的
其IP地址為
其流量帶寬控制在
Mbit
優先級為
) 是發往主機
的
其IP地址為
其流量帶寬控制在
Mbit
優先級為
) 是發往子網
的
其子網號為
子網掩碼為
流量帶寬控制在
Mbit
優先級為
建立隊列
一般情況下
針對一個網卡只需建立一個隊列
將一個cbq隊列綁定到網絡物理設備eth
上
其編號為
:
網絡物理設備eth
的實際帶寬為
Mbit
包的平均大小為
字節
包間隔發送單元的大小為
字節
最小傳輸包大小為
字節
·tc qdisc add dev eth
root handle
: cbq bandwidth
Mbit avpkt
cell
mpu
建立分類
分類建立在隊列之上
一般情況下
針對一個隊列需建立一個根分類
然後再在其上建立子分類
對於分類
按其分類的編號順序起作用
編號小的優先
一旦符合某個分類匹配規則
通過該分類發送數據包
則其後的分類不再起作用
) 創建根分類
:
分配帶寬為
Mbit
優先級別為
·tc class add dev eth
parent
:
classid
:
cbq bandwidth
Mbit rate
Mbit maxburst
allot
prio
avpkt
cell
weight
Mbit
該隊列的最大可用帶寬為
Mbit
實際分配的帶寬為
Mbit
可接收沖突的發送最長包數目為
字節
最大傳輸單元加MAC頭的大小為
字節
優先級別為
包的平均大小為
字節
包間隔發送單元的大小為
字節
相應於實際帶寬的加權速率為
Mbit
)創建分類
:
其父分類為
:
分配帶寬為
Mbit
優先級別為
·tc class add dev eth
parent
:
classid
:
cbq bandwidth
Mbit rate
Mbit maxburst
allot
prio
avpkt
cell
weight
Kbit split
:
bounded
該隊列的最大可用帶寬為
Mbit
實際分配的帶寬為
Mbit
可接收沖突的發送最長包數目為
字節
最大傳輸單元加MAC頭的大小為
字節
優先級別為
包的平均大小為
字節
包間隔發送單元的大小為
字節
相應於實際帶寬的加權速率為
Kbit
分類的分離點為
:
且不可借用未使用帶寬
)創建分類
:
其父分類為
:
分配帶寬為
Mbit
優先級別為
·tc class add dev eth
parent
:
classid
:
cbq bandwidth
Mbit rate
Mbit maxburst
allot
prio
avpkt
cell
weight
Kbit split
:
該隊列的最大可用帶寬為
Mbit
實際分配的帶寬為
Mbit
可接收沖突的發送最長包數目為
字節
最大傳輸單元加MAC頭的大小為
字節
優先級別為
包的平均大小為
字節
包間隔發送單元的大小為
字節
相應於實際帶寬的加權速率為
Kbit
分類的分離點為
:
)創建分類
:
其父分類為
:
分配帶寬為
Mbit
優先級別為
·tc class add dev eth
parent
:
classid
:
cbq bandwidth
Mbit rate
Mbit maxburst
allot
prio
avpkt
cell
weight
Kbit split
:
該隊列的最大可用帶寬為
Mbit
實際分配的帶寬為
Kbit
可接收沖突的發送最長包數目為
字節
最大傳輸單元加MAC頭的大小為
字節
優先級別為
包的平均大小為
字節
包間隔發送單元的大小為
字節
相應於實際帶寬的加權速率為
Kbit
分類的分離點為
:
建立過濾器
過濾器主要服務於分類
一般只需針對根分類提供一個過濾器
然後為每個子分類提供路由映射
) 應用路由分類器到cbq隊列的根
父分類編號為
:
過濾協議為ip
優先級別為
過濾器為基於路由表
·tc filter add dev eth
parent
:
protocol ip prio
route
) 建立路由映射分類
:
:
:
·tc filter add dev eth
parent
:
protocol ip prio
route to
flowid
:
·tc filter add dev eth
parent
:
protocol ip prio
route to
flowid
:
·tc filter add dev eth
parent
:
protocol ip prio
route to
flowid
:
建立路由
該路由是與前面所建立的路由映射一一對應
) 發往主機
的數據包通過分類
轉發(分類
的速率
Mbit)
·ip route add
dev eth
via
realm
) 發往主機
的數據包通過分類
轉發(分類
的速率
Mbit)
·ip route add
dev eth
via
realm
)發往子網
/
的數據包通過分類
轉發(分類
的速率
Mbit)
·ip route add
/
dev eth
via
realm
注
一般對於流量控制器所直接連接的網段建議使用IP主機地址流量控制限制
不要使用子網流量控制限制
如一定需要對直連子網使用子網流量控制限制
則在建立該子網的路由映射前
需將原先由系統建立的路由刪除
才可完成相應步驟
監視
主要包括對現有隊列
分類
過濾器和路由的狀況進行監視
)顯示隊列的狀況
簡單顯示指定設備(這裡為eth
)的隊列狀況
·tc qdisc ls dev eth
qdisc cbq
: rate
Mbit (bounded
isolated) prio no
transmit
詳細顯示指定設備(這裡為eth
)的隊列狀況
·tc
s qdisc ls dev eth
qdisc cbq
: rate
Mbit (bounded
isolated) prio no
transmit
Sent
bytes
pkts (dropped
overlimits
)
borrowed
overactions
avgidle
undertime
這裡主要顯示了通過該隊列發送了
個數據包
數據流量為
個字節
丟棄的包數目為
超過速率限制的包數目為
)顯示分類的狀況
簡單顯示指定設備(這裡為eth
)的分類狀況
·tc class ls dev eth
class cbq
: root rate
Mbit (bounded
isolated) prio no
transmit
class cbq
:
parent
: rate
Mbit prio no
transmit #no
transmit表示優先級為
class cbq
:
parent
:
rate
Mbit prio
class cbq
:
parent
:
rate
Mbit prio
class cbq
:
parent
:
rate
Mbit prio
詳細顯示指定設備(這裡為eth
)的分類狀況
·tc
s class ls dev eth
class cbq
: root rate
Mbit (bounded
isolated) prio no
transmit
Sent
bytes
pkts (dropped
overlimits
)
borrowed
overactions
avgidle
undertime
class cbq
:
parent
: rate
Mbit prio no
transmit
Sent
bytes
pkts (dropped
overlimits
)
borrowed
overactions
avgidle
undertime
class cbq
:
parent
:
rate
Mbit prio
Sent
bytes
pkts (dropped
overlimits
)
From:http://tw.wingwit.com/Article/program/Oracle/201311/18945.html