Subject: Re: dummy as IMQ replacement

From: Andy Furniss <[email-masked]>
Date: Fri, 04 Feb 2005 00:33:54 +0000

jamal wrote:
> On Tue, 2005-02-01 at 09:53, Andy Furniss wrote:
> 
>>jamal wrote: 
>>
>>>I know for a while the Bart howto was mislabeling the meaning of
>>>policing - not sure about shaping. 
>>>Shaping has a precise definition that involves a queue and a
>>>non-working-conserving scheduler in order to rate control. This doesnt
>>>matter where it happens (egress or ingress). Policing on the other hand
>>>is work conserving etc.
>>
>>Ok, but shaping to LARTC posters means being able to classify traffic 
>>and set up sharing/priorotising of classes. 
>>
>>This is the reason most need 
>>to be able to queue - they want to use htb/hfsc for complicated setups 
> 
> 
> Close - but you are missing the rate control requirement. 
> You can do the above with prio qdisc for example but that does not
> equate to shaping. Understood about Lartc users definitions. However,
> note that they are influenced by what people tell them or what people
> write in docs. Help in making sure the redefinition doesnt propagate.
> Theres a very precise meaning to shaping and it is _exactly_ the way i
> described it above. Clue people who ask questions.

I see your point.

> 
> 
>>and until now were not aware that it was even possible to replicate this 
>>in policers 
> 
> 
> I am sure i have written about 50 emails on this topic over the last 5
> years;->  look at the archives. I even joked about it here:
> http://www.cyberus.ca/~hadi/patches/action/README over 2 years ago.
> look at the text reading "it must be the summer heat again; weve had
> someone doing that every year around summer"
> Unfortunately people who are writting docs havent picked it up for
> whatever reasons. I am hoping we finaly get this documented somewhere.
> Can you help fix this?

I could write up some what I did type stuff. Once I work out what to do 
and how to do it :-)

> 
> 
>>and if it becomes feasable it will probably appear daunting 
>>to do compared with HTB and all the existing docs/scripts.
>>
> 
> 
>>>From a usability perspective i agree with you. 
> Its still doable is all i can say ;-> (but you are correct in that it
> may not be for the weak hearts)
> As a reminder of some of the big discussions on shared and hierachical
> policing - look at the many many discussions I had with devik on this
> topic a few years back.
> It resulted in the birth of HTB (which is essentially a hierachy of the
> same token bucket meters used in policers; hierachical shared policers
> are doable - look at iproute2/examples/diffserv). HTB otoh has proven
> useful due to simplicty - so it stands on its own merit now.
> I think there may be peculiar occasions where you may need to have
> queues to shape traffic to a local app - but thats peculiar. 
> 

I'll have to read up abit.

> 
>>For me, I think queuing and dropping is better than just dropping, you 
>>can affect tcp by delaying eg. 1 ack per packet rather than delayed acks 
>>and clocking out the packets helps smooth burstiness, 
> 
> 
> True - but i question the usefulness of localy terminating TCP packets
> being shaped. For packets being forwarded, the shaping happens on
> egress.

I know it's a bit odd, but then if I had just one PC I would want to 
rather than police for reasons below.

> 
> 
>>which hurts 
>>latency if you are doing traffic control from the wrong end of the 
>>bottleneck.
>>
> 
> 
> Not sure i followed the latency connection.

I am shaping a relativly slow link from the wrong end. My objective is 
to avoid the 600ms buffer at ISP/Teleco getting filled as it adds 
latency for my interactive traffic. If I have a dozen bulk tcp 
connections running then policing encourages each to send data in bursts 
at link speed, because delayed acks will pair packets and say a group of 
four passes without dropping it causes another group of four from that 
connection at link speed. Add to that the different or variable rtts of 
the 12 connections it means that there will be times when large bunches 
of big packets arrive together and delay the interactive traffic.

If I shape and dequeue each connection round robin and the aggeragate 
rate is below link speed then the aggregate flow is smoothed better. If 
the rates are low enough I will delay longer than delayed ack timers and 
get one packet per ack aswell. It's still not perfect of course.

> 
> 
>>As long as I could use netfilter to mark/classify connections then I 
>>think I can sort my setup, don't know about others.
>>
>>
> 
> 
> Great. yes, you can.
> 
> 
>>>Are pre/post routing sufficient as netfilter hooks for your case?
>>
>>Yes but depends on where in pre/postrouting. For me after/before nat, as 
>>I say above though I could workaround if I classify connections with 
>>netfilter. For others as long as they can filter on a mark/classify set 
>>in forward, then I think it will be OK for them.
>>
> 
> 
> You can mark in netfilter or even in tc and use those marks in both
> places.

Great.

> 
> 
> 
>>I am not sure what exactly can can't be done in your example:
>>
>> ># redirect all IP packets arriving in eth0 to dummy0
>> ># use mark 1 --> puts them onto class 1:1
>> >$TC filter add dev eth0 parent ffff: protocol ip prio 10 u32 \
>> >match u32 0 0 flowid 1:1 \
>>
>>What I can do here depends where it hooks packets.
>>
>> >action ipt -j MARK --set-mark 1 \
>>
>>I don't know what table I am using - may be OK as long as I can test for 
>>a mark I made earlier in the egress dummy case or test connmark/state I 
>>set for that connection in the ingress case.
>>
> 
> 
> That would be doable. Thanks for taking the time Andy.

Glad I can help.

Andy.

> cheers,
> jamal