您现在的位置是:首页 >其他 >cgroup配合tc工具对进程的上下行(出口入口)速度,附测试脚本网站首页其他
cgroup配合tc工具对进程的上下行(出口入口)速度,附测试脚本
简介cgroup配合tc工具对进程的上下行(出口入口)速度,附测试脚本
在开始之前,如果不熟悉cgroup、tc、以及ifb虚拟网卡,建议先了解一下再进行试验
注:为什么会用到ifb虚拟网卡呢,因为Linux自带的tc是一套控发不控收的框架。具体ifb详细原理,自行研究,网上资料多的很。
-
对出口流量限制的预配置
//默认分类为100 tc qdisc add dev ens32 root handle 1: htb default 100 //指定classid为1:1的出口流量为50mbit,这里后面会和我们要限制某个进程的出口流量进行绑定 tc class add dev ens32 parent 1:0 classid 1:1 htb rate 50mbit ceil 50mbit //默认出口流量为500mbit tc cl add dev ens32 parent 1:1 classid 1:100 htb rate 500mbit burst 20k //过滤classid为1:1的流量 tc filter add dev ens32 protocol ip parent 1:0 prio 1 handle 1:1 cgroup
-
对入口流量的限制的预配置
# 加载ifb驱动并创建ifb网卡(使用ifconfig -a 如果看到已有则无需该步骤) modprobe ifb numifbs=1 # up网卡 # ip link set dev ifb0 up # 清除原有的根队列(根据实际情况操作,非必要) tc qdisc del dev ens32 root 2>/dev/null tc qdisc del dev ens32 ingress 2>/dev/null tc qdisc del dev ifb0 root 2>/dev/null # 将ens32的ingress流量全部重定向到 ifb0 处理 tc qdisc add dev ens32 handle ffff: ingress tc filter add dev ens32 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
-
开启入口与出口流量限制
# ens32的出向限速:ens32添加根队列,使用htb,添加1:1类,使用htb tc qdisc add dev ens32 root handle 1: htb r2q 625 default 65 tc class add dev ens32 parent 1: classid 1:1 htb rate 1000Mbit # ens32的入向限速:ifb0添加根队列,使用htb,添加1:1类,使用htb tc qdisc add dev ifb0 root handle 1: htb r2q 625 default 65 tc class add dev ifb0 parent 1: classid 1:1 htb rate 1000Mbit
4.开始实验验证
测试脚本,用这个
1.下载准备好的测试脚本,在服务端执行 python test.py
2.测试服务端端进程的下行。服务端进程的下行相对于客户端来说,就是在客户端上传数据然后观察服务端进程接受数据的能力。所以我们在客户端(upload)执行以下命令来测试服务端下行。
curl -H "Content-Type:multipart/form-data" -H "referer:http://192.168.9.159:1234/" -F "file=@test_rate_file.tar.gz" http://192.168.9.159:1234/
3.测试服务端进程的上行。服务端进程的上行相对于客户端来说,就是在客户端下载数据然后观察服务端进程发送数据的能力。所以我们在客户端(download)执行以上命令来测试服务端的上行。
curl -O http://192.168.9.159:8888/test_rate_file.tar.gz
总结:tc配合cgroup可以做很多事,既可以对单个进程、某个IP、某个端口还可以直接限制整个网卡的流量。值得我们研究学习。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。