more documentation on new dummynet features.
This commit is contained in:
parent
03dab16e1d
commit
34ae843479
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=204758
116
sbin/ipfw/ipfw.8
116
sbin/ipfw/ipfw.8
@ -1404,7 +1404,7 @@ If not found, the match fails.
|
|||||||
Otherwise, the match succeeds and
|
Otherwise, the match succeeds and
|
||||||
.Cm tablearg
|
.Cm tablearg
|
||||||
is set to the value extracted from the table.
|
is set to the value extracted from the table.
|
||||||
.Br
|
.Pp
|
||||||
This option can be useful to quickly dispatch traffic based on
|
This option can be useful to quickly dispatch traffic based on
|
||||||
certain packet fields.
|
certain packet fields.
|
||||||
See the
|
See the
|
||||||
@ -1847,7 +1847,7 @@ is also the user interface for the
|
|||||||
.Nm dummynet
|
.Nm dummynet
|
||||||
traffic shaper, packet scheduler and network emulator, a subsystem that
|
traffic shaper, packet scheduler and network emulator, a subsystem that
|
||||||
can artificially queue, delay or drop packets
|
can artificially queue, delay or drop packets
|
||||||
emulator the behaviour of certain network links
|
emulating the behaviour of certain network links
|
||||||
or queueing systems.
|
or queueing systems.
|
||||||
.Pp
|
.Pp
|
||||||
.Nm dummynet
|
.Nm dummynet
|
||||||
@ -1859,26 +1859,33 @@ Matching packets are then passed to either of two
|
|||||||
different objects, which implement the traffic regulation:
|
different objects, which implement the traffic regulation:
|
||||||
.Bl -hang -offset XXXX
|
.Bl -hang -offset XXXX
|
||||||
.It Em pipe
|
.It Em pipe
|
||||||
A pipe emulates a link with given bandwidth, propagation delay,
|
A
|
||||||
|
.Em pipe
|
||||||
|
emulates a
|
||||||
|
.Em link
|
||||||
|
with given bandwidth and propagation delay,
|
||||||
|
driven by a FIFO scheduler and a single queue with programmable
|
||||||
queue size and packet loss rate.
|
queue size and packet loss rate.
|
||||||
Packets are queued in front of the pipe as they come out from the classifier,
|
Packets are appended to the queue as they come out from
|
||||||
and then transferred to the pipe according to the pipe's parameters.
|
.Nm ipfw ,
|
||||||
|
and then transferred in FIFO order to the link at the desired rate.
|
||||||
.It Em queue
|
.It Em queue
|
||||||
A queue
|
A
|
||||||
|
.Em queue
|
||||||
is an abstraction used to implement packet scheduling
|
is an abstraction used to implement packet scheduling
|
||||||
using one of several packet scheduling algorithms.
|
using one of several packet scheduling algorithms.
|
||||||
.Pp
|
Packets sent to a
|
||||||
The queue associates a
|
.Em queue
|
||||||
.Em weight
|
are first grouped into flows according to a mask on the 5-tuple.
|
||||||
and a reference scheduler to each flow (a flow is a set of packets
|
Flows are then passed to the scheduler associated to the
|
||||||
with the same addresses and ports after masking).
|
.Em queue ,
|
||||||
A scheduler in turn is connected to a pipe, and arbitrates
|
and each flow uses scheduling parameters (weight and others)
|
||||||
the pipe's bandwidth among backlogged flows according to
|
as configured in the
|
||||||
|
.Em queue
|
||||||
|
itself.
|
||||||
|
A scheduler in turn is connected to an emulated link,
|
||||||
|
and arbitrates the link's bandwidth among backlogged flows according to
|
||||||
weights and to the features of the scheduling algorithm in use.
|
weights and to the features of the scheduling algorithm in use.
|
||||||
.Pp
|
|
||||||
Note that weights are not priorities; a flow with a lower weight
|
|
||||||
is still guaranteed to get its fraction of the bandwidth even if a
|
|
||||||
flow with a higher weight is permanently backlogged.
|
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
In practice,
|
In practice,
|
||||||
@ -1887,6 +1894,52 @@ can be used to set hard limits to the bandwidth that a flow can use, whereas
|
|||||||
.Em queues
|
.Em queues
|
||||||
can be used to determine how different flows share the available bandwidth.
|
can be used to determine how different flows share the available bandwidth.
|
||||||
.Pp
|
.Pp
|
||||||
|
A graphical representation of the binding of queues,
|
||||||
|
flows, schedulers and links is below.
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
(flow_mask|sched_mask) sched_mask
|
||||||
|
+---------+ weight Wx +-------------+
|
||||||
|
| |->-[flow]-->--| |-+
|
||||||
|
-->--| QUEUE x | ... | | |
|
||||||
|
| |->-[flow]-->--| SCHEDuler N | |
|
||||||
|
+---------+ | | |
|
||||||
|
... | +--[LINK N]-->--
|
||||||
|
+---------+ weight Wy | | +--[LINK N]-->--
|
||||||
|
| |->-[flow]-->--| | |
|
||||||
|
-->--| QUEUE y | ... | | |
|
||||||
|
| |->-[flow]-->--| | |
|
||||||
|
+---------+ +-------------+ |
|
||||||
|
+-------------+
|
||||||
|
.Ed
|
||||||
|
It is important to understand the role of the SCHED_MASK
|
||||||
|
and FLOW_MASK, which are configured through the commands
|
||||||
|
.Dl "ipfw sched N config mask SCHED_MASK ..."
|
||||||
|
and
|
||||||
|
.Dl "ipfw queue X config mask FLOW_MASK ..." .
|
||||||
|
.Pp
|
||||||
|
The SCHED_MASK is used to assign flows to one or more
|
||||||
|
scheduler instances, one for each
|
||||||
|
value of the packet's 5-fuple after applying SCHED_MASK.
|
||||||
|
As an example, using ``src-ip 0xffffff00'' creates one instance
|
||||||
|
for each /24 destination subnet.
|
||||||
|
.Pp
|
||||||
|
The FLOW_MASK, together with the SCHED_MASK, is used to split
|
||||||
|
packets into flows. As an example, using
|
||||||
|
``src-ip 0x000000ff''
|
||||||
|
together with the previous SCHED_MASK makes a flow for
|
||||||
|
each individual source address. In turn, flows for each /24
|
||||||
|
subnet will be sent to the same scheduler instance.
|
||||||
|
.Pp
|
||||||
|
The above diagram holds even for the
|
||||||
|
.Em pipe
|
||||||
|
case, with the only restriction that a
|
||||||
|
.Em pipe
|
||||||
|
only supports a SCHED_MASK, and forces the use of a FIFO
|
||||||
|
scheduler (these are for backward compatibility reasons;
|
||||||
|
in fact, internally, a
|
||||||
|
.Nm dummynet's
|
||||||
|
pipe is implemented exactly as above).
|
||||||
|
.Pp
|
||||||
There are two modes of
|
There are two modes of
|
||||||
.Nm dummynet
|
.Nm dummynet
|
||||||
operation:
|
operation:
|
||||||
@ -2087,9 +2140,36 @@ The following parameters can be configured for a scheduler:
|
|||||||
.Pp
|
.Pp
|
||||||
.Bl -tag -width indent -compact
|
.Bl -tag -width indent -compact
|
||||||
.It Cm type Ar {fifo | wf2qp | rr | qfq}
|
.It Cm type Ar {fifo | wf2qp | rr | qfq}
|
||||||
|
specifies the scheduling algorithm to use.
|
||||||
|
.Bl -tag -width indent -compact
|
||||||
|
.It cm fifo
|
||||||
|
is just a FIFO scheduler (which means that all packets
|
||||||
|
are stored in the same queue as they arrive to the scheduler).
|
||||||
|
FIFO has O(1) per-packet time complexity, with very low
|
||||||
|
constants (estimate 60-80ns on a 2Ghz desktop machine)
|
||||||
|
but gives no service guarantees.
|
||||||
|
.It Cm wf2qp
|
||||||
|
implements the WF2Q+ algorithm, which is a Weighted Fair Queueing
|
||||||
|
algorithm which permits flows to share bandwidth according to
|
||||||
|
their weights. Note that weights are not priorities; even a flow
|
||||||
|
with a minuscule weight will never starve.
|
||||||
|
WF2Q+ has O(log N) per-packet processing cost, where N is the number
|
||||||
|
of flows, and is the default algorithm used by previous versions
|
||||||
|
dummynet's queues.
|
||||||
|
.It Cm rr
|
||||||
|
implements the Deficit Round Robin algorithm, which has O(1) processing
|
||||||
|
costs (roughly, 100-150ns per packet)
|
||||||
|
and permits bandwidth allocation according to weights, but
|
||||||
|
with poor service guarantees.
|
||||||
|
.It Cm qfq
|
||||||
|
implements the QFQ algorithm, which is a very fast variant of
|
||||||
|
WF2Q+, with similar service guarantees and O(1) processing
|
||||||
|
costs (roughly, 200-250ns per packet).
|
||||||
|
.El
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
plus all the parameters allowed for a pipe.
|
In addition to the type, all parameters allowed for a pipe can also
|
||||||
|
be specified for a scheduler.
|
||||||
.Pp
|
.Pp
|
||||||
Finally, the following parameters can be configured for both
|
Finally, the following parameters can be configured for both
|
||||||
pipes and queues:
|
pipes and queues:
|
||||||
|
Loading…
Reference in New Issue
Block a user