一种优化TC(流控)规则下发的方法

很多人都知道用TC命令配置流控规则,之前做过一款路由器产品,需要为每个用户配置一条流控规则:将TC规则写到SHELL脚本中,然后在C程序中调用该脚本。随着用户数越来越多,并发执行的脚本就越来越多,导致系统性能下降。

解决这个问题根本之道是不调用TC命令,因为每个TC命令就是一个小程序,并发用户太多时,肯定会导致资源紧张。所以首先想到的是直接在C程序中调用TC规则配置接口,当时找了一圈没找到线程的库可用,可行的方法是将TC命令改造成一个库文件。但当时时间紧张,业务天天催版本。所以想了一个改动最小,最稳妥的方法。

改造方法很简单,一条TC流控规则如下:tc qdisc add dev eth0 root handle 2: htb default 100,TC后面的这些参数,其实就是main函数的char *argv[]。所以我们只需要将TC后面的参数通过其它方式传递到TC中就行了。我这边改造用的是socket通信,在TC源码中增加一个socket侦听,将tc命令改造成一个服务进程一直侦听socket通信。原来调用脚本的C程序,将TC参数直接通过socket发送给TC服务。TC服务用接收到参数替换原来argv的参数,TC其它代码无需改动。

改造后原来并发上线数大导致的问题完美解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值