mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-05 01:20:31 +00:00

Slotting is a crude approximation of the behaviors of shared media such as cable, wifi, and LTE, which gather up a bunch of packets within a varying delay window and deliver them, relative to that, nearly all at once. It works within the existing loss, duplication, jitter and delay parameters of netem. Some amount of inherent latency must be specified, regardless. The new "slot" parameter specifies a minimum and maximum delay between transmission attempts. The "bytes" and "packets" parameters can be used to limit the amount of information transferred per slot. Examples of use: tc qdisc add dev eth0 root netem delay 200us \ slot 800us 10ms bytes 64k packets 42 A more correct example, using stacked netem instances and a packet limit to emulate a tail drop wifi queue with slots and variable packet delivery, with a 200Mbit isochronous underlying rate, and 20ms path delay: tc qdisc add dev eth0 root handle 1: netem delay 20ms rate 200mbit \ limit 10000 tc qdisc add dev eth0 parent 1:1 handle 10:1 netem delay 200us \ slot 800us 10ms bytes 64k packets 42 limit 512 Signed-off-by: Yousuk Seung <ysseung@google.com> Signed-off-by: Dave Taht <dave.taht@gmail.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David Ahern <dsahern@gmail.com>
229 lines
8.1 KiB
Groff
229 lines
8.1 KiB
Groff
.TH NETEM 8 "25 November 2011" "iproute2" "Linux"
|
|
.SH NAME
|
|
NetEm \- Network Emulator
|
|
.SH SYNOPSIS
|
|
.B "tc qdisc ... dev"
|
|
.IR DEVICE " ] "
|
|
.BR "add netem"
|
|
.I OPTIONS
|
|
|
|
.IR OPTIONS " := [ " LIMIT " ] [ " DELAY " ] [ " LOSS \
|
|
" ] [ " CORRUPT " ] [ " DUPLICATION " ] [ " REORDERING " ] [ " RATE \
|
|
" ] [ " SLOT " ]"
|
|
|
|
.IR LIMIT " := "
|
|
.B limit
|
|
.I packets
|
|
|
|
.IR DELAY " := "
|
|
.BI delay
|
|
.IR TIME " [ " JITTER " [ " CORRELATION " ]]]"
|
|
.br
|
|
[
|
|
.BR distribution " { "uniform " | " normal " | " pareto " | " paretonormal " } ]"
|
|
|
|
.IR LOSS " := "
|
|
.BR loss " { "
|
|
.BI random
|
|
.IR PERCENT " [ " CORRELATION " ] |"
|
|
.br
|
|
.RB " " state
|
|
.IR p13 " [ " p31 " [ " p32 " [ " p23 " [ " p14 "]]]] |"
|
|
.br
|
|
.RB " " gemodel
|
|
.IR p " [ " r " [ " 1-h " [ " 1-k " ]]] } "
|
|
.RB " [ " ecn " ] "
|
|
|
|
.IR CORRUPT " := "
|
|
.B corrupt
|
|
.IR PERCENT " [ " CORRELATION " ]]"
|
|
|
|
.IR DUPLICATION " := "
|
|
.B duplicate
|
|
.IR PERCENT " [ " CORRELATION " ]]"
|
|
|
|
.IR REORDERING " := "
|
|
.B reorder
|
|
.IR PERCENT " [ " CORRELATION " ] [ "
|
|
.B gap
|
|
.IR DISTANCE " ]"
|
|
|
|
.IR RATE " := "
|
|
.B rate
|
|
.IR RATE " [ " PACKETOVERHEAD " [ " CELLSIZE " [ " CELLOVERHEAD " ]]]]"
|
|
|
|
.IR SLOT " := "
|
|
.BR slot
|
|
.IR MIN_DELAY " [ " MAX_DELAY " ] ["
|
|
.BR packets
|
|
.IR PACKETS " ] [ "
|
|
.BR bytes
|
|
.IR BYTES " ]"
|
|
|
|
|
|
.SH DESCRIPTION
|
|
NetEm is an enhancement of the Linux traffic control facilities
|
|
that allow to add delay, packet loss, duplication and more other
|
|
characteristics to packets outgoing from a selected network
|
|
interface. NetEm is built using the existing Quality Of Service (QOS)
|
|
and Differentiated Services (diffserv) facilities in the Linux
|
|
kernel.
|
|
|
|
.SH netem OPTIONS
|
|
netem has the following options:
|
|
|
|
.SS limit packets
|
|
|
|
maximum number of packets the qdisc may hold queued at a time.
|
|
|
|
.SS delay
|
|
adds the chosen delay to the packets outgoing to chosen network interface. The
|
|
optional parameters allows to introduce a delay variation and a correlation.
|
|
Delay and jitter values are expressed in ms while correlation is percentage.
|
|
|
|
.SS distribution
|
|
allow the user to choose the delay distribution. If not specified, the default
|
|
distribution is Normal. Additional parameters allow to consider situations in
|
|
which network has variable delays depending on traffic flows concurring on the
|
|
same path, that causes several delay peaks and a tail.
|
|
|
|
.SS loss random
|
|
adds an independent loss probability to the packets outgoing from the chosen
|
|
network interface. It is also possible to add a correlation, but this option
|
|
is now deprecated due to the noticed bad behavior.
|
|
|
|
.SS loss state
|
|
adds packet losses according to the 4-state Markov using the transition
|
|
probabilities as input parameters. The parameter p13 is mandatory and if used
|
|
alone corresponds to the Bernoulli model. The optional parameters allows to
|
|
extend the model to 2-state (p31), 3-state (p23 and p32) and 4-state (p14).
|
|
State 1 corresponds to good reception, State 4 to independent losses, State 3
|
|
to burst losses and State 2 to good reception within a burst.
|
|
|
|
.SS loss gemodel
|
|
adds packet losses according to the Gilbert-Elliot loss model or its special
|
|
cases (Gilbert, Simple Gilbert and Bernoulli). To use the Bernoulli model, the
|
|
only needed parameter is p while the others will be set to the default
|
|
values r=1-p, 1-h=1 and 1-k=0. The parameters needed for the Simple Gilbert
|
|
model are two (p and r), while three parameters (p, r, 1-h) are needed for the
|
|
Gilbert model and four (p, r, 1-h and 1-k) are needed for the Gilbert-Elliot
|
|
model. As known, p and r are the transition probabilities between the bad and
|
|
the good states, 1-h is the loss probability in the bad state and 1-k is the
|
|
loss probability in the good state.
|
|
|
|
.SS ecn
|
|
can be used optionally to mark packets instead of dropping them. A loss model
|
|
has to be used for this to be enabled.
|
|
|
|
.SS corrupt
|
|
allows the emulation of random noise introducing an error in a random position
|
|
for a chosen percent of packets. It is also possible to add a correlation
|
|
through the proper parameter.
|
|
|
|
.SS duplicate
|
|
using this option the chosen percent of packets is duplicated before queuing
|
|
them. It is also possible to add a correlation through the proper parameter.
|
|
|
|
.SS reorder
|
|
to use reordering, a delay option must be specified. There are two ways to use
|
|
this option (assuming 'delay 10ms' in the options list).
|
|
|
|
.B "reorder "
|
|
.I 25% 50%
|
|
.B "gap"
|
|
.I 5
|
|
.br
|
|
in this first example, the first 4 (gap - 1) packets are delayed by 10ms and
|
|
subsequent packets are sent immediately with a probability of 0.25 (with
|
|
correlation of 50% ) or delayed with a probability of 0.75. After a packet is
|
|
reordered, the process restarts i.e. the next 4 packets are delayed and
|
|
subsequent packets are sent immediately or delayed based on reordering
|
|
probability. To cause a repeatable pattern where every 5th packet is reordered
|
|
reliably, a reorder probability of 100% can be used.
|
|
|
|
.B reorder
|
|
.I 25% 50%
|
|
.br
|
|
in this second example 25% of packets are sent immediately (with correlation of
|
|
50%) while the others are delayed by 10 ms.
|
|
|
|
.SS rate
|
|
delay packets based on packet size and is a replacement for
|
|
.IR TBF .
|
|
Rate can be
|
|
specified in common units (e.g. 100kbit). Optional
|
|
.I PACKETOVERHEAD
|
|
(in bytes) specify an per packet overhead and can be negative. A positive value can be
|
|
used to simulate additional link layer headers. A negative value can be used to
|
|
artificial strip the Ethernet header (e.g. -14) and/or simulate a link layer
|
|
header compression scheme. The third parameter - an unsigned value - specify
|
|
the cellsize. Cellsize can be used to simulate link layer schemes. ATM for
|
|
example has an payload cellsize of 48 bytes and 5 byte per cell header. If a
|
|
packet is 50 byte then ATM must use two cells: 2 * 48 bytes payload including 2
|
|
* 5 byte header, thus consume 106 byte on the wire. The last optional value
|
|
.I CELLOVERHEAD
|
|
can be used to specify per cell overhead - for our ATM example 5.
|
|
.I CELLOVERHEAD
|
|
can be negative, but use negative values with caution.
|
|
|
|
Note that rate throttling is limited by several factors: the kernel clock
|
|
granularity avoid a perfect shaping at a specific level. This will show up in
|
|
an artificial packet compression (bursts). Another influence factor are network
|
|
adapter buffers which can also add artificial delay.
|
|
|
|
.SS slot
|
|
defer delivering accumulated packets to within a slot, with each available slot
|
|
configured with a minimum delay to acquire, and an optional maximum delay. Slot
|
|
delays can be specified in nanoseconds, microseconds, milliseconds or seconds
|
|
(e.g. 800us). Values for the optional parameters
|
|
.I BYTES
|
|
will limit the number of bytes delivered per slot, and/or
|
|
.I PACKETS
|
|
will limit the number of packets delivered per slot.
|
|
|
|
These slot options can provide a crude approximation of bursty MACs such as
|
|
DOCSIS, WiFi, and LTE.
|
|
|
|
Note that slotting is limited by several factors: the kernel clock granularity,
|
|
as with a rate, and attempts to deliver many packets within a slot will be
|
|
smeared by the timer resolution, and by the underlying native bandwidth also.
|
|
|
|
It is possible to combine slotting with a rate, in which case complex behaviors
|
|
where either the rate, or the slot limits on bytes or packets per slot, govern
|
|
the actual delivered rate.
|
|
|
|
.SH LIMITATIONS
|
|
The main known limitation of Netem are related to timer granularity, since
|
|
Linux is not a real-time operating system.
|
|
|
|
.SH EXAMPLES
|
|
.PP
|
|
tc qdisc add dev eth0 root netem rate 5kbit 20 100 5
|
|
.RS 4
|
|
delay all outgoing packets on device eth0 with a rate of 5kbit, a per packet
|
|
overhead of 20 byte, a cellsize of 100 byte and a per celloverhead of 5 byte:
|
|
.RE
|
|
|
|
.SH SOURCES
|
|
.IP " 1. " 4
|
|
Hemminger S. , "Network Emulation with NetEm", Open Source Development Lab,
|
|
April 2005
|
|
(http://devresources.linux-foundation.org/shemminger/netem/LCA2005_paper.pdf)
|
|
|
|
.IP " 2. " 4
|
|
Netem page from Linux foundation, (http://www.linuxfoundation.org/en/Net:Netem)
|
|
|
|
.IP " 3. " 4
|
|
Salsano S., Ludovici F., Ordine A., "Definition of a general and intuitive loss
|
|
model for packet networks and its implementation in the Netem module in the
|
|
Linux kernel", available at http://netgroup.uniroma2.it/NetemCLG
|
|
|
|
.SH SEE ALSO
|
|
.BR tc (8),
|
|
.BR tc-tbf (8)
|
|
|
|
.SH AUTHOR
|
|
Netem was written by Stephen Hemminger at Linux foundation and is based on NISTnet.
|
|
This manpage was created by Fabio Ludovici <fabio.ludovici at yahoo dot it> and
|
|
Hagen Paul Pfeifer <hagen@jauu.net>
|