Thank you both for your time and efforts.
Is there a white paper that describes queuing more clearly than the linux bandwidth control how to?
I am trying to convert what you have said into ‘linux think’.
I guess my basic problem is a confusion between.
1.) Guaranteeing they won’t get more than 5, i.e granting a limited pipe, and
2.) Guaranteeing they won’t get less than 5, i.e granting a guaranteed pipe or CIR.
CIR means committed information rate.
Normally if one has 100 megs and commits to 25 megs per customers, then you just
put 4 customers on the link and you are done. Each might get more than 25 megs, but
never less barring tcp connection hogging.
But sometimes you just want to make sure that a higher priority customers gets more than
the others when he needs it.
Imagine the following, an ftp server that has a 10 megabit port and can deliver 10 megs
connected to a router on eth0 and 2 customers on eth1, where eth0 and eth1 are 100 meg ports.
The queuing software runs on the router, not the server.
I believe I can create a queue that limits both customers to 7 megs max and that’s
it regardless of what bandwidth is still unused, without having to ‘grab’ the queues by
limiting the envelope queue to 90 percent of 10 megs.
Which customer gets the full 7 megs max would depend on priority, the higher priority one would get it,
and the lower one would get what’s left.
Is that right?
Is that all we are doing here? Or is there really a separate command to guarantee that one
won’t get less than 7?
GRABBING THE QUEUE
As I remember ‘grabbing the queue’ was only necessary when using particular queues like those designed to share bandwidth when the pipe was full.
For example, imagine the same setup above, and again there are two customers, but customer 2 likes
to open up 9 connections to the ftp server to get more bandwidth ahead of customer 1 who has no clue about this, he only opens up one connection.
With both customers drawing full bandwidth, the ftp server is putting out 10 megs, and nothing
is queuing in the router because eth0/eth1 at 100 megs each can handle it easily but customer one is getting 1 meg and customer 2 is getting 9.
So one creates a .90x10 or 9 meg max pipe on eth1 facing the customers which will begin queuing
packets before bandwidth usage gets to 10 megs. Then we apply a esfq algorithm, hashed by customer IP, that gives each customer
50 percent of the bandwidth regardless of how many connections they open up. esfq means extended stochastic fair queuing.
This scheme only works when the pipe is full, but is meaningless anyway if the pipe is not full as
everyone is getting what they are going to get anyhow limited by other factors outside of the control of the router.
Do I have this all right?
Or say the router’s customer port eth1 is a 10 meg port, and the ftp server can deliver 20 megs.
Now with both customers drawing, the 10 meg pipe is full, again one needs to define a queue at 9 megs on eth1 to make sure the queuing software grabs the packets and not the eth1 interface, and one applies the same esqf algorithm
to split the bandwidth fair share between the two customers.
I am almost positive this last one is right.
Homer W. Smith
CEO Lightlink.