溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Qemu/KVM虛擬機網(wǎng)卡TC雙向限速

發(fā)布時間:2020-10-24 07:53:11 來源:網(wǎng)絡(luò) 閱讀:802 作者:wx5e12f63380167 欄目:云計算

本文檔由成都征天科技有限公司天極云團隊原創(chuàng)出品,轉(zhuǎn)載請注明出處,征天科技致力于為企業(yè)和個人提供專業(yè)的云計算IaaS和PaaS層產(chǎn)品和服務(wù),官網(wǎng)地址:www.tjiyun.com 歡迎訪問。
本文檔主要介紹Qemu/KVM虛擬機使用TC做網(wǎng)卡流量雙向限速的原理和操作。

一.TC限速相關(guān)介紹

1.TC限速原理介紹
Linux操作系統(tǒng)中的流量控制器TC(Traffic Control)用于Linux內(nèi)核的流量控制,主要是通過在輸出端口處建立一個隊列來實現(xiàn)流量控制。
接收包從輸入接口進來后,經(jīng)過流量限制丟棄不符合規(guī)定的數(shù)據(jù)包,由輸入多路分配器進行判斷選擇,如果接收包的目的主機是本主機,那么將該包送給上層處理,否則需要進行轉(zhuǎn)發(fā),將接收包交到轉(zhuǎn)發(fā)塊(Forwarding Block)處理。轉(zhuǎn)發(fā)塊同時也接收本主機上層(TCP、UDP等)產(chǎn)生的包,通過查看路由表,決定所處理包的下一跳。然后,對包進行排列以便將它們送到輸出接口。
從以上介紹可以看出,TC只能對網(wǎng)卡發(fā)出的數(shù)據(jù)包做分類限制,不能對網(wǎng)卡接收的數(shù)據(jù)包做分類限制,但是可以對網(wǎng)卡接收的數(shù)據(jù)包流量做一個整體限制。因為我們項目中只需要對網(wǎng)卡接收的流量做整體限制,所以TC剛好可以滿足我們對網(wǎng)卡流量雙向限制的要求。

2.TC限速基本概念介紹
TC對流量的處理由三種對象控制,它們是:
隊列規(guī)則 qdisc(queueing discipline)
類(class)
分類器(Classifiers).

qdisc隊列規(guī)則(queueing discipline)
qdisc(隊列規(guī)則)是queueing discipline的簡寫,它是理解流量控制(traffic control)的基礎(chǔ)。無論何時,內(nèi)核如果需要通過某個網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照為這個接口配置的qdisc把數(shù)據(jù)包加入隊列。然后,內(nèi)核會盡可能多地從qdisc里面取出數(shù)據(jù)包,把它們交給網(wǎng)絡(luò)適配器驅(qū)動模塊。最簡單的qdisc是pfifo,它不對進入的數(shù)據(jù)包做任何的處理,數(shù)據(jù)包采用先入先出的方式通過隊列。不過,它會保存網(wǎng)絡(luò)接口一時無法處理的數(shù)據(jù)包。
可分類的qdisc包括:
(1)CBQ
CBQ是Class Based Queueing(基于類別排隊)的縮寫。它實現(xiàn)了一個豐富的連接共享類別結(jié)構(gòu),既有限制(shaping)帶寬的能力,也具有帶寬優(yōu)先級管理的能力。帶寬限制是通過計算連接的空閑時間完成的。空閑時間的計算標準是數(shù)據(jù)包離隊事件的頻率和下層連接(數(shù)據(jù)鏈路層)的帶寬。
(2)HTB
HTB是Hierarchy Token Bucket的縮寫。通過在實踐基礎(chǔ)上的改進,它實現(xiàn)了一個豐富的連接共享類別體系。使用HTB可以很容易地保證每個類別的帶寬,雖然它也允許特定的類可以突破帶寬上限,占用別的類的帶寬。HTB可以通過TBF(Token Bucket Filter)實現(xiàn)帶寬限制,也能夠劃分類別的優(yōu)先級。
(3)PRIO
PRIO qdisc不能限制帶寬,因為屬于不同類別的數(shù)據(jù)包是順序離隊的。使用PRIO qdisc可以很容易對流量進行優(yōu)先級管理,只有屬于高優(yōu)先級類別的數(shù)據(jù)包全部發(fā)送完畢,才會發(fā)送屬于低優(yōu)先級類別的數(shù)據(jù)包。為了方便管理,需要使用iptables或者ipchains處理數(shù)據(jù)包的服務(wù)類型(Type Of Service,ToS)。

Class 類
某些qdisc可以包含一些類別,不同的類別中可以包含更深入的qdisc,通過這些細分的qdisc還可以為進入隊列的數(shù)據(jù)包排隊。通過設(shè)置各種類別數(shù)據(jù)包的離隊次序,qdisc可以設(shè)置網(wǎng)絡(luò)數(shù)據(jù)流量的優(yōu)先級。

Filter 規(guī)則
Filter(過濾器)用于為數(shù)據(jù)包分類,決定它們按照何種qdisc進入隊列。無論何時數(shù)據(jù)包進入一個劃分子類的類別中,都需要進行分類。分類的方法可以有多種,使用fileter(過濾器)就是其中之一。使用filter(過濾器)分類時,內(nèi)核會調(diào)用附屬于這個類(class)的所有過濾器,直到返回一個判決。如果沒有判決返回,就作進一步的處理,而處理方式和qdisc有關(guān)。需要注意的是,filter(過濾器)是在qdisc內(nèi)部,它們不能作為主體。

二.TC限速操作

1.虛擬機流入流量限制
(1)清除tap01網(wǎng)卡設(shè)備上所有的流入規(guī)則,防止與新添加的規(guī)則沖突。
# tc qdisc del dev tap01 root
(2)在網(wǎng)絡(luò)設(shè)備tap01上綁定一個htb類型的qdisc根隊列
# tc qdisc add dev tap01 root handle 1: htb default 9999
(3)在qdisc根隊列1:下創(chuàng)建一個子類1:5,并設(shè)置子類的流量速率為50Mb/s
# tc class add dev tap01 parent 1: classid 1:5 htb rate 50Mbit burst 1Mbit
(4)為子類1:5添加隨機公平隊列sfq,防止該類被某一會話連接獨占
# tc qdisc add dev tap01 parent 1:5 handle 5: sfq perturb 10
(5)為子類1:5添加過濾器,用來將目標地址為0.0.0.0/0(指所有網(wǎng)絡(luò))的數(shù)據(jù)包發(fā)往類1:5,使用其中的規(guī)則出隊
# tc filter add dev tap01 parent 1: protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:5
注: tap01為虛擬機連接到網(wǎng)橋的網(wǎng)卡,與虛擬機內(nèi)部的網(wǎng)卡一一對應(yīng)。因tap01口的出方向的流量就是進入虛擬機內(nèi)部網(wǎng)卡的流量,所以限制tap01口的出方向的流量,就可以限制流入虛擬機的網(wǎng)絡(luò)流量。

2.虛擬機流出流量限制
(1)清除tap01網(wǎng)卡設(shè)備上所有的流入規(guī)則,防止與新添加的規(guī)則沖突。
# tc qdisc del dev tap01 ingress
(2)在網(wǎng)絡(luò)設(shè)備tap01上綁定一個處理ingress流量的qdisc根隊列
# tc qdisc add dev tap01 ingress handle ffff:
(3)為類ffff:添加過濾器,并限制流量為50Mb/s
# tc filter add dev tap01 parent ffff: protocol all prio 1 basic police rate 50Mbit burst 10Mbit mtu 65535 drop
注: tap01為虛擬機連接到網(wǎng)橋的網(wǎng)卡,與虛擬機內(nèi)部的網(wǎng)卡一一對應(yīng)。因tap01口的入方向的流量就是虛擬機內(nèi)部網(wǎng)卡發(fā)出的流量,所以限制tap01口的入方向的流量,即可限制流出虛擬機的網(wǎng)絡(luò)流量。
命令中的數(shù)字10和65535存在關(guān)聯(lián)性,需要一起修改,否則會導(dǎo)致限速不準確。

如您有任何問題,歡迎與我們交流,微信號 ztkj_tjiyun

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI