之前也用过tc 命令,研究过一下子,当时好像也是限速不能达到预期的效果,而且也不是非用不可,所以就没有用上。
这一次测试那边反馈说在原来的旧机器上面上下行限速都是能生效的,在新机器上面上下行限速就不生效了。习惯了,问题来了,先确定现象,所以,马上和测试的一起搭环境,确认他们的测试方式,简单粗略的过了一遍,确定不是测试方式的问题,然后把问题接过来,总结起来就是找到问题本质,重新梳理,解剖,通过测试,排查,发现问题所在。
第一步:问了一下原来实现限速的同事,限速所用的tc 命令是什么,都是怎么实现的上下行限速,
第二步:测试确认网卡不做限速配置的速率,千兆的网卡,能跑到到950多M ,证明网卡是没有问题的。
第三步:简化测试环境,原来都是通过web 页面下发命令进行设置的,拿到最根本的命令,就不用通过web 页面下发限速命令了,直接在命令行配置,而且可以灵活配置,先单纯测出口的限速是否生效。
从小到大测试了几组数据,发现限速不是不生效,只是不能按照tc 命令配置的速率来进行限制。这个时候可以证明tc 命令是生效的,只是效果不能达到预期,基本能确定是命令没有配置正确了。
只能去看man,看HOWTO, 研究怎么配置了。水平有限,只能说每个单词都看懂了,串在一起的中文翻译也翻译出来了,哈哈,就是没懂具体的含义,只能一边看一边折腾,把tc的man 都过了一遍,网上也看了别人的文章,也做了一些测试,最后发现命令加上burst 参数好像就能按照配置的rate 进行限速。到这个时候,就能确定肯定是命令没有配对了。但是为什么测试给出的结论是在旧机器上面上下行的限速都是生效的,要是命令没有配置正确的话,应该什么机器都不生效才对,这样才合理啊。自己找了台旧机器测试,发现也是不能达到预期结果的,再次跟测试确认,旧机器限速是否一定能够按照配置的速率进行限速的的,测试没有重新测试就马上给我说,一定是生效的。没办法,只能把我在旧机器上面的测试结果跟他们分享了,然后和测试一起在旧机器上面再测一遍,哈哈,就是不能达到预期结果呢。这个时候就给我贴他们原来的测试数据,我一看测试数据也是晕了,千兆的网卡,只是测试了200M以内的限速,而且四个数据(下面是数据),其中三个误差超过20%的,这也能说是生效的,我也是醉了。
限制速率
|
实测速率
|
误差百分比
|
20
|
19
|
0.05
|
50
|
40
|
20
|
100
|
75
|
25
|
200
|
131
|
30
|
要是结果是这样的话,命令没配置对,这个结论就合理了,哈哈。
那为什么显式指定burst 就能生效呢?
又是文档,细扣了一下burst的解释,还是没有搞懂啊(上一篇tc的总结,就是那时候一边看一边总结的)。
后来不知道怎么的,居然知道去查令牌桶算法的原理,哈哈,看了令牌桶算法,再来理解这个参数,一点问题都没有。
总结,一般出现问题,都是从现象入手,总结现象规律,得出一些基本的结论,然后结合现象,看看是否都合理,
然后验证。还有就是看一个东西看不懂的时候,估计得找找这个东西的出处。看一遍不懂的东西,可以多看几遍,总会懂的,
懂了之后的感觉很好,一下子就豁然开朗了
补充一点,测试的时候要是经过了几个网络的,需要确保中间的网络没有做限速,或者做限制的速率是足够大的
阅读(5908) | 评论(0) | 转发(0) |