7 people in this house - solve with limiters?

  • Ok, I have a problem, what I think should be a solution, and it doesn't do what I think it should do, so clearly I'm misunderstanding something.

    The problem is 7 people on a 3mbps DSL link is resulting in very spotty performance with ping times often to several hundred ms or higher.

    My goal is to allow each user to have up to the whole bandwidth of the link if available, but to give each user a separate queue such that no one user can pile up a huge number of packets that everybody else has to wait behind.

    The solution would seem to be to
    A - break down the traffic into queues by local IP address so that if one person piles up a bunch of traffic, my traffic can cut to the front of the line instead of getting stuck behind all his stuff.
    B - place global limits on flow to and from AT&T so that blobs of traffic don't whoosh through my queues and then pile up when they hit the pipe.

    I tried many different ways to get two rules applied to the same flow, had a horrbile time with floating rules, etc and finally settled on this scheme:

    • Create global rules as limiters controlling the total available bandwidth (no mask)

    • Create child queues under the global rules with a mask to break down the traffic

    • Create firewall rules for source network x.y.z.0/24 on the LAN that apply the child queues

    • (Eventually do something similar for the WAN for incoming connections)

    Now, after much fiddling and poking, when I look at the limiter info page, I see happy traffic through my global limiters, I see queues popping into existence for each ip address. If I reduce the global limit and run a speed test online, I can see the speed cut back as expected. All is well with the world.

    …but when I download on one machine, the ping times still go to heck on the others. Heavy download traffic on just one machine pushes ping times to 200ms. Upload traffic sends it into the thousands.

    I don't understand how the traffic to/from Host-A can swing the ping time on Host-B by more than the time it takes Host-A send and receive a single packet through its queues. Once that packet is gone, Host-B should get his turn, right? So, I expect traffic on each additional host to impact my ping times by as much as a few ms, not hundreds.

    Am I misunderstanding how limiter queues work?

    Any ideas for how to get the behavior I'm looking for?

    Thanks, devs, for the excellent tools and community for any advice on how to use them,
       - Tim.