使用cgroup和tc限制带宽
cgroup子系统net_cls 可以给 packet 打上 classid 的标签,用于过滤分类,这个classid就是用于标记skb所属的 qdisc class 的。有了这个标签,流量控制器(tc)可以对不同的 cgroup 的 packet 起作用,Netfilter(iptables)也可以基于这个标签有对应的动作。创建一个 net_cls cgroup 对应的是创建一个 net_cls.classid 文件,这个文件初始化为 0。可以写 16 进制的 0xAAAABBBB 到这个文件里面,AAAA 是 major 号,BBBB 是 minor 号。读这个文件返回的是十进制的数字。
如下,创建两个cgroup组,每个组分配不同的handle号,指定不同的带宽。
root@ubuntu:/sys/fs/cgroup/net_cls# mkdir client
root@ubuntu:/sys/fs/cgroup/net_cls# cd client/
root@ubuntu:/sys/fs/cgroup/net_cls/client# l
cgroup.clone_children cgroup.procs net_cls.classid net_prio.ifpriomap net_prio.prioidx notify_on_release tasks
root@ubuntu:/sys/fs/cgroup/net_cls/client# echo 0x10010 > net_cls.classid
root@ubuntu:/sys/fs/cgroup/net_cls/client# cat net_cls.classid
65552
root@ubuntu:/sys/fs/cgroup/net_cls# mkdir server
root@ubuntu:/sys/fs/cgroup/net_cls# cd server/
root@ubuntu:/sys/fs/cgroup/net_cls/server# l
cgroup.clone_children cgroup.procs net_cls.classid net_prio.ifpriomap net_prio.prioidx notify_on_release tasks
root@ubuntu:/sys/fs/cgroup/net_cls/server# echo 0x10020 > net_cls.classid
root@ubuntu:/sys/fs/cgroup/net_cls/server# cat net_cls.classid
65568
接下来配置tc,写入到cgroup的net_cls.classid中的handle号,要与tc配置中的classid号相同
tc qdisc add dev ens8 root handle 1:0 htb default 1
tc class add dev ens8 parent 1:0 classid 1:1 htb rate 10000Mbit
tc class add dev ens8 parent 1:1 classid 1:10 htb rate 100Mbit ceil 100Mbit
tc class add dev ens8 parent 1:1 classid 1:20 htb rate 1000Mbit ceil 1000Mbit
设置过滤器:
tc filter add dev ens8 parent 1:1 protocol ip prio 10 handle 1:10 cgroup
tc filter add dev ens8 parent 1:1 protocol ip prio 10 handle 1:20 cgroup
接下来使用cgexec工具,来执行对应的程序,我们可以看到流量控制如我们的预期:
cgexec -g net_cls:server python test.py 129.9.123.89
bandwidth 95.9717340903 MB/s cgexec -g net_cls:client python test.py 129.9.123.89
bandwidth 11.3290806068 MB/s
修改带宽命令如下:
tc class change dev ens8 parent 1:1 classid 1:40 htb rate 512Kbit ceil 512Kbit
原理分析待续
使用cgroup和tc限制带宽的更多相关文章
- Linux 流量控制总结(TC)
TC对带宽的描述: mbps = 1024 kbps = 1024 * 1024 bps => byte/s mbit = 1024 kbit => kilo bit/s. ...
- Linux内核配置选项
http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...
- 深入linux kernel内核配置选项
============================================================================== 深入linux kernel内核配置选项 ...
- Linux下针对路由功能配置iptables的方法详解
作为公司上网的路由器需要实现的功能有nat地址转换.dhcp.dns缓存.流量控制.应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使 ...
- 【转】 LINUX中IPTABLES和TC对端口的带宽限制 端口限速
不管是iptables还是tc(traffic control)功能都很强大,都是与网络相关的工具,那么我们就利用这两个工具来对端口进行带宽的限制. 1.使用命令ifconfig查看服务器上的网卡信息 ...
- 使用tc配置后端设备,来限制虚拟机网卡带宽
如果通过tc来限制虚拟机网卡接收方向带宽呢,实际上使用tc对接收方向限制的不够好,使用tc ingress可以限制接收,但是功能不够多,而且会形成丢包问题.一般是采用将流量重定向到一个虚拟设备ifb上 ...
- kubernetes集群pod使用tc进行网络资源限额
kubernetes集群pod使用tc进行网络资源限额 Docker容器可以实现CPU,内存,磁盘的IO限额,但是没有实现网络IO的限额.主要原因是在实际使用中,构建的网络环境是往超级复杂的大型网络. ...
- Docker学习总结(一)—— namespace,cgroup机制
1.namespace: Linux Namespaces机制提供一种资源隔离方案.PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个 Namespace里 ...
- Linux TC 流量控制介绍
前段时间在做一些测试的时候接触到了Linux tc,因为需要对数据包添加延迟,用到了tc中的netem.添加简单的延迟非常简单,像这样一条命令就搞定了:$ tc qdisc add dev eth0 ...
随机推荐
- 《PHP程序员面试笔试真题解析》——新书上线
你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚 ...
- 论文解读(AGCN)《 Attention-driven Graph Clustering Network》
Paper Information Title:<Attention-driven Graph Clustering Network>Authors:Zhihao Peng, Hui Li ...
- CentOS7 下 ldap 部署
环境准备 # 关闭防火墙以及selinux,生产环境中,以实际需求为准 [root@localhost ~]# hostnamectl --static set-hostname ldap-serve ...
- Linux性能优化之内存性能调优
一.根据性能指标找工具 二.根据工具查性能 三.内存优化策略 常见的优化思路有这么几种: 1)最好禁止 Swap.如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的 ...
- Linux性能优化概述
一.Linux性能概述 性能优化是个系统工程,总是牵一发而动全身,它涉及了从程序设计.编程语言,再到系统.存储.网络等各种底层基础设施的方方面面.每一个组件都有可能出问题,而且很有可能多个组件同时出问 ...
- springBoot-启动原理
注:SpringBoot版本 2.6.2 SpringBoot的入口是从SpringApplication.run()传入我们的主启动类开始 @SpringBootApplication public ...
- shell批量监控网站状态码
shell批量监控网站状态码脚本,使用curl很慢.等我学完其他方式,在来更新. #!/bin/bash #GuoYabin yuming=`/bin/cat yuming.txt` for i in ...
- 解决页面js、css代码样式失效
解决方式 根据地址不同的层级深度,加上对应的 " . . / "(不推荐): 去掉所有的 " . . / ", 在js或css的路径前 加上 " / ...
- Java -- int与String相互转换
int转换为String 使用Integer的静态方法 Integer.toString(int num); 空值会抛出NullPointerException异常 使用String的静态方法 Str ...
- SevenZip.SevenZipLibraryException: Can not load 7-zip library or internal COM error! Message: failed to load library.
SevenZip.SevenZipLibraryException: Can not load 7-zip library or internal COM error! Message: failed ...