kern/189720: [ipfw] [patch] pps action for ipfw
Julian Elischer
julian at freebsd.org
Fri May 30 14:39:49 UTC 2014
On 5/29/14, 11:30 PM, bycn82 wrote:
> I got it,
>
> if the HZ=3, it always cannot meet the " 1 packet per 500ms" perfectly.
> But if we to "X packet per Y ticks", actually the result is the same, still cannot meet the "1 packet per 500 ms" perfectly, instead, the "packet per Y ticks" will force user to use " X packet per Y*300 ms". And the user need to understand how many millisecond each tick is .
on e can write an implementation that notes how much the calculation
was off by for each tick and corrects the number for the next tick..
e.g. with Hz=10, 8pps should give sometimes 1ppt and sometimes 0ppt
but a simple calculation will always give 0 every tick
so you need to have some way of carrying forward 'unused bandwidth' so
that teh calculation looks like (over a second)
ppt(real) ppt(int)
0.8 (0)
0.8+0.8=1.6 (1)
0.6+0.8=1.4 (1) (subtract 1 from 1.6, and then add the 0.8 per tick)
0.4+0.8=1.2 (1)
0.2+0.8=1.0 (1)
0.0+0.8=0.8(0)
(sequence repeats)
0.8+0.8=1.6 (1)
0.6+0.8=1.4 (1)
0.4+0.8=1.2 (1)
0.2+0.8=1.0 (1)
0.0+0.8=0.8(0)
if you use any of the the int(ppt) in a tick you subtract the amount
used. if not you allow it to build, up to some maximum value.
(sequence repeats)
0.8+0.8=1.6 (1) (not used)
1.6+0.8=2.4 (2) (not used)
2.4+0.8=3.2 (3) (not used)
3.2+0.8=4.0 (4) (4 packets allowed through further packets held or
dropped)
0.0+0.8=0.8(0)
0.8+0.8=1.6 (1) (not used)
1.6+0.8=2.4 (2) (not used)
2.4+0.8=3.2 (3) 1 packet used.. 1.0 subtracted
2.2+0.8=3.0 (4) (4 packets allowed through further packets held or
dropped)
0.0+0.8=0.8(0)
etc.
one does this with some form of fixed point arithmetic as floating
point isn't used in the kernel.
> So I will update it this weekend.
>
>
>> -----Original Message-----
>> From: owner-freebsd-ipfw at freebsd.org [mailto:owner-freebsd-
>> ipfw at freebsd.org] On Behalf Of 'Luigi Rizzo'
>> Sent: 29 May, 2014 23:20
>> To: freebsd-ipfw at FreeBSD.org
>> Subject: Re: kern/189720: [ipfw] [patch] pps action for ipfw
>>
>> The following reply was made to PR kern/189720; it has been noted by
>> GNATS.
>>
>> From: 'Luigi Rizzo' <rizzo at iet.unipi.it>
>> To: bycn82 <bycn82 at gmail.com>
>> Cc: bug-followup at FreeBSD.org
>> Subject: Re: kern/189720: [ipfw] [patch] pps action for ipfw
>> Date: Thu, 29 May 2014 17:17:59 +0200
>>
>> On Thu, May 29, 2014 at 11:06:27PM +0800, bycn82 wrote:
>> >
>> >
>> > -----Original Message-----
>> > From: Luigi Rizzo [mailto:rizzo at iet.unipi.it] > Sent: 29 May, 2014 22:12 > To:
>> bug-followup at FreeBSD.org; bycn82 at gmail.com > Subject: kern/189720:
>> [ipfw] [patch] pps action for ipfw > > Hi, > I have looked at the update from
>> May 13th but it is not ready yet, the code assumes HZ=1000 so 1 tick=1ms.
>> >
>> > The translation can be done in userspace or in the kernel.
>> > I would prefer the latter.
>> > I see,
>> > If the HZ=3, that means every tick=333ms > And if the user wants to ??? 1
>> packet per 500ms???, then in the backend will not do the exactly the same as
>> what user expect.
>> >
>> > Actually the implementation should be ???packets per ticks???, so how
>> about this? Instead of translate it in codes. Why not update the document,
>> and explain it to the user in the document ?
>>
>> 'Packets per tick' this is not a useful specification since the tick's duration is
>> unknown to the user.
>> Depending on the platform you can have HZ ranging from 15-20 (on windows)
>> to 10000 or even more. Normal values are 100, 250, 1000 but you just cannot
>> know what you are going to get.
>>
>> Yes there are rounding issues, and yes it is boring to write code to handle
>> them.
>>
>> luigi
>> _______________________________________________
>> freebsd-ipfw at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-ipfw
>> To unsubscribe, send any mail to "freebsd-ipfw-unsubscribe at freebsd.org"
> _______________________________________________
> freebsd-ipfw at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-ipfw
> To unsubscribe, send any mail to "freebsd-ipfw-unsubscribe at freebsd.org"
>
More information about the freebsd-ipfw
mailing list