Is pfSense/HFSC the best option for me? (re: very simple home network)

  • I have a fairly simple home network with a couple of computers and a bunch of video game consoles but I will also be adding VOIP in a few days.

    I have a few classes of traffic:  (listed in order of priority)

    #1 - VOIP
    #2 - ACK packets
    #3 - Games
    #4 - HTTP
    #5 - Bulk traffic (Usenet/NTTP, Bittorrent, etc)

    I don't really need to limit the bandwidth of anything though.  For example, if there are no priority #1 - #4 packets than my bulk traffic may use 100% of the bandwidth.  However, if VOIP traffic exists than it takes absolute 100% priority of bandwidth.  (likewise for everything else in the chain)

    I've tried reading some HFSC articles and I somewhat understand it but it's still confusing and doesn't seem to be what I need.

    Is ALTQ's PRIQ what I should be using?  (I wish pfSense 1.2.3 implemented this!) :(

    Is there still any reason to use HFSC for me?

  • Use the M1 D M2 parameters for bandwidth share and set the realtime settings to 1Kb or 1% for the queues.

    If you know you need to allocate 256Kb/s for 200ms for voip every second and 100Kb/s thereafter, then set your voip queue to M1(256Kb) D(200) M2(100Kb), Priority 6.

    Lets say you need 3% - 9% of Wan Acks, then set the Realtime M2 to 3% and the Bandwidth share to 9%, Priority 7.
    This strictly reserves 3% of upload for wan acks and allows at least 9% of available bandwidth for Wan Acks if it is required.

    You will then set similar queues for Games (Priority 5), HTTP(Priority 2, create another queue for this) etc.
    The difference being that you'll be setting 1% realtime and 1% bandwidth share for these queues (plausibly more bandwidth share for Games because they get penalized quite badly for packet loss).

    Finally, for bulk traffic, just send it to the qWanDef/ qLanDef (Priority 1) with 1% bandwidth share and realtime of 1Kb.

    This effectively turns the HFSC into a pseudo CBQ but with more flexibility.  Basically, realtime values are reserved all the time.  Even when the queue is empty.  Bandwidth share is allocated for as long as there are packets to clear in the queue.

    Lets assume you set 50% bandwidth share for a certain queue.  It doesn't mean that 50% of the bandwidth will go to that queue all the time.
    If there are only 2 packets in that queue, it clears at 50% of the available bandwidth and once both are sent out, the 50% goes to be shared amongst the other queues (I'm not sure how it's shared but I suspect it's strict priority; could be priority weighted round robin too).

  • a bit old thread, but the same question…
    so, dreamslacker, you say that this example u wrote would help in our case (yes i've got the same problem as sofakng)?


Log in to reply