使用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 ...
随机推荐
- HashMap自动扩容机制源码详解
一.简介 HashMap的源码我们之前解读过,数组加链表,链表过长时裂变为红黑树.自动扩容机制没细说,今天详细看一下 往期回顾: Java1.7的HashMap源码分析-面试必备技能 Java1.8的 ...
- PostgreSQL删除数据库失败处理
PostgreSQL Drop DATABASE删除数据库失败,需要结束掉占用的连接 登录PostgreSQL后,执行: SELECT pg_terminate_backend(pg_stat_act ...
- 04 前端之BOM与DOM
目录 前端之BOM与DOM BOM与DOM操作 BOM操作 前端之BOM与DOM BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>& ...
- 流程控制( if while )
目录 流程控制 必知必会 分支结构 if 1.单 if 分支结构 2. if与else连用 3. if, else和 elif if 判断之嵌套 if 练习题 while 循环 while+break ...
- PyCharm编程软件详细安装教程
PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...
- Solution -「51nod 1584」加权约数和
\(\mathcal{Description}\) Link. 令 \(\sigma(n)\) 为 \(n\) 的约数之和.求: \[\sum_{i=1}^n\sum_{j=1}^n\max\ ...
- MHA + Maxscale 数据库的高可用和读写分离
MySQL 常见发行版本 MySQL 标准化.自动化部署 深入浅出MySQL备份与恢复 深入理解MySQL主从复制 MySQL构架设计与容量规划 MHA Maxscale MySQL 常见发行版本 M ...
- yaml语法及格式校验
基本语法 1.yml文件以缩进代表层级关系 2.缩进不允许使用tab只能使用空格 3.空格的个数不重要,只要相同层级的元素左对齐即可 4.大小写敏感 5.数据格式为,名称:(空格)值 也就是说,如果冒 ...
- 微信小程序蓝牙开发
微信小程序蓝牙控制方案: 蓝牙模块如何快速改名并绑定用户手机?这样即使多台蓝牙设备在同一个地方使用也可以互不干扰,燧星科技给出解决方案. 长按控制板5秒进入待绑定下状态,点击"添加蓝牙设备& ...
- [题解]RQNOJ PID85 三个袋子
链接:http://www.rqnoj.cn/problem/85 思路:一个排列问题,递推式很简单,f(n+1)=3*f(n)-1 ,由此可以推出通项公式,f(n)=0.5*3^(n-1)+0.5 ...