[LARTC] SFQ improvement ideas

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I've several ideas. Maybe someone has some time to implement them ?

1) Backlog depth limit

Currently total limit of SFQ is 128 packets. SFQ tries
to keep lengths of all flows to be roughly the same. It
means that there can be one flow with 128 packets backlog.

It would be nice to have control over maximal lenght of
backlog. To be able to control max delay introduced.

2) Interactive traffic isolation

Cisco IOS implements WFQ which has one queue per flow and
common queue for interactive traffic. Packets are queued
into interactive queue for some time and after it is clear
that they constitute large flow they are assigned private
queue. Interactive queue has higher prio.

Nice effect is that short conversations are handled faster
and long downloads are isolated with lower priority.

It could be implemented in SFQ by attaching token bucket filter
to each flow bucket (there is 1024 buckets). If the flow conforms
to the bucket then it is low-load traffic (interactive) and
hi-load otherwise.
Dequeue routine should be changed to DRR dequeue from low-load
flows then hi-load then again lo-load ....
In other words to perform DRR among two DRRs.

Of course one couldn't use "perturb" here as it would fool bucket
filters.

3) Hash select

Default SFQ impl. uses src(ip+port)+dst(ip+port) to distinguish
connections. It might be useful to be able to set src(ip)+dst(ip)
for example (do disallow users to fool SFQ by creating more connections)
or src(ip)+dst(ip+port) to make it yet better. I'd suggest tc
parameters like "hash " followed by set of "dip,sip,sport,dport,proto"
arguments (e.g. ... sfq hash dip sip dport).


Comments, ideas, volunteers ?
devik




[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux