diff options
Diffstat (limited to '')
-rw-r--r-- | man/man8/tc-stab.8 | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/man/man8/tc-stab.8 b/man/man8/tc-stab.8 new file mode 100644 index 0000000..03a0659 --- /dev/null +++ b/man/man8/tc-stab.8 @@ -0,0 +1,163 @@ +.TH STAB 8 "31 October 2011" iproute2 Linux +. +.SH NAME +tc\-stab \- Generic size table manipulations +. +.SH SYNOPSIS +.nf +tc qdisc add ... stab +.RS 4 +[ \fBmtu\fR BYTES ] [ \fBtsize\fR SLOTS ] +[ \fBmpu\fR BYTES ] [ \fBoverhead\fR BYTES ] +[ \fBlinklayer\fR { adsl | atm | ethernet } ] ... +.RE +.fi + +.SH OPTIONS +For the description of BYTES \- please refer to the \fBUNITS\fR +section of \fBtc\fR(8). + +.IP \fBmtu\fR 4 +.br +maximum packet size we create size table for, assumed 2048 if not specified explicitly +.IP \fBtsize\fR +.br +required table size, assumed 512 if not specified explicitly +.IP \fBmpu\fR +.br +minimum packet size used in computations +.IP \fBoverhead\fR +.br +per\-packet size overhead (can be negative) used in computations +.IP \fBlinklayer\fR +.br +required linklayer specification. +.PP +. +.SH DESCRIPTION +. +Size tables allow manipulation of packet sizes, as seen by the whole scheduler +framework (of course, the actual packet size remains the same). Adjusted packet +size is calculated only once \- when a qdisc enqueues the packet. Initial root +enqueue initializes it to the real packet's size. + +Each qdisc can use a different size table, but the adjusted size is stored in +an area shared by whole qdisc hierarchy attached to the interface. The effect is +that if you have such a setup, the last qdisc with a stab in a chain "wins". For +example, consider HFSC with simple pfifo attached to one of its leaf classes. +If that pfifo qdisc has stab defined, it will override lengths calculated +during HFSC's enqueue; and in turn, whenever HFSC tries to dequeue a packet, it +will use a potentially invalid size in its calculations. Normal setups will +usually include stab defined only on root qdisc, but further overriding gives +extra flexibility for less usual setups. + +The initial size table is calculated by \fBtc\fR tool using \fBmtu\fR and +\fBtsize\fR parameters. The algorithm sets each slot's size to the smallest +power of 2 value, so the whole \fBmtu\fR is covered by the size table. Neither +\fBtsize\fR, nor \fBmtu\fR have to be power of 2 value, so the size +table will usually support more than is required by \fBmtu\fR. + +For example, with \fBmtu\fR\~=\~1500 and \fBtsize\fR\~=\~128, a table with 128 +slots will be created, where slot 0 will correspond to sizes 0\-16, slot 1 to +17\~\-\~32, \&..., slot 127 to 2033\~\-\~2048. Sizes assigned to each slot +depend on \fBlinklayer\fR parameter. + +Stab calculation is also safe for an unusual case, when a size assigned to a +slot would be larger than 2^16\-1 (you will lose the accuracy though). + +During the kernel part of packet size adjustment, \fBoverhead\fR will be added +to original size, and then slot will be calculated. If the size would cause +overflow, more than 1 slot will be used to get the final size. This of course +will affect accuracy, but it's only a guard against unusual situations. + +Currently there are two methods of creating values stored in the size table \- +ethernet and atm (adsl): + +.IP ethernet 4 +.br +This is basically 1\-1 mapping, so following our example from above +(disregarding \fBmpu\fR for a moment) slot 0 would have 8, slot 1 would have 16 +and so on, up to slot 127 with 2048. Note, that \fBmpu\fR\~>\~0 must be +specified, and slots that would get less than specified by \fBmpu\fR will get +\fBmpu\fR instead. If you don't specify \fBmpu\fR, the size table will not be +created at all (it wouldn't make any difference), although any \fBoverhead\fR +value will be respected during calculations. +.IP "atm, adsl" +.br +ATM linklayer consists of 53 byte cells, where each of them provides 48 bytes +for payload. Also all the cells must be fully utilized, thus the last one is +padded if/as necessary. + +When the size table is calculated, adjusted size that fits properly into lowest +amount of cells is assigned to a slot. For example, a 100 byte long packet +requires three 48\-byte payloads, so the final size would require 3 ATM cells +\- 159 bytes. + +For ATM size tables, 16\~bytes sized slots are perfectly enough. The default +values of \fBmtu\fR and \fBtsize\fR create 4\~bytes sized slots. +.PP +. +.SH "TYPICAL OVERHEADS" +The following values are typical for different adsl scenarios (based on +\fB[1]\fR and \fB[2]\fR): + +.nf +LLC based: +.RS 4 +PPPoA \- 14 (PPP \- 2, ATM \- 12) +PPPoE \- 40+ (PPPoE \- 8, ATM \- 18, ethernet 14, possibly FCS \- 4+padding) +Bridged \- 32 (ATM \- 18, ethernet 14, possibly FCS \- 4+padding) +IPoA \- 16 (ATM \- 16) +.RE + +VC Mux based: +.RS 4 +PPPoA \- 10 (PPP \- 2, ATM \- 8) +PPPoE \- 32+ (PPPoE \- 8, ATM \- 10, ethernet 14, possibly FCS \- 4+padding) +Bridged \- 24+ (ATM \- 10, ethernet 14, possibly FCS \- 4+padding) +IPoA \- 8 (ATM \- 8) +.RE +.fi +There are a few important things regarding the above overheads: +. +.IP \(bu 4 +IPoA in LLC case requires SNAP, instead of LLC\-NLPID (see rfc2684) \- this is +the reason why it actually takes more space than PPPoA. +.IP \(bu +In rare cases, FCS might be preserved on protocols that include Ethernet frames +(Bridged and PPPoE). In such situation, any Ethernet specific padding +guaranteeing 64 bytes long frame size has to be included as well (see RFC2684). +In the other words, it also guarantees that any packet you send will take +minimum 2 atm cells. You should set \fBmpu\fR accordingly for that. +.IP \(bu +When the size table is consulted, and you're shaping traffic for the sake of +another modem/router, an Ethernet header (without padding) will already be added +to initial packet's length. You should compensate for that by subtracting 14 +from the above overheads in this case. If you're shaping directly on the router +(for example, with speedtouch usb modem) using ppp daemon, you're using raw ip +interface without underlying layer2, so nothing will be added. + +For more thorough explanations, please see \fB[1]\fR and \fB[2]\fR. +. +.SH "ETHERNET CARDS CONSIDERATIONS" +. +It's often forgotten that modern network cards (even cheap ones on desktop +motherboards) and/or their drivers often support different offloading +mechanisms. In the context of traffic shaping, 'tso' and 'gso' might cause +undesirable effects, due to massive TCP segments being considered during +traffic shaping (including stab calculations). For slow uplink interfaces, +it's good to use \fBethtool\fR to turn off offloading features. +. +.SH "SEE ALSO" +. +\fBtc\fR(8), \fBtc\-hfsc\fR(7), \fBtc\-hfsc\fR(8), +.br +\fB[1]\fR http://ace\-host.stuart.id.au/russell/files/tc/tc\-atm/ +.br +\fB[2]\fR http://www.faqs.org/rfcs/rfc2684.html + +Please direct bugreports and patches to: <netdev@vger.kernel.org> +. +.SH "AUTHOR" +. +Manpage created by Michal Soltys (soltys@ziu.info) |