| .TH TC 8 "January 2010" "iproute2" "Linux" |
| .SH NAME |
| drr \- deficit round robin scheduler |
| .SH SYNOPSIS |
| .B tc qdisc ... add drr |
| .B [ quantum |
| bytes |
| .B ] |
| |
| .SH DESCRIPTION |
| |
| The Deficit Round Robin Scheduler is a classful queuing discipline as |
| a more flexible replacement for Stochastic Fairness Queuing. |
| |
| Unlike SFQ, there are no built-in queues \-\- you need to add classes |
| and then set up filters to classify packets accordingly. |
| This can be useful e.g. for using RED qdiscs with different settings for particular |
| traffic. There is no default class \-\- if a packet cannot be classified, |
| it is dropped. |
| |
| .SH ALGORITHM |
| Each class is assigned a deficit counter, initialized to |
| .B quantum. |
| |
| DRR maintains an (internal) ''active'' list of classes whose qdiscs are |
| non-empty. This list is used for dequeuing. A packet is dequeued from |
| the class at the head of the list if the packet size is smaller or equal |
| to the deficit counter. If the counter is too small, it is increased by |
| .B quantum |
| and the scheduler moves on to the next class in the active list. |
| |
| |
| .SH PARAMETERS |
| .TP |
| quantum |
| Amount of bytes a flow is allowed to dequeue before the scheduler moves to |
| the next class. Defaults to the MTU of the interface. The minimum value is 1. |
| |
| .SH EXAMPLE & USAGE |
| |
| To attach to device eth0, using the interface MTU as its quantum: |
| .P |
| # tc qdisc add dev eth0 handle 1 root drr |
| .P |
| Adding two classes: |
| .P |
| # tc class add dev eth0 parent 1: classid 1:1 drr |
| .br |
| # tc class add dev eth0 parent 1: classid 1:2 drr |
| .P |
| You also need to add at least one filter to classify packets. |
| .P |
| # tc filter add dev eth0 protocol .. classid 1:1 |
| .P |
| |
| Like SFQ, DRR is only useful when it owns the queue \-\- it is a pure scheduler and does |
| not delay packets. Attaching non-work-conserving qdiscs like tbf to it does not make |
| sense \-\- other qdiscs in the active list will also become inactive until the dequeue |
| operation succeeds. Embed DRR within another qdisc like HTB or HFSC to ensure it owns the queue. |
| .P |
| You can mimic SFQ behavior by assigning packets to the attached classes using the |
| flow filter: |
| |
| .B tc qdisc add dev .. drr |
| |
| .B for i in .. 1024;do |
| .br |
| .B "\ttc class add dev .. classid $handle:$(print %x $i)" |
| .br |
| .B "\ttc qdisc add dev .. fifo limit 16" |
| .br |
| .B done |
| |
| .B tc filter add .. protocol ip .. $handle flow hash keys src,dst,proto,proto-src,proto-dst divisor 1024 perturb 10 |
| |
| |
| .SH SOURCE |
| .TP |
| o |
| M. Shreedhar and George Varghese "Efficient Fair |
| Queuing using Deficit Round Robin", Proc. SIGCOMM 95. |
| |
| .SH NOTES |
| |
| This implementation does not drop packets from the longest queue on overrun, |
| as limits are handled by the individual child qdiscs. |
| |
| .SH SEE ALSO |
| .BR tc (8), |
| .BR tc-htb (8), |
| .BR tc-sfq (8) |
| |
| .SH AUTHOR |
| sched_drr was written by Patrick McHardy. |