Re: tc filter flow hash question

Previous thread: (no subject) by Mrs Dianne Thompson on Monday, June 29, 2009 - 6:28 pm. (1 message)

Next thread: [PATCH] linux-2.4: br2684: fix double freeing skb by Frank Seidel on Tuesday, June 30, 2009 - 1:15 am. (2 messages)
From: Badalian Vyacheslav
Date: Tuesday, June 30, 2009 - 1:12 am

Hello all.
Sorry for mail to this maillist, but in internet i can't found any
information to understand this situation, lartc list is dead, function
do not documented and only developers understand how it works.

As i understand if i add flow hash i divide speed to KEYs (example to
dst) not for sessions right?

Why if i add simple example my traffic stop and i get DROP at parent class?

This my sample

tc qdisc add dev eth0 root handle 1 htb default 7
class add dev eth0 parent 1: classid 1:7 htb rate 500mbit ceil 1000mbit
prio 3
qdisc add dev eth0 parent 1:7 handle 10: sfq perturb 10
# all normal
tc filter add dev eth0 protocol ip parent 10: handle 2 flow hash keys
src,dst
# all traffic drop

Thanks!
Best regals, Badalian Vyacheslav
--

From: Jarek Poplawski
Date: Tuesday, June 30, 2009 - 1:57 am

Here are some hints (if we don't mention google ;-)
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.29.y.git;a=commitdiff;h=e5d...

Regards,
Jarek P.
--

From: Badalian Vyacheslav
Date: Tuesday, June 30, 2009 - 2:18 am

Yep. I was read this commit and create example based on it.
My question why its drop all traffic after add flow filter? Its simple
must group traffic to sfq qidsc by HASH like equal cost routing by KEY
if i understand. I need balance traffic in class/qdisc by KEY, but not
by sessions.

Any worked example will be great. In commit i see only syntax :)


--

From: Jarek Poplawski
Date: Tuesday, June 30, 2009 - 2:23 am

Any non-working example with this syntax? (divisor?)

--

From: Badalian Vyacheslav
Date: Tuesday, June 30, 2009 - 2:49 am

This example not approach? 

tc qdisc add dev eth0 root handle 1 htb default 7
tc class add dev eth0 parent 1: classid 1:7 htb rate 500mbit ceil 1000mbit prio 3
tc qdisc add dev eth0 parent 1:7 handle 10: sfq perturb 10

# all traffic go to class 1-7.

# Try group traffic by "src,dst" key

tc filter add dev eth0 protocol ip parent 10: handle 2 flow hash keys src,dst

--

From: Jarek Poplawski
Date: Tuesday, June 30, 2009 - 2:56 am

On Tue, Jun 30, 2009 at 01:49:11PM +0400, Badalian Vyacheslav wrote:

Try:
tc filter add dev eth0 protocol ip parent 10: handle 2 flow hash keys src,dst divisor 1024

--

From: Badalian Vyacheslav
Date: Tuesday, June 30, 2009 - 3:30 am

Outh! Very thanks! I'm so stupid. its simple :(

Also i look in code and see in flow_classify function this lines:

if (f->divisor)
        classid %= f->divisor;

classid generated in up.
Also i see to SFQ code and see that SFQ create 1024 hashes.
If we do not add divisor when added filter rule we get classid > 1024
and its not go to hash of SFQ (my example).
Also divisor must be > 0 because = NaN as i understand.
I not sure that it must be <= 1024 because it may use not in SFQ and i
don't know MAX size of other qdiscs but if it use only in in SFQ i think
we need to check <= SFQ_HASH_DIVISOR also?

Maybe "if" code must be changed to

if (f->divisor && f->divisor > 0)
        classid %= f->divisor;
else
        classid %= 1024;


How you think?

--

From: Jarek Poplawski
Date: Tuesday, June 30, 2009 - 4:09 am

I guess the author preferred to signal that something is misconfigured
with drops, but you could try to send a patch or ask him to make sure.

Btw., sfq isn't very useful with real 1024 or even much less flows, so
you should probably start looking for sch_drr with cls_flow examples
(there were a few of them on the list).

Best regards,
Jarek P.
--

Previous thread: (no subject) by Mrs Dianne Thompson on Monday, June 29, 2009 - 6:28 pm. (1 message)

Next thread: [PATCH] linux-2.4: br2684: fix double freeing skb by Frank Seidel on Tuesday, June 30, 2009 - 1:15 am. (2 messages)