Re: Traffic shaping on debian

Aleksey <[email protected]> Fri, 27 May 2016 16:50:55 +0300
Newsgroups gmane.linux.debian.user.isp
Message-ID <[email protected]>
On 2016-05-27 14:48, Dmitry Sinina wrote:
> On 05/27/2016 02:40 PM, Aleksey wrote:
>> Hi guys!
>> 
>> I have a debian box acting as a router and need a tool to perform 
>> traffic shaping based on source/destination IPs, interfaces, etc. I 
>> have tried the default tc, however, it uses plenty of resources, e.g. 
>> 600 mbps without shaping flows through with 3% cpu load and the same 
>> 600mbps with shaping (tc
>> using htb on egress interface) consumes something like 40% cpu.
>> 
>> Probably someone could advise some kind of a tool to do such shaping 
>> with minimum resources consumed - I've searched through the web and 
>> found a module named nf-hishape, however, I didn't manage to find some 
>> reasonably high number of articles about it as well as no manuals and 
>> so on - I guess it's
>> not very popular (if it's actually alive).
>> 
>> Any help would be appreciated.
>> 
>> Thanks in advance.
>> 
> Hi.
> 
> Seems you use flat list of filters. How many filters you have?
> Did you try hash tables for traffic classification?

Hi.

Practically, I haven't done any configuration on my production router - 
I have performed tests in lab environment. Configuration was pretty 
simple:

tc qdisc add dev eth1 root handle 1: htb default 30
tc class add dev eth1 parent 1: classid 1:1 htb rate 1000mbps ceil 
1000mbps
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 3mbps ceil 5mbps
tc class add dev eth1 parent 1:1 classid 1:20 htb rate 5mbps ceil 7mbps
tc class add dev eth1 parent 1:1 classid 1:30 htb rate 1mbps ceil 
1000mbps
tc qdisc add dev eth1 parent 1:10 handle 10:0 sfq perturb 10
tc qdisc add dev eth1 parent 1:20 handle 20:0 sfq perturb 10
tc qdisc add dev eth1 parent 1:30 handle 30:0 sfq perturb 10
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32  match ip dport 
443 0xffff flowid 1:20
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32  match ip dport 
80 0xffff flowid 1:10

So after applying it I tried to push some traffic through this lab box 
using iperf. When performing test on ports 80/443 (limited to low 
bandwidth) - CPU load was ok, however when I pushed unrestricted traffic 
(1000 mbps limit) I noticed high CPU usage. I tried setting up filters 
based on fwmark but the result was the same. I'm using debian 7 with 
3.16 kernel installed from wheezy-backports, if it is important.

If some additional info (firewall config, etc) is needed, please ask.