linux使用TC限流

avatar 2022年11月27日18:19:39 评论 1,022 次浏览

在linux中有一个tc命令,tc的主要作用就是针对网卡进行限流,限流有什么好处这里就不多说了,这里主要说一下tc的安装和使用。原本在网上搜了很多,都没有安装,可能是系统版本的问题,我用的是centos8版本的,所以网上使用iproute直接安装,然后安装后却没有tc命令,这个也没有测试,我就哪我在centos8环境里看一下。

安装以及使用格式

[root@wulaoer.org ~]# yum install -y iproute-tc #安装tc
[root@wulaoer.org ~]#  tc qdisc [add|change|replace|link] dev DEV [parent qdisk-id|root][handle qdisc-id] qdisc[qdisc specific parameters]

使用tc限流

[root@wulaoer.org ~]# tc qdisc add dev enp0s5 root tbf rate 500kbit latency 50ms burst 15kb   #限制网卡enp0s5的带宽为500k
[root@wulaoer.org ~]# tc -s qdisc ls dev enp0s5  #列出已有策略
qdisc tbf 8001: root refcnt 2 rate 500Kbit burst 15Kb lat 50ms
 Sent 2394 bytes 23 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
[root@wulaoer.org ~]# tc qdisc del dev enp0s5 root  #删除上面增加的策略
[root@wulaoer.org ~]# tc -s qdisc ls dev enp0s5
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
 Sent 670 bytes 5 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
/sbin/tc qdisc add dev enp0s5 root tbf rate 500kbit latency 50ms burst 15kb

参数注解

add 表示要添加
dev eth0 表示要操作的网卡为eth0
root 表示为网卡eth0添加的是一个根队列
handle 1: 表示队列的句柄为1:
htb 表示要添加的队列为HTB队列
default 11 是htb特有的队列参数,意思是所有未分类的流量都将分配给类别1:11
parent 1: 表示类别的父亲为根队列1:
classid 1:11 表示创建一个标识为1:11的类别
rate 40mbit 表示系统将为该类别确保带宽40mbit
ceil 40mbit 表示该类别的最高可占用带宽为40mbit
rate 速度操纵杆
tbf 令牌桶过滤器
limit/latency 这两个参数设置一个就可以了,limit确定最多有多少数据(字节数)在队列中等待可用令牌.你也可以通过设置latency参数来指定这个参数,latency参数确定了一个包在TBF中等待传输的最长等待时间.后者计算决定桶的大小,速率和峰值速率.
burst/buffer/maxburst 桶的大小,以字节计.这个参数指定了最多可以有多少个令牌能够即刻被使用.
通常,管理的带宽越大,需要的缓冲器就越大.在Intel体系上,10兆bit/s的速率需要至少10k字节的缓冲区才能达到期望的速率.
如果你的缓冲区太小,就会导致到达的令牌没有地方放(桶满了),这会(缓冲区太小)导致潜在的丢包.
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: