免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jiangdaoyou
打印 上一主题 下一主题

[网络管理] linux下使用TC流量控制总结 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-06-30 01:42 |只看该作者
原帖由 zhou_rock 于 2007-6-30 01:26 发表于 10楼  
在指定ceil下才可能生效

怎讲?

论坛徽章:
0
12 [报告]
发表于 2007-06-30 11:09 |只看该作者
原帖由 platinum 于 2007-6-30 00:40 发表于 9楼  

这个借用是什么时候都生效吗?还是只在特殊条件下才互相借用?


1. 类似于这样的设计都会产生带宽借用

             root:1
                ||
            classid 1:1
                         ||
                      //   \\
      classid 1:10    classid 1:255

接下来使用任意一个过滤器使 classid 1:10,classid 1:255 生效

2. 这样则不会产生带宽借用

                root:1
               //         \\
    classid 1:1            classid 1:2
            ||                           ||
      classid 1:10          classid 1:255

接下来使用任意一个过滤器使 classid 1:10,classid 1:255 生效

3. 还有,ceil如果不指定,会有默认数值的,这个默认数值就是你的rate,所以,ceil这个峰值令牌桶参数是必须的

4. 当然,这一切的前提是使用htb,其他的队我没有用过,发表不了意见,呵呵

论坛徽章:
0
13 [报告]
发表于 2007-06-30 11:20 |只看该作者
liuzhuan 兄分析得很好,但是我发现借用的一个特点(包括 prio 也是)
只有在带宽不够用的情况下才能生效,也就是实际速率如果跑的话可以高于 ceil 值
否则借用不了,这是我做过实验以后的结论,不知大家有没有遇到过这个情况

论坛徽章:
0
14 [报告]
发表于 2007-06-30 11:32 |只看该作者
原帖由 platinum 于 2007-6-30 11:20 发表于 13楼  
liuzhuan 兄分析得很好,但是我发现借用的一个特点(包括 prio 也是)
只有在带宽不够用的情况下才能生效,也就是实际速率如果跑的话可以高于 ceil 值
否则借用不了,这是我做过实验以后的结论,不知大家有没 ...


是,我做的时候也是这样

论坛徽章:
0
15 [报告]
发表于 2007-06-30 12:59 |只看该作者
liuzhuan 兄做测试的时候还有没有注意到,能达到的最大带宽要远高于 ceil 值才有效
例如,一个 ISP 的带宽限制为 2Mbps,若设置的 ceil 值设置成 2Mbps,甚至 1.8Mbps 也未必奏效
因为数据传输是双向的,我们可以通过 tc 限制内网出去数据的速率,但无法避免由于内网发出的向外请求而招来外网数据的主动向内推送
在这个情况下,1.8Mbps 虽然小于 2Mbps 速率,虽然进来的数据高于 1.8Mbps,但也达不到借用效果,但降到 1.4Mbps 左右应该就没问题了
一般在限制某 IP 速率(允许借用),而其使用 P2P 软件时出现这种情况

论坛徽章:
0
16 [报告]
发表于 2007-07-01 04:18 |只看该作者
to platinum兄:

1。我的前一个结论是错误的,子类之间是不会互相借用带宽的,呵呵,非常不好意思

2。借用主要还是父类给子类来分配带宽,ceil-rate=可借用带宽

3。举例如下:

tc class add dev imq0 parent 1:1 classid 1:10 htb rate 50kbps ceil 70kbps prio 1

tc class add dev imq0 parent 1:1 classid 1:255 htb rate 50kbps prio 2

classid 1:10 rate 50kbps ceil 70kbps,保证带宽50k,可借用带宽20k,在保证rate的情况下,classid 1:10可以向父类再借用20k

classid 1:255 rate 50kbps(ceil默认为50k),这种情况也是不允许向父类借用带宽的

2个子类同时有数据通过的话,并且classid 1:255到达峰值的话,借用带宽会失效,因为要保证每个子类rate速率。
在其他子类未达到峰值的情况下,借用始终有效

4。父类之间仍然不会借用带宽,这种设计没问题

5。我实验的时候,上下行均分开做,下行在imq0,上行在imq1,关于如何给kernel打imq补丁,在下面我有简单描述

我实验的kernel是2.4.31,iptables-1.3.4

需要文件:linux-2.4.28-imq2.diff,
          imq-nat.diff,
          iptables-1.3.0-imq1.diff,
          可以从这里下载http://www.linuximq.net

1)
cp linux-2.4.28-imq2.diff linux-2.4.31/
cd linux-2.4.31/
patch -p1 < linux-2.4.28-imq2.diff

2)   
cp imq-nat.diff linux-2.4.31/drivers/net/
cd linux-2.4.31/drivers/net/
patch < imq-nat.diff

3)
cp iptables-1.3.0-imq1.diff iptables-1.3.4/extensions
cd iptables-1.3.4/extensions
patch < iptables-1.3.0-imq1.diff

4)
编译内核与iptables吧

论坛徽章:
0
17 [报告]
发表于 2007-07-01 16:04 |只看该作者
原帖由 liuzhuan23 于 2007-7-1 04:18 发表于 16楼  
to platinum兄:

1。我的前一个结论是错误的,子类之间是不会互相借用带宽的,呵呵,非常不好意思

2。借用主要还是父类给子类来分配带宽,ceil-rate=可借用带宽

3。举例如下:

tc class add dev im ...


非常好,受教了,谢谢

论坛徽章:
0
18 [报告]
发表于 2007-07-01 23:09 |只看该作者
原帖由 liuzhuan23 于 2007-7-1 04:18 发表于 16楼  
to platinum兄:

classid 1:10 rate 50kbps ceil 70kbps,保证带宽50k,可借用带宽20k,在保证rate的情况下,classid 1:10可以向父类再借用20k

真的可以保证吗?我测试怎么不行呢?

论坛徽章:
0
19 [报告]
发表于 2007-07-02 01:49 |只看该作者
原帖由 platinum 于 2007-7-1 23:09 发表于 18楼  

真的可以保证吗?我测试怎么不行呢?


呵呵,的确可以保证,我实验过了,反反复复好几次,没有问题

我的实验过程如下:

tc qdisc add dev imq0 root handle 1: htb default 255

tc class add dev imq0 parent 1: classid 1:1 htb rate 100kbps

tc class add dev imq0 parent 1:1 classid 1:10 htb rate 50kbps prio 1
tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 5

tc class add dev imq0 parent 1:1 classid 1:255 htb rate 50kbps ceil 80kbps prio 2
tc qdisc add dev imq0 parent 1:255 handle 255: sfq perturb 5

tc filter add dev imq0 protocol ip parent 1:0 u32 match ip sport 80 0xffff flowid 1:10

classid 1:10用于http下载测试,classid 1:255这个默认队我暂时使用ftp下载测试

classid 1:255(有数据通过)而classid 1:10(无数据通过)的时候:ftp下载可以达到80k,也就是借用了30k

classid 1:10(有数据通过)而classid 1:255(无数据通过)的时候:http下载保持在41k-50k之间,无借用带宽

classid 1:10与classid 1:255均有数据通过的时候:http下载,ftp下载的峰值都没有超过50k,正常情况在38k-47k之间

补充一点:iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0(先送到imq0做排队,eth0是我的wan)

[ 本帖最后由 liuzhuan23 于 2007-7-2 01:53 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2007-07-02 08:34 |只看该作者
多谢 liuzhuan 兄指教
我想问一下你的测试环境是怎样的,链路带宽是多大?
另外想问一下如果把 http 换成多超多线程,可招来很多外来流量主动推送的迅雷(最好用迅雷下 BT)会怎样?
我的测试结果是,如果 ceil 离物理带宽很近,或者使用迅雷下 BT 就不行了?
另外还有一点不明,就是上面 http 使用了 prio 1,而 ftp 使用了 prio 2,这里为什么这么做,实际带来的效果又是怎样的呢?这里一直弄不明白……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP