Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jul 2011 15:45:45 -0400
From:      Calomel Org <infallibilismindefeasibility@calomel.org>
To:        Ermal Lu?i <eri@freebsd.org>
Cc:        misc@openbsd.org, freebsd-pf@freebsd.org
Subject:   Re: pf ALTQ bandwidth limited to a 32bit value (4294Mb)
Message-ID:  <20110707194545.GB6463@calomel.org>
In-Reply-To: <CAPBZQG1tp9HE7X06YqKGAJJw0y7kOxTgbGnYEQRCMEjCg=AOeQ@mail.gmail.com>
References:  <20110706152506.GA26334@calomel.org> <CAPBZQG1tp9HE7X06YqKGAJJw0y7kOxTgbGnYEQRCMEjCg=AOeQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Ermal,

Thanks for the diff. When we tried it on FreeBSD 8.2-p2, ALTq would no
long start. We also looked into the source under
/usr/src/sys/contrib/altq/altq. Sadly, most of the changes we made
either broke altq completely or had no effect. 

If you have any other ideas we would be happy to try them out.

--
   Calomel @ https://calomel.org
   Open Source Research and Reference


On Thu, Jul 07, 2011 at 09:28:13AM -0400, Ermal Lu?i wrote:
>On Wed, Jul 6, 2011 at 5:25 PM, Calomel Org
><infallibilismindefeasibility@calomel.org> wrote:
>> ALTQ using hfsc is limited to a maximum parent bandwidth of 4294Mb.
>> This value is 2^32 or 4,294,967,296 bits. If you set the bandwidth any
>> higher, altq will flip back to zero. This "bug" was found when trying
>> to test 10 gigabit and 40 gigabit bandwidth models. These tests were
>> done on OpenBSD 32bit and 64bit as well as FreeBSD 32bit and 64bit.
>>
>> If anyone else can verify this independently and agree with the
>> results I would be happy to register it as a bug.
>>
>>
>> How to replicate:
>>
>> A quick test is setting the bandwidth to 4294Mb and doing a pfctl -sq
>> to check altq.
>>
>> ?altq on $ExtIf bandwidth 4294Mb hfsc queue { ack, web}
>> ?queue root_em0 on em0 bandwidth 4.29Gb priority 0 {ack, web}
>>
>> Now set the bandwidth to 4295Mb and notice altq has flip to zero and
>> add the 32.70Kb difference.
>>
>> ?altq on $ExtIf bandwidth 4295Mb hfsc queue { ack, web }
>> ?queue root_em0 on em0 bandwidth 32.70Kb priority 0 {ack, web}
>>
>> Again, we can set the bandwidth to a multiple of two(2) to 8589Mb.
>> The bandwidth value flips to zero once and the result is 4.29Gb.
>>
>> ?altq on $ExtIf bandwidth 8589Mb hfsc queue { ack, web}
>> ?queue root_em0 on em0 bandwidth 4.29Gb priority 0 {ack, web}
>>
>> If we add one more megabit to 8590Mb the value flips twice and we are
>> left with 65.41Kb.
>>
>> ?altq on $ExtIf bandwidth 8590Mb hfsc queue { ack, web}
>> ?queue root_em0 on em0 bandwidth 65.41Kb priority 0 {ack, web}
>>
>
>It is true that there is a limit because of data type used.
>Though it cannot be fixed easily on i386 but on amd64 this should work.
>
>Index: sys/contrib/pf/net/pfvar.h
>===================================================================
>--- sys/contrib/pf/net/pfvar.h  (revision 223824)
>+++ sys/contrib/pf/net/pfvar.h  (working copy)
>@@ -1491,13 +1491,13 @@
>        /* scheduler spec */
>        u_int8_t                 scheduler;     /* scheduler type */
>        u_int16_t                tbrsize;       /* tokenbucket regulator size */
>-       u_int32_t                ifbandwidth;   /* interface bandwidth */
>+       u_int64_t                ifbandwidth;   /* interface bandwidth */
>
>        /* queue spec */
>        char                     qname[PF_QNAME_SIZE];  /* queue name */
>        char                     parent[PF_QNAME_SIZE]; /* parent name */
>        u_int32_t                parent_qid;    /* parent queue id */
>-       u_int32_t                bandwidth;     /* queue bandwidth */
>+       u_int64_t                bandwidth;     /* queue bandwidth */
>        u_int8_t                 priority;      /* priority */
> #ifdef __FreeBSD__
>        u_int8_t                 local_flags;   /* dynamic interface */
>
>
>>
>> Thanks.
>>
>> --
>> ? Calomel @ https://calomel.org
>> ? Open Source Research and Reference
>> _______________________________________________
>> freebsd-pf@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-pf
>> To unsubscribe, send any mail to "freebsd-pf-unsubscribe@freebsd.org"
>>
>
>
>
>-- 
>Ermal
>_______________________________________________
>freebsd-pf@freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-pf
>To unsubscribe, send any mail to "freebsd-pf-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110707194545.GB6463>