| .TH PRIO 8 "16 December 2001" "iproute2" "Linux" |
| .SH NAME |
| PRIO \- Priority qdisc |
| .SH SYNOPSIS |
| .B tc qdisc ... dev |
| dev |
| .B ( parent |
| classid |
| .B | root) [ handle |
| major: |
| .B ] prio [ bands |
| bands |
| .B ] [ priomap |
| band band band... |
| .B ] [ estimator |
| interval timeconstant |
| .B ] |
| |
| .SH DESCRIPTION |
| The PRIO qdisc is a simple classful queueing discipline that contains |
| an arbitrary number of classes of differing priority. The classes are |
| dequeued in numerical descending order of priority. PRIO is a scheduler |
| and never delays packets - it is a work-conserving qdisc, though the qdiscs |
| contained in the classes may not be. |
| |
| Very useful for lowering latency when there is no need for slowing down |
| traffic. |
| |
| .SH ALGORITHM |
| On creation with 'tc qdisc add', a fixed number of bands is created. Each |
| band is a class, although is not possible to add classes with 'tc qdisc |
| add', the number of bands to be created must instead be specified on the |
| command line attaching PRIO to its root. |
| |
| When dequeueing, band 0 is tried first and only if it did not deliver a |
| packet does PRIO try band 1, and so onwards. Maximum reliability packets |
| should therefore go to band 0, minimum delay to band 1 and the rest to band |
| 2. |
| |
| As the PRIO qdisc itself will have minor number 0, band 0 is actually |
| major:1, band 1 is major:2, etc. For major, substitute the major number |
| assigned to the qdisc on 'tc qdisc add' with the |
| .B handle |
| parameter. |
| |
| .SH CLASSIFICATION |
| Three methods are available to PRIO to determine in which band a packet will |
| be enqueued. |
| .TP |
| From userspace |
| A process with sufficient privileges can encode the destination class |
| directly with SO_PRIORITY, see |
| .BR socket(7). |
| .TP |
| with a tc filter |
| A tc filter attached to the root qdisc can point traffic directly to a class |
| .TP |
| with the priomap |
| Based on the packet priority, which in turn is derived from the Type of |
| Service assigned to the packet. |
| .P |
| Only the priomap is specific to this qdisc. |
| .SH QDISC PARAMETERS |
| .TP |
| bands |
| Number of bands. If changed from the default of 3, |
| .B priomap |
| must be updated as well. |
| .TP |
| priomap |
| The priomap maps the priority of |
| a packet to a class. The priority can either be set directly from userspace, |
| or be derived from the Type of Service of the packet. |
| |
| Determines how packet priorities, as assigned by the kernel, map to |
| bands. Mapping occurs based on the TOS octet of the packet, which looks like |
| this: |
| |
| .nf |
| 0 1 2 3 4 5 6 7 |
| +---+---+---+---+---+---+---+---+ |
| | | | | |
| |PRECEDENCE | TOS |MBZ| |
| | | | | |
| +---+---+---+---+---+---+---+---+ |
| .fi |
| |
| The four TOS bits (the 'TOS field') are defined as: |
| |
| .nf |
| Binary Decimal Meaning |
| ----------------------------------------- |
| 1000 8 Minimize delay (md) |
| 0100 4 Maximize throughput (mt) |
| 0010 2 Maximize reliability (mr) |
| 0001 1 Minimize monetary cost (mmc) |
| 0000 0 Normal Service |
| .fi |
| |
| As there is 1 bit to the right of these four bits, the actual value of the |
| TOS field is double the value of the TOS bits. Tcpdump -v -v shows you the |
| value of the entire TOS field, not just the four bits. It is the value you |
| see in the first column of this table: |
| |
| .nf |
| TOS Bits Means Linux Priority Band |
| ------------------------------------------------------------ |
| 0x0 0 Normal Service 0 Best Effort 1 |
| 0x2 1 Minimize Monetary Cost 0 Best Effort 1 |
| 0x4 2 Maximize Reliability 0 Best Effort 1 |
| 0x6 3 mmc+mr 0 Best Effort 1 |
| 0x8 4 Maximize Throughput 2 Bulk 2 |
| 0xa 5 mmc+mt 2 Bulk 2 |
| 0xc 6 mr+mt 2 Bulk 2 |
| 0xe 7 mmc+mr+mt 2 Bulk 2 |
| 0x10 8 Minimize Delay 6 Interactive 0 |
| 0x12 9 mmc+md 6 Interactive 0 |
| 0x14 10 mr+md 6 Interactive 0 |
| 0x16 11 mmc+mr+md 6 Interactive 0 |
| 0x18 12 mt+md 4 Int. Bulk 1 |
| 0x1a 13 mmc+mt+md 4 Int. Bulk 1 |
| 0x1c 14 mr+mt+md 4 Int. Bulk 1 |
| 0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1 |
| .fi |
| |
| The second column contains the value of the relevant |
| four TOS bits, followed by their translated meaning. For example, 15 stands |
| for a packet wanting Minimal Monetary Cost, Maximum Reliability, Maximum |
| Throughput AND Minimum Delay. |
| |
| The fourth column lists the way the Linux kernel interprets the TOS bits, by |
| showing to which Priority they are mapped. |
| |
| The last column shows the result of the default priomap. On the command line, |
| the default priomap looks like this: |
| |
| 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 |
| |
| This means that priority 4, for example, gets mapped to band number 1. |
| The priomap also allows you to list higher priorities (> 7) which do not |
| correspond to TOS mappings, but which are set by other means. |
| |
| This table from RFC 1349 (read it for more details) explains how |
| applications might very well set their TOS bits: |
| |
| .nf |
| TELNET 1000 (minimize delay) |
| FTP |
| Control 1000 (minimize delay) |
| Data 0100 (maximize throughput) |
| |
| TFTP 1000 (minimize delay) |
| |
| SMTP |
| Command phase 1000 (minimize delay) |
| DATA phase 0100 (maximize throughput) |
| |
| Domain Name Service |
| UDP Query 1000 (minimize delay) |
| TCP Query 0000 |
| Zone Transfer 0100 (maximize throughput) |
| |
| NNTP 0001 (minimize monetary cost) |
| |
| ICMP |
| Errors 0000 |
| Requests 0000 (mostly) |
| Responses <same as request> (mostly) |
| .fi |
| |
| |
| .SH CLASSES |
| PRIO classes cannot be configured further - they are automatically created |
| when the PRIO qdisc is attached. Each class however can contain yet a |
| further qdisc. |
| |
| .SH BUGS |
| Large amounts of traffic in the lower bands can cause starvation of higher |
| bands. Can be prevented by attaching a shaper (for example, |
| .BR tc-tbf(8) |
| to these bands to make sure they cannot dominate the link. |
| |
| .SH AUTHORS |
| Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim |
| <hadi@cyberus.ca>. This manpage maintained by bert hubert <ahu@ds9a.nl> |