HFSC and what the parameters mean

Andrew andrew at ugh.net.au
Tue Oct 9 16:54:46 PDT 2007

I'm trying to make sure I understand the meaning of bandwidth, realtime 
and linkshare when it comes to hfsc queues.

Given the lines:

altq on $up_int bandwidth 98Mb hfsc queue { ex_q1, ex_q2 }
queue ex_q1 bandwidth 90% priority 6 hfsc(realtime 80% linkshare 90%)
queue ex_q2 bandwidth 10% priority 5 hfsc(realtime 0% linkshare 10% 

My understanding is the bandwidth declaration on line 1 (the altq line) 
sets the total available bandwidth for altq to use. It will never send out 
traffic faster than this. In this case I have set it to 98Mb, being my 
(optimistic?) guess at the usable bandwidth on 100Mb ethernet.

The bandwidth parameter on the ex_q lines, from my reading on the pf.conf 
man page sets the maximum bandwidth this child queue can use. This can't 
add up to more than 100%. Given that, if I wanted to have 2 queues, both 
of which could use 100% of the bandwidth but one given priority in case of 
congestion what value should I use here? I saw somewhere that in the case 
of hsfc that this bandwidth statement was an alias for the linkshare 
setting so that would mean the comment in the man page doesn't apply when 
using hfsc?

realtime is the minimum amount of bandwidth this queue should be provided 
with. linkshare is the amount of the packet queue (the queue reffered to 
by the qlimit option) that will be used for this queue if congestion 
occurs and packets need queueing. priority controls the order in which 
packets are dequeued from the packet queue.

That should mean that the above config lines create 2 queues - ex_q1 and 
ex_q2. Traffic in queue 1 gets to use 80% of the 98Mb of available 
bandwidth regardless of how much other traffic there may be. Traffic in 
queue 2 gets no guarentees but can use any bandwidth that is otherwise 
unused. How is the share of the remaining 20% divided? As the priority of 
queue 1 is higher (and the question only comes into play when there is 
more traffic than bandwidth) queue 1 should always get the bandwidth so is 
this not the same as setting realtime parameter to 100%?



More information about the freebsd-pf mailing list