Shaping for dummies

  • Hello All
    First thanks to everyone who contributes and supports Pf
    it truely creates an awsome device

    That said… time to beg for some assistance
    I am having great difficulty getting a grasp on the whole traffic shaping thing
    its my own shortcoming but normally I can eventually find and follow/  figure things out
    by finding some instructions on the net but
    I have searched and read everything I can find and it seems to be difficult for even a veteran to understand let alone a novice
    there does not seem to be any simple to follow instructions outlining the basics of HFSC
    and que structure or a means of basic rules for determining efficient que settings

    I tried dsusans spreed sheet but nearly lost the rest of my hair trying to make sense of it all
    m1 m2 red ecn I thought my head might explode

    I have been through all the wiki and forum info I can find and as I try various things I read
    I continually get errors regarding the sum of the child exceeding the parent ect..after I try them
    I have used the wizard but as I have read these settings are not particullarly optimal for things like qwanacks ect..

    I am using 1.2-RELEASE
    The box is built on a AMD Athlon(tm) XP 2000+ with 1.5 Gig of ram
    my connection is 12meg dwn/1.6 up

    Would anyone be so kind as to recommend what I should use in the default queues values
    I have the default ones listed below that show after completing the wizard
    ( I have played with only the percent values on a few trying to get rid of the error and it is now error free but it does not seem to be performing as well as I would expect it too given my connection speed)
    Justcant seem to hit on a way to set qwanacks to be error free at the recommended
    wiki shaping page setting of 60-65%

    0  No  1520 Kb    qwanRoot     
    0  No  11400 Kb    qlanRoot     
    1  Yes  5 %    qwandef     
    1  Yes  1 %    qlandef     
    ACK    7  No  45 %    qwanacks     
    ACK    7  No  40 %    qlanacks     
    7  No  10 %    qVOIPUp     
    7  No  10 %    qVOIPDown     
    RED ECN    1  No  1 %    qP2PUp     
    RED ECN    1  No  1 %    qP2PDown     
    5  No  10 %    qGamesUp     
    5  No  10 %    qGamesDown     
    RED ECN    4  No  25 %    qOthersUpH     
    RED ECN    4  No  30 %    qOthersDownH     
    RED ECN    2  No  1 %    qOthersUpL     
    RED ECN    2  No  1 %    qOthersDownL

    Any information on this black art and how to properly configure shaping
    or an explanation of it laymens terms would be most graciously appreciated

    Thanks & Best Regards


  • Its pretty simple :)

    bandwidth is the same as linkshare this is a best effort schduling meaning it will try to satisfy this value but does not guarantee that it cannot go higher or lower.

    realtime is a lower limit it does guarantee that traffic on this queue will not go below the configured limit.  These queues are served first of all others meaning that these queues have the highest priority over others.

    upperlimit is just as the name says an upper limit for the queue. Let say you have configured a queue with bandwidth 512Kbit/s and you do not want this queue to use more than 712Kbit/s of available bandwidth. That's where you can use upperlimit.

    Combining these three alltogether is not your scope i guess.

    Recommandation for a setup.
    Data/Packets that are sensitive to delays like VoIP, video,…. always go to a queue that has realtime configured(at least m2 part of it)
    Data/Packets that need to have a certain amount of bandwidth like http, email go to queues with linkshare set(at least m2)
    Data/Packets that can slow down the link or that need to be controlled or not surpass a certain limit are setuped with upperlimit(at least m2 set).

    RED/ECN/ are just technologies to avoid congestion at your router.
    RED tries to drops packets to aviod congestion while ECN tries to notify the interested parties of congestion might occur and they need to slow.

  • I forgot the values:
    For your q{lan,wan}ack i would go
    linkshare m2 = 80% realtime m2 = 40%

  • Thank You for the nice description Ermal
    that explains the service curve section to me nicely
    and from your information I am sure I will be able to configure those

    if you could tolerate a couple more dummie questions it would be helpfull

    What are qwandef and qlandef I see them listed but do not understand
    what they refer to
    ques like p2p up and down or voip up/ down are self explanitory as to
    what bandwidth they limit but qwandef and qlandef not so much

    Going by your values for q(lan,wan) ack you specify the m2s
    but not the main Bandwidth category ( the one at the top )
    Should I have just left all those at the wizard values and then
    only adjust the Service Curve section values for my que preferences

    If not Could you recommend decent starting percentage values for me to use
    on my ques in the bandwidth column so I can start with that and tweak them as needed

    Thank You for taking the time to reply
    I know your a busy guy and a major contributor to pf
    so your patience explaining this to me truely is appreciated

  • The "bandwidth" up top will be overriden by the "realtime" value, so it's not really representative. You should set it to the same as the realtime values so that you can properly evaluate your queues from the main Queues screen, that's all.
    qwanDef and qlanDef are the default queues. Packets that are not matched to other queues will go there. It should be set lower than your prioritary queues, but higher than your penalty queues (if you have any, like P2P).

  • Hi stechnique
    I always seem to get parent/child errors cant seem to get away from them
    even setting Ermals recommended q{lan,wan}ack values of
    linkshare 80% m2 realtime m2 = 40% generated a similar error
    I cant seem to get qwanacks or qlanacks to 40% without any errors

    I am using the wizards gererated default ques as listed above
    if someone were to list what decent error free starting values
    Should be set in the bandwidth column for each que I think
    it would be most helpful
    although as you said
    The "bandwidth" up top will be overriden by the "realtime" value
    So mayby I am concerning to much with it
    but I definately cant get it to be the same as
    the realtime value without any errors

    Would it be better to not use a percentage values at all and actually
    specify it in terms of Kb

    It seems like such a basic principle on the surface
    having ques and X bandwith alloted to each of them
    Then steering specific traffic to each que according to its priority

    I understand what I would like to acomplish but I am failing
    horribly at making it all happen

    Objectives I would like to achieve:

    que for voip of say 128 down 64 up max
    Small game que of say 512 down 128 up max
    p2p que of 256 down 64 up max
    Fast dns and ping times
    ack with high enough settings to allow full speed downloads if bandwidth is available
    Maintain Web and email performance above all else
    Decent performance with streaming audio and video media like you tube ect.
    Catch all for anything else sent to p2p que

    Thanks for your time and assistance guys

  • que for voip of say 128 down 64 up max
    Small game que of say 512 down 128 up max
    p2p que of 256 down 64 up max

    If your goal is fixed bitrates, why are you trying to setup queues with percentages?
    Set your queues to those values…

  • Well yeah the GUI in 1.2 might give you some glitches on the flexibility of th eshaper.
    That's why it was improved in 1.3.

    q{wan,lan}def as stechnique said is just the queue that hold the traffic that is not catched by the other queues.
    Whe you set both bandwidth and realtime its that if realtime is statisfied bandwidth will not be used otherwise realtime will be satisfied and the queue will have a chance to get more bandwidth through linkshare. So its not totally 'overwritten' its more like cumulative.
    IMHO you can get very confused with HFSC surely if you begin mixing the service curves.
    But some simple words:
    If you mix realtime and linkshare it means basically that you need realtime bandwidth allocated to this traffic and after we have the minimum guarantee than let linkshare give us some more available one.
    If you mix realtime and upperlimit, not really any meaning.
    If you mix linkshare with upperlimit you get a best effort scheduling with an upperlimit but not a lower one.
    If you mix realtime, linkshare and upperlimit you get a range of bandwidth allocated for this traffic but just lower limit guaranteed since you cannot guarantte the upperlimit will be always be reached just that it want go higher than that.
    I do not see other uses of the combinations other than playing with m1,d and m2 which surely is not what you are after.

    Hope it helps.

  • I forgot again,

    for bandwidth just live the defaults of the wizards and just fill//clear the service curve parts.

  • stechnique
    well the goal was to approximate this with percentages
    uasing a percentile seemed easier I only specified the values above
    because I thought that may be better since the percentage values
    are giving me such a hard time ( thinking by specifiying it I can make shure
    the math of the child ques doesnt exceed 100% of the parent ques )
    which should fix the errors I get

    Ermal that is a most helpful explanation
    hopefully this may help some others as well

    Thank you muchly

Log in to reply