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限制带宽的更多相关文章

  1. Linux 流量控制总结(TC)

    TC对带宽的描述:    mbps = 1024 kbps = 1024 * 1024 bps => byte/s    mbit = 1024 kbit => kilo bit/s.   ...

  2. Linux内核配置选项

    http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...

  3. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  4. Linux下针对路由功能配置iptables的方法详解

    作为公司上网的路由器需要实现的功能有nat地址转换.dhcp.dns缓存.流量控制.应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使 ...

  5. 【转】 LINUX中IPTABLES和TC对端口的带宽限制 端口限速

    不管是iptables还是tc(traffic control)功能都很强大,都是与网络相关的工具,那么我们就利用这两个工具来对端口进行带宽的限制. 1.使用命令ifconfig查看服务器上的网卡信息 ...

  6. 使用tc配置后端设备,来限制虚拟机网卡带宽

    如果通过tc来限制虚拟机网卡接收方向带宽呢,实际上使用tc对接收方向限制的不够好,使用tc ingress可以限制接收,但是功能不够多,而且会形成丢包问题.一般是采用将流量重定向到一个虚拟设备ifb上 ...

  7. kubernetes集群pod使用tc进行网络资源限额

    kubernetes集群pod使用tc进行网络资源限额 Docker容器可以实现CPU,内存,磁盘的IO限额,但是没有实现网络IO的限额.主要原因是在实际使用中,构建的网络环境是往超级复杂的大型网络. ...

  8. Docker学习总结(一)—— namespace,cgroup机制

    1.namespace: Linux Namespaces机制提供一种资源隔离方案.PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个 Namespace里 ...

  9. Linux TC 流量控制介绍

    前段时间在做一些测试的时候接触到了Linux tc,因为需要对数据包添加延迟,用到了tc中的netem.添加简单的延迟非常简单,像这样一条命令就搞定了:$ tc qdisc add dev eth0 ...

随机推荐

  1. 我的新书——《PHP程序员面试笔试宝典》

    你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书--<PHP程序员面试笔试宝典>. 一.创作过程 <PHP程序员面试笔试宝典>是我的第一本书, ...

  2. Mysql的基本操作知识

    顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://p ...

  3. Solution -「CF 804F」Fake bullions

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点的竞赛图,第 \(i\) 个点代表了 \(s_i\) 个人,每个人(0-based)可能有真金条.此后在 ...

  4. Vue脚手架报错 Component name "Student" should always be multi-word vue/multi-word-component-names

    报错信息分析: 新手在第一个次使用脚手架的时候难免会遇到各种各样奇怪的问题,最近在学习Vue的过程中就出现了如下问题 通过阅读报错信息可知: 是我们的组件名有一些问题,(报错信息翻译过来大概就是组件名 ...

  5. 如何封装安全的go

    如何封装安全的go 在业务代码开发过程中,我们会有很大概率使用go语言的goroutine来开启一个新的goroutine执行另外一段业务,或者开启多个goroutine来并行执行多个业务逻辑.所以我 ...

  6. SpringBoot+JavaMailSender+Redis完整找回密码功能

    导入maven坐标 <parent> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  7. mysql 去除前后空白字符

    update  table  set  field = replace(replace(replace(field,char(9),''),char(10),''),char(13),'');

  8. 在 WPF 客户端实现 AOP 和接口缓存

    随着业务越来越复杂,最近决定把一些频繁查询但是数据不会怎么变更的接口做一下缓存,这种功能一般用 AOP 就能实现了,找了一下客户端又没现成的直接可以用,嗐,就只能自己开发了. 代理模式和AOP 理解代 ...

  9. 网络主动测评系统,IT网络运维管理的法宝!

    随着计算机网络的普及和快速发展,互联网已经融入到人们的衣食住行等方方面面,如工作.购物.音视频聊天.视频会议.朋友圈.抖音.在线网游.网络电影电视等.毫不夸张地说,现如今大部分人的绝大多数时间都已经离 ...

  10. 为什么说国产BI更适合国内企业?

    ​就算国外BI发展迅速,产品更加完善成熟,但对国内的企业来说,使用起来难免"水土不服",何况还有服务对接过程中的繁琐程.今天就来讨论一下,国内BI和国外BI到底该怎么选择? 国外B ...