GNU/Linux |
Debian 7.2.0(Wheezy) |
amd64 |
![]() |
tc-netem(8) |
![]() |
NetEm − Network Emulator
tc qdisc ... dev DEVICE ] add netem OPTIONS
OPTIONS := [ LIMIT ] [ DELAY ] [ LOSS ] [ CORRUPT ] [ DUPLICATION ] [ REORDERING ][ RATE ]
LIMIT := limit packets
DELAY :=
delay TIME [ JITTER [
CORRELATION ]]]
[ distribution { uniform | normal |
pareto | paretonormal } ]
LOSS :=
loss { random PERCENT [
CORRELATION ] |
state p13 [ p31 [ p32 [ p23
[ p14]]]] |
gemodel p [ r [ 1-h [ 1-k
]]] }
CORRUPT := corrupt PERCENT [ CORRELATION ]]
DUPLICATION := duplicate PERCENT [ CORRELATION ]]
REORDERING := reorder PERCENT [ CORRELATION ] [ gap DISTANCE ]
RATE := rate RATE [ PACKETOVERHEAD [ CELLSIZE [ CELLOVERHEAD ]]]] |
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.
netem has the following options:
limit
packets
limits the effect of selected options to the indicated
number of next packets.
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.
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.
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.
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.
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.
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.
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.
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).
reorder
25% 50% gap 5
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.
reorder
25% 50%
in this second example 25% of packets are sent immediately
(with correlation of 50%) while the others are delayed by 10
ms.
rate
delay packets based on packet size and is a replacement for
TBF. Rate can be specified in common units (e.g.
100kbit). Optional 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 CELLOVERHEAD can be
used to specify per cell overhead - for our ATM example 5.
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.
The main known limitation of Netem are related to timer granularity, since Linux is not a real-time operating system.
tc qdisc add dev eth0 root netem rate 5kbit 20 100 5
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:
1. |
Hemminger S. , "Network Emulation with NetEm", Open Source Development Lab, April 2005 (http://devresources.linux-foundation.org/shemminger/netem/LCA2005_paper.pdf) | ||
2. |
Netem page from Linux foundation, (http://www.linuxfoundation.org/en/Net:Netem) | ||
3. |
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 |
tc(8), tc-tbf(8)
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>
![]() |
tc-netem(8) | ![]() |