Blame man/man8/tc-cake.8

Packit d3f73b
.TH CAKE 8 "19 July 2018" "iproute2" "Linux"
Packit d3f73b
.SH NAME
Packit d3f73b
CAKE \- Common Applications Kept Enhanced (CAKE)
Packit d3f73b
.SH SYNOPSIS
Packit d3f73b
.B tc qdisc ... cake
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR bandwidth
Packit d3f73b
RATE |
Packit d3f73b
.BR unlimited*
Packit d3f73b
|
Packit d3f73b
.BR autorate-ingress
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR rtt
Packit d3f73b
TIME |
Packit d3f73b
.BR datacentre
Packit d3f73b
|
Packit d3f73b
.BR lan
Packit d3f73b
|
Packit d3f73b
.BR metro
Packit d3f73b
|
Packit d3f73b
.BR regional
Packit d3f73b
|
Packit d3f73b
.BR internet*
Packit d3f73b
|
Packit d3f73b
.BR oceanic
Packit d3f73b
|
Packit d3f73b
.BR satellite
Packit d3f73b
|
Packit d3f73b
.BR interplanetary
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR besteffort
Packit d3f73b
|
Packit d3f73b
.BR diffserv8
Packit d3f73b
|
Packit d3f73b
.BR diffserv4
Packit d3f73b
|
Packit d3f73b
.BR diffserv3*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR flowblind
Packit d3f73b
|
Packit d3f73b
.BR srchost
Packit d3f73b
|
Packit d3f73b
.BR dsthost
Packit d3f73b
|
Packit d3f73b
.BR hosts
Packit d3f73b
|
Packit d3f73b
.BR flows
Packit d3f73b
|
Packit d3f73b
.BR dual-srchost
Packit d3f73b
|
Packit d3f73b
.BR dual-dsthost
Packit d3f73b
|
Packit d3f73b
.BR triple-isolate*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR nat
Packit d3f73b
|
Packit d3f73b
.BR nonat*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR wash
Packit d3f73b
|
Packit d3f73b
.BR nowash*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR split-gso*
Packit d3f73b
|
Packit d3f73b
.BR no-split-gso
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR ack-filter
Packit d3f73b
|
Packit d3f73b
.BR ack-filter-aggressive
Packit d3f73b
|
Packit d3f73b
.BR no-ack-filter*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR memlimit
Packit d3f73b
LIMIT ]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR fwmark
Packit d3f73b
MASK ]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR ptm
Packit d3f73b
|
Packit d3f73b
.BR atm
Packit d3f73b
|
Packit d3f73b
.BR noatm*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR overhead
Packit d3f73b
N |
Packit d3f73b
.BR conservative
Packit d3f73b
|
Packit d3f73b
.BR raw*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR mpu
Packit d3f73b
N ]
Packit d3f73b
.br
Packit d3f73b
[
Packit d3f73b
.BR ingress
Packit d3f73b
|
Packit d3f73b
.BR egress*
Packit d3f73b
]
Packit d3f73b
.br
Packit d3f73b
(* marks defaults)
Packit d3f73b
Packit d3f73b
Packit d3f73b
.SH DESCRIPTION
Packit d3f73b
CAKE (Common Applications Kept Enhanced) is a shaping-capable queue discipline
Packit d3f73b
which uses both AQM and FQ.  It combines COBALT, which is an AQM algorithm
Packit d3f73b
combining Codel and BLUE, a shaper which operates in deficit mode, and a variant
Packit d3f73b
of DRR++ for flow isolation.  8-way set-associative hashing is used to virtually
Packit d3f73b
eliminate hash collisions.  Priority queuing is available through a simplified
Packit d3f73b
diffserv implementation.  Overhead compensation for various encapsulation
Packit d3f73b
schemes is tightly integrated.
Packit d3f73b
Packit d3f73b
All settings are optional; the default settings are chosen to be sensible in
Packit d3f73b
most common deployments.  Most people will only need to set the
Packit d3f73b
.B bandwidth
Packit d3f73b
parameter to get useful results, but reading the
Packit d3f73b
.B Overhead Compensation
Packit d3f73b
and
Packit d3f73b
.B Round Trip Time
Packit d3f73b
sections is strongly encouraged.
Packit d3f73b
Packit d3f73b
.SH SHAPER PARAMETERS
Packit d3f73b
CAKE uses a deficit-mode shaper, which does not exhibit the initial burst
Packit d3f73b
typical of token-bucket shapers.  It will automatically burst precisely as much
Packit d3f73b
as required to maintain the configured throughput.  As such, it is very
Packit d3f73b
straightforward to configure.
Packit d3f73b
.PP
Packit d3f73b
.B unlimited
Packit d3f73b
(default)
Packit d3f73b
.br
Packit d3f73b
	No limit on the bandwidth.
Packit d3f73b
.PP
Packit d3f73b
.B bandwidth
Packit d3f73b
RATE
Packit d3f73b
.br
Packit d3f73b
	Set the shaper bandwidth.  See
Packit d3f73b
.BR tc(8)
Packit d3f73b
or examples below for details of the RATE value.
Packit d3f73b
.PP
Packit d3f73b
.B autorate-ingress
Packit d3f73b
.br
Packit d3f73b
	Automatic capacity estimation based on traffic arriving at this qdisc.
Packit d3f73b
This is most likely to be useful with cellular links, which tend to change
Packit d3f73b
quality randomly.  A
Packit d3f73b
.B bandwidth
Packit d3f73b
parameter can be used in conjunction to specify an initial estimate.  The shaper
Packit d3f73b
will periodically be set to a bandwidth slightly below the estimated rate.  This
Packit d3f73b
estimator cannot estimate the bandwidth of links downstream of itself.
Packit d3f73b
Packit d3f73b
.SH OVERHEAD COMPENSATION PARAMETERS
Packit d3f73b
The size of each packet on the wire may differ from that seen by Linux.  The
Packit d3f73b
following parameters allow CAKE to compensate for this difference by internally
Packit d3f73b
considering each packet to be bigger than Linux informs it.  To assist users who
Packit d3f73b
are not expert network engineers, keywords have been provided to represent a
Packit d3f73b
number of common link technologies.
Packit d3f73b
Packit d3f73b
.SS	Manual Overhead Specification
Packit d3f73b
.B overhead
Packit d3f73b
BYTES
Packit d3f73b
.br
Packit d3f73b
	Adds BYTES to the size of each packet.  BYTES may be negative; values
Packit d3f73b
between -64 and 256 (inclusive) are accepted.
Packit d3f73b
.PP
Packit d3f73b
.B mpu
Packit d3f73b
BYTES
Packit d3f73b
.br
Packit d3f73b
	Rounds each packet (including overhead) up to a minimum length
Packit d3f73b
BYTES. BYTES may not be negative; values between 0 and 256 (inclusive)
Packit d3f73b
are accepted.
Packit d3f73b
.PP
Packit d3f73b
.B atm
Packit d3f73b
.br
Packit d3f73b
	Compensates for ATM cell framing, which is normally found on ADSL links.
Packit d3f73b
This is performed after the
Packit d3f73b
.B overhead
Packit d3f73b
parameter above.  ATM uses fixed 53-byte cells, each of which can carry 48 bytes
Packit d3f73b
payload.
Packit d3f73b
.PP
Packit d3f73b
.B ptm
Packit d3f73b
.br
Packit d3f73b
	Compensates for PTM encoding, which is normally found on VDSL2 links and
Packit d3f73b
uses a 64b/65b encoding scheme. It is even more efficient to simply
Packit d3f73b
derate the specified shaper bandwidth by a factor of 64/65 or 0.984. See
Packit d3f73b
ITU G.992.3 Annex N and IEEE 802.3 Section 61.3 for details.
Packit d3f73b
.PP
Packit d3f73b
.B noatm
Packit d3f73b
.br
Packit d3f73b
	Disables ATM and PTM compensation.
Packit d3f73b
Packit d3f73b
.SS	Failsafe Overhead Keywords
Packit d3f73b
These two keywords are provided for quick-and-dirty setup.  Use them if you
Packit d3f73b
can't be bothered to read the rest of this section.
Packit d3f73b
.PP
Packit d3f73b
.B raw
Packit d3f73b
(default)
Packit d3f73b
.br
Packit d3f73b
	Turns off all overhead compensation in CAKE.  The packet size reported
Packit d3f73b
by Linux will be used directly.
Packit d3f73b
.PP
Packit d3f73b
	Other overhead keywords may be added after "raw".  The effect of this is
Packit d3f73b
to make the overhead compensation operate relative to the reported packet size,
Packit d3f73b
not the underlying IP packet size.
Packit d3f73b
.PP
Packit d3f73b
.B conservative
Packit d3f73b
.br
Packit d3f73b
	Compensates for more overhead than is likely to occur on any
Packit d3f73b
widely-deployed link technology.
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 48 atm.
Packit d3f73b
Packit d3f73b
.SS ADSL Overhead Keywords
Packit d3f73b
Most ADSL modems have a way to check which framing scheme is in use.  Often this
Packit d3f73b
is also specified in the settings document provided by the ISP.  The keywords in
Packit d3f73b
this section are intended to correspond with these sources of information.  All
Packit d3f73b
of them implicitly set the
Packit d3f73b
.B atm
Packit d3f73b
flag.
Packit d3f73b
.PP
Packit d3f73b
.B pppoa-vcmux
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 10 atm
Packit d3f73b
.PP
Packit d3f73b
.B pppoa-llc
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 14 atm
Packit d3f73b
.PP
Packit d3f73b
.B pppoe-vcmux
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 32 atm
Packit d3f73b
.PP
Packit d3f73b
.B pppoe-llcsnap
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 40 atm
Packit d3f73b
.PP
Packit d3f73b
.B bridged-vcmux
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 24 atm
Packit d3f73b
.PP
Packit d3f73b
.B bridged-llcsnap
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 32 atm
Packit d3f73b
.PP
Packit d3f73b
.B ipoa-vcmux
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 8 atm
Packit d3f73b
.PP
Packit d3f73b
.B ipoa-llcsnap
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 16 atm
Packit d3f73b
.PP
Packit d3f73b
See also the Ethernet Correction Factors section below.
Packit d3f73b
Packit d3f73b
.SS VDSL2 Overhead Keywords
Packit d3f73b
ATM was dropped from VDSL2 in favour of PTM, which is a much more
Packit d3f73b
straightforward framing scheme.  Some ISPs retained PPPoE for compatibility with
Packit d3f73b
their existing back-end systems.
Packit d3f73b
.PP
Packit d3f73b
.B pppoe-ptm
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 30 ptm
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
	PPPoE: 2B PPP + 6B PPPoE +
Packit d3f73b
.br
Packit d3f73b
	ETHERNET: 6B dest MAC + 6B src MAC + 2B ethertype + 4B Frame Check Sequence +
Packit d3f73b
.br
Packit d3f73b
	PTM: 1B Start of Frame (S) + 1B End of Frame (Ck) + 2B TC-CRC (PTM-FCS)
Packit d3f73b
.br
Packit d3f73b
.PP
Packit d3f73b
.B bridged-ptm
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 22 ptm
Packit d3f73b
.br
Packit d3f73b
	ETHERNET: 6B dest MAC + 6B src MAC + 2B ethertype + 4B Frame Check Sequence +
Packit d3f73b
.br
Packit d3f73b
	PTM: 1B Start of Frame (S) + 1B End of Frame (Ck) + 2B TC-CRC (PTM-FCS)
Packit d3f73b
.br
Packit d3f73b
.PP
Packit d3f73b
See also the Ethernet Correction Factors section below.
Packit d3f73b
Packit d3f73b
.SS DOCSIS Cable Overhead Keyword
Packit d3f73b
DOCSIS is the universal standard for providing Internet service over cable-TV
Packit d3f73b
infrastructure.
Packit d3f73b
Packit d3f73b
In this case, the actual on-wire overhead is less important than the packet size
Packit d3f73b
the head-end equipment uses for shaping and metering.  This is specified to be
Packit d3f73b
an Ethernet frame including the CRC (aka FCS).
Packit d3f73b
.PP
Packit d3f73b
.B docsis
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 18 mpu 64 noatm
Packit d3f73b
Packit d3f73b
.SS Ethernet Overhead Keywords
Packit d3f73b
.PP
Packit d3f73b
.B ethernet
Packit d3f73b
.br
Packit d3f73b
	Accounts for Ethernet's preamble, inter-frame gap, and Frame Check
Packit d3f73b
Sequence.  Use this keyword when the bottleneck being shaped for is an
Packit d3f73b
actual Ethernet cable.
Packit d3f73b
.br
Packit d3f73b
	Equivalent to
Packit d3f73b
.B overhead 38 mpu 84 noatm
Packit d3f73b
.PP
Packit d3f73b
.B ether-vlan
Packit d3f73b
.br
Packit d3f73b
	Adds 4 bytes to the overhead compensation, accounting for an IEEE 802.1Q
Packit d3f73b
VLAN header appended to the Ethernet frame header.  NB: Some ISPs use one or
Packit d3f73b
even two of these within PPPoE; this keyword may be repeated as necessary to
Packit d3f73b
express this.
Packit d3f73b
Packit d3f73b
.SH ROUND TRIP TIME PARAMETERS
Packit d3f73b
Active Queue Management (AQM) consists of embedding congestion signals in the
Packit d3f73b
packet flow, which receivers use to instruct senders to slow down when the queue
Packit d3f73b
is persistently occupied.  CAKE uses ECN signalling when available, and packet
Packit d3f73b
drops otherwise, according to a combination of the Codel and BLUE AQM algorithms
Packit d3f73b
called COBALT.
Packit d3f73b
Packit d3f73b
Very short latencies require a very rapid AQM response to adequately control
Packit d3f73b
latency.  However, such a rapid response tends to impair throughput when the
Packit d3f73b
actual RTT is relatively long.  CAKE allows specifying the RTT it assumes for
Packit d3f73b
tuning various parameters.  Actual RTTs within an order of magnitude of this
Packit d3f73b
will generally work well for both throughput and latency management.
Packit d3f73b
Packit d3f73b
At the 'lan' setting and below, the time constants are similar in magnitude to
Packit d3f73b
the jitter in the Linux kernel itself, so congestion might be signalled
Packit d3f73b
prematurely. The flows will then become sparse and total throughput reduced,
Packit d3f73b
leaving little or no back-pressure for the fairness logic to work against. Use
Packit d3f73b
the "metro" setting for local lans unless you have a custom kernel.
Packit d3f73b
.PP
Packit d3f73b
.B rtt
Packit d3f73b
TIME
Packit d3f73b
.br
Packit d3f73b
	Manually specify an RTT.
Packit d3f73b
.PP
Packit d3f73b
.B datacentre
Packit d3f73b
.br
Packit d3f73b
	For extremely high-performance 10GigE+ networks only.  Equivalent to
Packit d3f73b
.B rtt 100us.
Packit d3f73b
.PP
Packit d3f73b
.B lan
Packit d3f73b
.br
Packit d3f73b
	For pure Ethernet (not Wi-Fi) networks, at home or in the office.  Don't
Packit d3f73b
use this when shaping for an Internet access link.  Equivalent to
Packit d3f73b
.B rtt 1ms.
Packit d3f73b
.PP
Packit d3f73b
.B metro
Packit d3f73b
.br
Packit d3f73b
	For traffic mostly within a single city.  Equivalent to
Packit d3f73b
.B rtt 10ms.
Packit d3f73b
.PP
Packit d3f73b
.B regional
Packit d3f73b
.br
Packit d3f73b
	For traffic mostly within a European-sized country.  Equivalent to
Packit d3f73b
.B rtt 30ms.
Packit d3f73b
.PP
Packit d3f73b
.B internet
Packit d3f73b
(default)
Packit d3f73b
.br
Packit d3f73b
	This is suitable for most Internet traffic.  Equivalent to
Packit d3f73b
.B rtt 100ms.
Packit d3f73b
.PP
Packit d3f73b
.B oceanic
Packit d3f73b
.br
Packit d3f73b
	For Internet traffic with generally above-average latency, such as that
Packit d3f73b
suffered by Australasian residents.  Equivalent to
Packit d3f73b
.B rtt 300ms.
Packit d3f73b
.PP
Packit d3f73b
.B satellite
Packit d3f73b
.br
Packit d3f73b
	For traffic via geostationary satellites.  Equivalent to
Packit d3f73b
.B rtt 1000ms.
Packit d3f73b
.PP
Packit d3f73b
.B interplanetary
Packit d3f73b
.br
Packit d3f73b
	So named because Jupiter is about 1 light-hour from Earth.  Use this to
Packit d3f73b
(almost) completely disable AQM actions.  Equivalent to
Packit d3f73b
.B rtt 3600s.
Packit d3f73b
Packit d3f73b
.SH FLOW ISOLATION PARAMETERS
Packit d3f73b
With flow isolation enabled, CAKE places packets from different flows into
Packit d3f73b
different queues, each of which carries its own AQM state.  Packets from each
Packit d3f73b
queue are then delivered fairly, according to a DRR++ algorithm which minimises
Packit d3f73b
latency for "sparse" flows.  CAKE uses a set-associative hashing algorithm to
Packit d3f73b
minimise flow collisions.
Packit d3f73b
Packit d3f73b
These keywords specify whether fairness based on source address, destination
Packit d3f73b
address, individual flows, or any combination of those is desired.
Packit d3f73b
.PP
Packit d3f73b
.B flowblind
Packit d3f73b
.br
Packit d3f73b
	Disables flow isolation; all traffic passes through a single queue for
Packit d3f73b
each tin.
Packit d3f73b
.PP
Packit d3f73b
.B srchost
Packit d3f73b
.br
Packit d3f73b
	Flows are defined only by source address.  Could be useful on the egress
Packit d3f73b
path of an ISP backhaul.
Packit d3f73b
.PP
Packit d3f73b
.B dsthost
Packit d3f73b
.br
Packit d3f73b
	Flows are defined only by destination address.  Could be useful on the
Packit d3f73b
ingress path of an ISP backhaul.
Packit d3f73b
.PP
Packit d3f73b
.B hosts
Packit d3f73b
.br
Packit d3f73b
	Flows are defined by source-destination host pairs.  This is host
Packit d3f73b
isolation, rather than flow isolation.
Packit d3f73b
.PP
Packit d3f73b
.B flows
Packit d3f73b
.br
Packit d3f73b
	Flows are defined by the entire 5-tuple of source address, destination
Packit d3f73b
address, transport protocol, source port and destination port.  This is the type
Packit d3f73b
of flow isolation performed by SFQ and fq_codel.
Packit d3f73b
.PP
Packit d3f73b
.B dual-srchost
Packit d3f73b
.br
Packit d3f73b
	Flows are defined by the 5-tuple, and fairness is applied first over
Packit d3f73b
source addresses, then over individual flows.  Good for use on egress traffic
Packit d3f73b
from a LAN to the internet, where it'll prevent any one LAN host from
Packit d3f73b
monopolising the uplink, regardless of the number of flows they use.
Packit d3f73b
.PP
Packit d3f73b
.B dual-dsthost
Packit d3f73b
.br
Packit d3f73b
	Flows are defined by the 5-tuple, and fairness is applied first over
Packit d3f73b
destination addresses, then over individual flows.  Good for use on ingress
Packit d3f73b
traffic to a LAN from the internet, where it'll prevent any one LAN host from
Packit d3f73b
monopolising the downlink, regardless of the number of flows they use.
Packit d3f73b
.PP
Packit d3f73b
.B triple-isolate
Packit d3f73b
(default)
Packit d3f73b
.br
Packit d3f73b
	Flows are defined by the 5-tuple, and fairness is applied over source
Packit d3f73b
*and* destination addresses intelligently (ie. not merely by host-pairs), and
Packit d3f73b
also over individual flows.  Use this if you're not certain whether to use
Packit d3f73b
dual-srchost or dual-dsthost; it'll do both jobs at once, preventing any one
Packit d3f73b
host on *either* side of the link from monopolising it with a large number of
Packit d3f73b
flows.
Packit d3f73b
.PP
Packit d3f73b
.B nat
Packit d3f73b
.br
Packit d3f73b
	Instructs Cake to perform a NAT lookup before applying flow-isolation
Packit d3f73b
rules, to determine the true addresses and port numbers of the packet, to
Packit d3f73b
improve fairness between hosts "inside" the NAT.  This has no practical effect
Packit d3f73b
in "flowblind" or "flows" modes, or if NAT is performed on a different host.
Packit d3f73b
.PP
Packit d3f73b
.B nonat
Packit d3f73b
(default)
Packit d3f73b
.br
Packit d3f73b
	Cake will not perform a NAT lookup.  Flow isolation will be performed
Packit d3f73b
using the addresses and port numbers directly visible to the interface Cake is
Packit d3f73b
attached to.
Packit d3f73b
Packit d3f73b
.SH PRIORITY QUEUE PARAMETERS
Packit d3f73b
CAKE can divide traffic into "tins" based on the Diffserv field.  Each tin has
Packit d3f73b
its own independent set of flow-isolation queues, and is serviced based on a WRR
Packit d3f73b
algorithm.  To avoid perverse Diffserv marking incentives, tin weights have a
Packit d3f73b
"priority sharing" value when bandwidth used by that tin is below a threshold,
Packit d3f73b
and a lower "bandwidth sharing" value when above.  Bandwidth is compared against
Packit d3f73b
the threshold using the same algorithm as the deficit-mode shaper.
Packit d3f73b
Packit d3f73b
Detailed customisation of tin parameters is not provided.  The following presets
Packit d3f73b
perform all necessary tuning, relative to the current shaper bandwidth and RTT
Packit d3f73b
settings.
Packit d3f73b
.PP
Packit d3f73b
.B besteffort
Packit d3f73b
.br
Packit d3f73b
	Disables priority queuing by placing all traffic in one tin.
Packit d3f73b
.PP
Packit d3f73b
.B precedence
Packit d3f73b
.br
Packit d3f73b
	Enables legacy interpretation of TOS "Precedence" field.  Use of this
Packit d3f73b
preset on the modern Internet is firmly discouraged.
Packit d3f73b
.PP
Packit d3f73b
.B diffserv4
Packit d3f73b
.br
Packit d3f73b
	Provides a general-purpose Diffserv implementation with four tins:
Packit d3f73b
.br
Packit d3f73b
		Bulk (CS1), 6.25% threshold, generally low priority.
Packit d3f73b
.br
Packit d3f73b
		Best Effort (general), 100% threshold.
Packit d3f73b
.br
Packit d3f73b
		Video (AF4x, AF3x, CS3, AF2x, CS2, TOS4, TOS1), 50% threshold.
Packit d3f73b
.br
Packit d3f73b
		Voice (CS7, CS6, EF, VA, CS5, CS4), 25% threshold.
Packit d3f73b
.PP
Packit d3f73b
.B diffserv3
Packit d3f73b
(default)
Packit d3f73b
.br
Packit d3f73b
	Provides a simple, general-purpose Diffserv implementation with three tins:
Packit d3f73b
.br
Packit d3f73b
		Bulk (CS1), 6.25% threshold, generally low priority.
Packit d3f73b
.br
Packit d3f73b
		Best Effort (general), 100% threshold.
Packit d3f73b
.br
Packit d3f73b
		Voice (CS7, CS6, EF, VA, TOS4), 25% threshold, reduced Codel interval.
Packit d3f73b
Packit d3f73b
.PP
Packit d3f73b
.B fwmark
Packit d3f73b
MASK
Packit d3f73b
.br
Packit d3f73b
	This options turns on fwmark-based overriding of CAKE's tin selection.
Packit d3f73b
If set, the option specifies a bitmask that will be applied to the fwmark
Packit d3f73b
associated with each packet. If the result of this masking is non-zero, the
Packit d3f73b
result will be right-shifted by the number of least-significant unset bits in
Packit d3f73b
the mask value, and the result will be used as a the tin number for that packet.
Packit d3f73b
This can be used to set policies in a firewall script that will override CAKE's
Packit d3f73b
built-in tin selection.
Packit d3f73b
Packit d3f73b
.SH OTHER PARAMETERS
Packit d3f73b
.B memlimit
Packit d3f73b
LIMIT
Packit d3f73b
.br
Packit d3f73b
	Limit the memory consumed by Cake to LIMIT bytes. Note that this does
Packit d3f73b
not translate directly to queue size (so do not size this based on bandwidth
Packit d3f73b
delay product considerations, but rather on worst case acceptable memory
Packit d3f73b
consumption), as there is some overhead in the data structures containing the
Packit d3f73b
packets, especially for small packets.
Packit d3f73b
Packit d3f73b
	By default, the limit is calculated based on the bandwidth and RTT
Packit d3f73b
settings.
Packit d3f73b
Packit d3f73b
.PP
Packit d3f73b
.B wash
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
	Traffic entering your diffserv domain is frequently mis-marked in
Packit d3f73b
transit from the perspective of your network, and traffic exiting yours may be
Packit d3f73b
mis-marked from the perspective of the transiting provider.
Packit d3f73b
Packit d3f73b
Apply the wash option to clear all extra diffserv (but not ECN bits), after
Packit d3f73b
priority queuing has taken place.
Packit d3f73b
Packit d3f73b
If you are shaping inbound, and cannot trust the diffserv markings (as is the
Packit d3f73b
case for Comcast Cable, among others), it is best to use a single queue
Packit d3f73b
"besteffort" mode with wash.
Packit d3f73b
Packit d3f73b
.PP
Packit d3f73b
.B split-gso
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
	This option controls whether CAKE will split General Segmentation
Packit d3f73b
Offload (GSO) super-packets into their on-the-wire components and
Packit d3f73b
dequeue them individually.
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
Super-packets are created by the networking stack to improve efficiency.
Packit d3f73b
However, because they are larger they take longer to dequeue, which
Packit d3f73b
translates to higher latency for competing flows, especially at lower
Packit d3f73b
bandwidths. CAKE defaults to splitting GSO packets to achieve the lowest
Packit d3f73b
possible latency. At link speeds higher than 10 Gbps, setting the
Packit d3f73b
no-split-gso parameter can increase the maximum achievable throughput by
Packit d3f73b
retaining the full GSO packets.
Packit d3f73b
Packit d3f73b
.SH OVERRIDING CLASSIFICATION WITH TC FILTERS
Packit d3f73b
Packit d3f73b
CAKE supports overriding of its internal classification of packets through the
Packit d3f73b
tc filter mechanism. Packets can be assigned to different priority tins by
Packit d3f73b
setting the
Packit d3f73b
.B priority
Packit d3f73b
field on the skb, and the flow hashing can be overridden by setting the
Packit d3f73b
.B classid
Packit d3f73b
parameter.
Packit d3f73b
Packit d3f73b
.PP
Packit d3f73b
.B Tin override
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
        To assign a priority tin, the major number of the priority field needs
Packit d3f73b
to match the qdisc handle of the cake instance; if it does, the minor number
Packit d3f73b
will be interpreted as the tin index. For example, to classify all ICMP packets
Packit d3f73b
as 'bulk', the following filter can be used:
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
        # tc qdisc replace dev eth0 handle 1: root cake diffserv3
Packit d3f73b
        # tc filter add dev eth0 parent 1: protocol ip prio 1 \\
Packit d3f73b
          u32 match icmp type 0 0 action skbedit priority 1:1
Packit d3f73b
Packit d3f73b
.PP
Packit d3f73b
.B Flow hash override
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
        To override flow hashing, the classid can be set. CAKE will interpret
Packit d3f73b
the major number of the classid as the host hash used in host isolation mode,
Packit d3f73b
and the minor number as the flow hash used for flow-based queueing. One or both
Packit d3f73b
of those can be set, and will be used if the relevant flow isolation parameter
Packit d3f73b
is set (i.e., the major number will be ignored if CAKE is not configured in
Packit d3f73b
hosts mode, and the minor number will be ignored if CAKE is not configured in
Packit d3f73b
flows mode).
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
This example will assign all ICMP packets to the first queue:
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
        # tc qdisc replace dev eth0 handle 1: root cake
Packit d3f73b
        # tc filter add dev eth0 parent 1: protocol ip prio 1 \\
Packit d3f73b
          u32 match icmp type 0 0 classid 0:1
Packit d3f73b
Packit d3f73b
.br
Packit d3f73b
If only one of the host and flow overrides is set, CAKE will compute the other
Packit d3f73b
hash from the packet as normal. Note, however, that the host isolation mode
Packit d3f73b
works by assigning a host ID to the flow queue; so if overriding both host and
Packit d3f73b
flow, the same flow cannot have more than one host assigned. In addition, it is
Packit d3f73b
not possible to assign different source and destination host IDs through the
Packit d3f73b
override mechanism; if a host ID is assigned, it will be used as both source and
Packit d3f73b
destination host.
Packit d3f73b
Packit d3f73b
Packit d3f73b
Packit d3f73b
.SH EXAMPLES
Packit d3f73b
# tc qdisc delete root dev eth0
Packit d3f73b
.br
Packit d3f73b
# tc qdisc add root dev eth0 cake bandwidth 100Mbit ethernet
Packit d3f73b
.br
Packit d3f73b
# tc -s qdisc show dev eth0
Packit d3f73b
.br
Packit d3f73b
qdisc cake 1: root refcnt 2 bandwidth 100Mbit diffserv3 triple-isolate rtt 100.0ms noatm overhead 38 mpu 84
Packit d3f73b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
Packit d3f73b
 backlog 0b 0p requeues 0
Packit d3f73b
 memory used: 0b of 5000000b
Packit d3f73b
 capacity estimate: 100Mbit
Packit d3f73b
 min/max network layer size:        65535 /       0
Packit d3f73b
 min/max overhead-adjusted size:    65535 /       0
Packit d3f73b
 average network hdr offset:            0
Packit d3f73b
Packit d3f73b
                   Bulk  Best Effort        Voice
Packit d3f73b
  thresh       6250Kbit      100Mbit       25Mbit
Packit d3f73b
  target          5.0ms        5.0ms        5.0ms
Packit d3f73b
  interval      100.0ms      100.0ms      100.0ms
Packit d3f73b
  pk_delay          0us          0us          0us
Packit d3f73b
  av_delay          0us          0us          0us
Packit d3f73b
  sp_delay          0us          0us          0us
Packit d3f73b
  pkts                0            0            0
Packit d3f73b
  bytes               0            0            0
Packit d3f73b
  way_inds            0            0            0
Packit d3f73b
  way_miss            0            0            0
Packit d3f73b
  way_cols            0            0            0
Packit d3f73b
  drops               0            0            0
Packit d3f73b
  marks               0            0            0
Packit d3f73b
  ack_drop            0            0            0
Packit d3f73b
  sp_flows            0            0            0
Packit d3f73b
  bk_flows            0            0            0
Packit d3f73b
  un_flows            0            0            0
Packit d3f73b
  max_len             0            0            0
Packit d3f73b
  quantum           300         1514          762
Packit d3f73b
Packit d3f73b
After some use:
Packit d3f73b
.br
Packit d3f73b
# tc -s qdisc show dev eth0
Packit d3f73b
Packit d3f73b
qdisc cake 1: root refcnt 2 bandwidth 100Mbit diffserv3 triple-isolate rtt 100.0ms noatm overhead 38 mpu 84
Packit d3f73b
 Sent 44709231 bytes 31931 pkt (dropped 45, overlimits 93782 requeues 0)
Packit d3f73b
 backlog 33308b 22p requeues 0
Packit d3f73b
 memory used: 292352b of 5000000b
Packit d3f73b
 capacity estimate: 100Mbit
Packit d3f73b
 min/max network layer size:           28 /    1500
Packit d3f73b
 min/max overhead-adjusted size:       84 /    1538
Packit d3f73b
 average network hdr offset:           14
Packit d3f73b
Packit d3f73b
                   Bulk  Best Effort        Voice
Packit d3f73b
  thresh       6250Kbit      100Mbit       25Mbit
Packit d3f73b
  target          5.0ms        5.0ms        5.0ms
Packit d3f73b
  interval      100.0ms      100.0ms      100.0ms
Packit d3f73b
  pk_delay        8.7ms        6.9ms        5.0ms
Packit d3f73b
  av_delay        4.9ms        5.3ms        3.8ms
Packit d3f73b
  sp_delay        727us        1.4ms        511us
Packit d3f73b
  pkts             2590        21271         8137
Packit d3f73b
  bytes         3081804     30302659     11426206
Packit d3f73b
  way_inds            0           46            0
Packit d3f73b
  way_miss            3           17            4
Packit d3f73b
  way_cols            0            0            0
Packit d3f73b
  drops              20           15           10
Packit d3f73b
  marks               0            0            0
Packit d3f73b
  ack_drop            0            0            0
Packit d3f73b
  sp_flows            2            4            1
Packit d3f73b
  bk_flows            1            2            1
Packit d3f73b
  un_flows            0            0            0
Packit d3f73b
  max_len          1514         1514         1514
Packit d3f73b
  quantum           300         1514          762
Packit d3f73b
Packit d3f73b
.SH SEE ALSO
Packit d3f73b
.BR tc (8),
Packit d3f73b
.BR tc-codel (8),
Packit d3f73b
.BR tc-fq_codel (8),
Packit d3f73b
.BR tc-htb (8)
Packit d3f73b
Packit d3f73b
.SH AUTHORS
Packit d3f73b
Cake's principal author is Jonathan Morton, with contributions from
Packit d3f73b
Tony Ambardar, Kevin Darbyshire-Bryant, Toke Høiland-Jørgensen,
Packit d3f73b
Sebastian Moeller, Ryan Mounce, Dean Scarff, Nils Andreas Svee, and Dave Täht.
Packit d3f73b
Packit d3f73b
This manual page was written by Loganaden Velvindron. Please report corrections
Packit d3f73b
to the Linux Networking mailing list <netdev@vger.kernel.org>.