| .TH TAPRIO 8 "25 Sept 2018" "iproute2" "Linux" |
| .SH NAME |
| TAPRIO \- Time Aware Priority Shaper |
| .SH SYNOPSIS |
| .B tc qdisc ... dev |
| dev |
| .B parent |
| classid |
| .B [ handle |
| major: |
| .B ] taprio num_tc |
| tcs |
| .ti +8 |
| .B map |
| P0 P1 P2 ... |
| .B queues |
| count1@offset1 count2@offset2 ... |
| .ti +8 |
| .B base-time |
| base-time |
| .B clockid |
| clockid |
| .ti +8 |
| .B sched-entry |
| <command 1> <gate mask 1> <interval 1> |
| .ti +8 |
| .B sched-entry |
| <command 2> <gate mask 2> <interval 2> |
| .ti +8 |
| .B sched-entry |
| <command 3> <gate mask 3> <interval 3> |
| .ti +8 |
| .B sched-entry |
| <command N> <gate mask N> <interval N> |
| |
| .SH DESCRIPTION |
| The TAPRIO qdisc implements a simplified version of the scheduling |
| state machine defined by IEEE 802.1Q-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 |
| .BR mqprio(8) |
| and so the |
| .B map |
| and |
| .B 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). |
| |
| .SH PARAMETERS |
| .TP |
| num_tc |
| .BR |
| Number of traffic classes to use. Up to 16 classes supported. |
| |
| .TP |
| map |
| .br |
| The priority to traffic class map. Maps priorities 0..15 to a specified |
| traffic class. See |
| .BR mqprio(8) |
| for more details. |
| |
| .TP |
| queues |
| .br |
| Provide count and offset of queue range for each traffic class. In the |
| format, |
| .B count@offset. |
| Queue ranges for each traffic classes cannot overlap and must be a |
| contiguous range of queues. |
| |
| .TP |
| base-time |
| .br |
| Specifies the instant in nanoseconds, using the reference of |
| .B clockid, |
| defining the time when the schedule starts. If 'base-time' is a time |
| in the past, the schedule will start at |
| |
| base-time + (N * cycle-time) |
| |
| where N is the smallest integer so the resulting time is greater than |
| "now", and "cycle-time" is the sum of all the intervals of the entries |
| in the schedule; |
| |
| .TP |
| clockid |
| .br |
| Specifies the clock to be used by qdisc's internal timer for measuring |
| time and scheduling events. |
| |
| .TP |
| sched-entry |
| .br |
| There may multiple |
| .B sched-entry |
| parameters in a single schedule. Each one has the |
| |
| sched-entry <command> <gatemask> <interval> |
| |
| format. The only supported <command> is "S", which |
| means "SetGateStates", following the IEEE 802.1Q-2018 definition |
| (Table 8-7). <gate mask> is a bitmask where each bit is a 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. |
| |
| .TP |
| flags |
| .br |
| Specifies different modes for taprio. Currently, only txtime-assist is |
| supported which can be enabled by setting it to 0x1. 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 |
| .BR 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. |
| |
| .TP |
| txtime-delay |
| .br |
| 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 |
| .BR etf(8) |
| qdisc. |
| |
| .SH 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. |
| |
| .EX |
| # tc qdisc replace dev eth0 parent root handle 100 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 \\ |
| base-time 1528743495910289987 \\ |
| sched-entry S 01 300000 \\ |
| sched-entry S 02 300000 \\ |
| sched-entry S 04 300000 \\ |
| clockid CLOCK_TAI |
| .EE |
| |
| Following is an example to enable the txtime offload mode in taprio. See |
| .BR etf(8) |
| for more information about configuring the ETF qdisc. |
| |
| .EX |
| # tc qdisc replace dev eth0 parent root handle 100 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 \\ |
| base-time 1528743495910289987 \\ |
| sched-entry S 01 300000 \\ |
| sched-entry S 02 300000 \\ |
| sched-entry S 04 400000 \\ |
| flags 0x1 \\ |
| txtime-delay 200000 \\ |
| clockid CLOCK_TAI |
| |
| # tc qdisc replace dev $IFACE parent 100:1 etf skip_skb_check \\ |
| offload delta 200000 clockid CLOCK_TAI |
| .EE |
| |
| .SH AUTHORS |
| Vinicius Costa Gomes <vinicius.gomes@intel.com> |