FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
您的足迹: cgroup net_cls测试
cgroup net_cls测试

net_cls

net_cls 子系统使用等级识别符(classid)标记网络数据包,这让 Linux 流量管控器(tc)可以识别从特定 cgroup 中生成的数据包。可配置流量管控器,让其为不同 cgroup 中的数据包设定不同的优先级。

net_cls.classid

net_cls.classid 包含表示流量控制 handle 的单一数值。从 net_cls.classid 文件中读取的classid 值是十进制格式,但写入该文件的值则为十六进制格式。例如:0x100001 表示控制点通常写为 iproute2 所用的 10:1 格式。在 net_cls.classid 文件中,将以数字 1048577 表示。这些控制点的格式为:0xAAAABBBB,其中 AAAA 是十六进制主设备号,BBBB 是十六进制副设备号。您可以忽略前面的零;0x10001 与 0x00010001 一样,代表 1:1。以下是在net_cls.classid 文件中设定 10:1 控制点的示例:

snippet.bash
cd /sys/fs/cgroup/net_cls/
echo 0x100001 > net_cls.classid
cat net_cls.classid
1048577

实例

未限流

先准备一个大文件:

snippet.bash
[yz@bogon ~]$ ll -h big.txt
-rw-rw-r-- 1 yz yz 9.3G 1114 13:25 big.txt

在未限流的情况下执行scp,可以看到速度约70MB/s:

snippet.bash
[yz@bogon ~]$ scp ./big.txt 192.168.4.219:/home/yz/big1.log
big.txt         16% 1529MB  69.9MB/s   01:54 ETA^

限流

准备cgroup组:

snippet.bash
[yz@bogon ~]$ cd /sys/fs/cgroup/net_cls/
[yz@bogon net_cls]$ sudo mkdir yz    # 需要root权限
[yz@bogon net_cls]$ sudo chown yz:yz -R ./yz
[yz@bogon net_cls]$ cd yz
[yz@bogon yz]$ echo 0x100001 > net_cls.classid
[yz@bogon yz]$ cat net_cls.classid
1048577

tc配置

snippet.bash
[yz@bogon yz]$ sudo tc qdisc add dev enp0s8 root handle 10: htb    # 需要root权限
[yz@bogon yz]$ tc -s qdisc show dev enp0s8    # 显示
qdisc htb 10: root refcnt 2 r2q 10 default 0 direct_packets_stat 55 direct_qlen 1000
 Sent 6350 bytes 55 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 
[yz@bogon yz]$ sudo tc class add dev enp0s8 parent 10: classid 10:1 htb rate 10mbit    # 需要root权限
[yz@bogon yz]$ tc -s class show dev enp0s8    # 显示
class htb 10:1 root prio 0 rate 10Mbit ceil 10Mbit burst 1600b cburst 1600b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 20000 ctokens: 20000
 
[yz@bogon yz]$ sudo tc filter add dev enp0s8 parent 10: protocol ip prio 10 handle 1: cgroup    # 需要root权限
[yz@bogon yz]$ tc -s filter show dev enp0s8    # 显示
filter parent 10: protocol ip pref 10 cgroup
filter parent 10: protocol ip pref 10 cgroup handle 0x1

注意:tc的add命令需要root权限。

scp限流

snippet.bash
[yz@bogon ~]$ cgexec -g net_cls:group scp ./big.txt 192.168.4.219:/home/yz/big1.log
big.txt         1% 1529MB  1.1MB/s   02:55 ETA^

参考



打赏作者以资鼓励:
移动端扫码阅读: