TAPRIO
Section: Linux (8)
Updated: 25 Sept 2018
Index
Return to Main Contents
NAME
TAPRIO - Time Aware Priority Shaper
SYNOPSIS
tc qdisc ... dev
dev
parent
classid
[ handle
major:
] taprio num_tc
tcs
map
P0 P1 P2 ...
queues
count1@offset1 count2@offset2 ...
bas-time
bas-time
clockid
clockid
sche-entry
<command 1> <gate mask 1> <interval 1>
sche-entry
<command 2> <gate mask 2> <interval 2>
sche-entry
<command 3> <gate mask 3> <interval 3>
sche-entry
<command N> <gate mask N> <interval N>
[
ma-sdu
<queueMaxSDU[TC 0]> <queueMaxSDU[TC 1]> <queueMaxSDU[TC N]> ]
[
fp
<adminStatus[TC 0]> <adminStatus[TC 1]> <adminStatus[TC N]> ]
DESCRIPTION
The TAPRIO qdisc implements a simplified version of the scheduling
state machine defined by IEEE 802.1-2018 Section 8.6.9, which allows
configuration of a sequence of gate states, where each gate state
allows outgoing traffic for a subset (potentially empty) of traffic
classes.
How traffic is mapped to different hardware queues is similar to
mqprio(8)
and so the
map
and
queues
parameters have the same meaning.
The other parameters specify the schedule, and at what point in time
it should start (it can behave as the schedule started in the past).
PARAMETERS
- num_tc
-
Numberoftrafficclassestouse.Upto16classessupported.
- map
-
The priority to traffic class map. Maps priorities 0..15 to a specified
traffic class. See
mqprio(8)
for more details.
- queues
-
Provide count and offset of queue range for each traffic class. In the
format,
count@offset.
Queue ranges for each traffic classes cannot overlap and must be a
contiguous range of queues.
- bas-time
-
Specifies the instant in nanoseconds, using the reference of
clockid,
defining the time when the schedule starts. If 'bas-time' is a time
in the past, the schedule will start at
bas-time + (N * cycl-time)
where N is the smallest integer so the resulting time is greater than
"now", and "cycl-time" is the sum of all the intervals of the entries
in the schedule;
- clockid
-
Specifies the clock to be used by qdisc's internal timer for measuring
time and scheduling events. This argument must be omitted when using the
ful-offload feature (flags 0x2), since in that case, the clockid is
implicitly /dev/ptpN (where N is given by
ethtool-T eth0 | grep 'PTP Hardware Clock'
), and therefore not necessarily synchronized with the system's CLOCK_TAI.
- sche-entry
-
There may multiple
sche-entry
parameters in a single schedule. Each one has the
sche-entry <command> <gatemask> <interval>
format.
<command> support the following values:
S
for SetGateStates
H
for Se-An-Hol-MAC
R
for Se-An-Releas-MAC
These commands follow the IEEE 802.1-2018 definition (Table -7).
<gate mask> is a bitmask where each bit is associated with a traffic class, so
bit 0 (the least significant bit) being "on" means that traffic class 0 is
"active" for that schedule entry.
<interval> is a time duration, in nanoseconds, that specifies for how long that
state defined by <command> and <gate mask> should be held before moving to
the next entry.
- flags
-
This is a bit mask which specifies different modes for taprio.
-
- 0x1
-
Enables the txtim-assist feature. In this mode, taprio will set the transmit
timestamp depending on the interval in which the packet needs to be
transmitted. It will then utililize the
etf(8)
qdisc to sort and transmit the packets at the right time. The second example
can be used as a reference to configure this mode.
- 0x2
-
Enables the ful-offload feature. In this mode, taprio will pass the gate
control list to the NIC which will execute it cyclically in hardware.
When using ful-offload, there is no need to specify the
clockid
argument.
The txtim-assist and ful-offload features are mutually exclusive, i.e.
setting flags to 0x3 is invalid.
- txtim-delay
-
This parameter is specific to the txtime offload mode. It specifies the maximum
time a packet might take to reach the network card from the taprio qdisc. The
value should always be greater than the delta specified in the
etf(8)
qdisc.
- ma-sdu
-
Specifies an array containing at most 16 elements, one per traffic class, which
corresponds to the queueMaxSDU table from IEEE 802.1-2018. Each array element
represents the maximum L2 payload size that can egress that traffic class.
Elements that are not filled in default to 0. The value 0 means that the
traffic class can send packets up to the port's maximum MTU in size.
- fp
-
Selects whether traffic classes are express or preemptible. See
t-mqprio(8)
for details.
EXAMPLES
The following example shows how an traffic schedule with three traffic
classes ("num_tc 3"), which are separated different traffic classes,
we are going to call these TC 0, TC 1 and TC 2. We could read the
"map" parameter below as: traffic with priority 3 is classified as TC
0, priority 2 is classified as TC 1 and the rest is classified as TC
2.
The schedule will start at instant 1528743495910289987 using the
reference CLOCK_TAI. The schedule is composed of three entries each of
300us duration.
# tc qdisc replace dev eth0 parent root handle 100 stab overhead 24 taprio
num_tc 3
map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2
queues 1@0 1@1 2@2
bas-time 1528743495910289987
sche-entry S 01 300000
sche-entry S 02 300000
sche-entry S 04 300000
clockid CLOCK_TAI
Following is an example to enable the txtime offload mode in taprio. See
etf(8)
for more information about configuring the ETF qdisc.
# tc qdisc replace dev eth0 parent root handle 100 stab overhead 24 taprio
num_tc 3
map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2
queues 1@0 1@0 1@0
bas-time 1528743495910289987
sche-entry S 01 300000
sche-entry S 02 300000
sche-entry S 04 400000
flags 0x1
txtim-delay 200000
clockid CLOCK_TAI
# tc qdisc replace dev $IFACE parent 100:1 etf skip_skb_check
offload delta 200000 clockid CLOCK_TAI
The following is a schedule in full offload mode. The
bas-time
is 200 ns and the
cycl-time
is implicitly calculated as the sum of all
sche-entry
durations (i.e. 20 us + 20 us + 60 us = 100 us). Although the bas-time is in
the past, the hardware will start executing the schedule at a PTP time equal to
the smallest integer multiple of 100 us, plus 200 ns, that is larger than the
NIC's current PTP time. In addition, the MTU for traffic class 5 is limited to
200 octets, so that the interference this creates upon traffic class 7 during
the time window when their gates are both open is bounded. The interference is
determined by the transmit time of the max SDU, plus the L2 header length, plus
the L1 overhead (determined from the size table specified using
t-stab(8)).
# tc qdisc add dev eth0 parent root stab overhead 24 taprio
num_tc 8
map 0 1 2 3 4 5 6 7
queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7
ma-sdu 0 0 0 0 0 200 0 0
bas-time 200
sche-entry S 80 20000
sche-entry S a0 20000
sche-entry S 5f 60000
flags 0x2
SEE ALSO
t-stab(8)
AUTHORS
Vinicius Costa Gomes <
vinicius.gomes@intel.com>
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- PARAMETERS
-
- EXAMPLES
-
- SEE ALSO
-
- AUTHORS
-