| .TH ETF 8 "05 Jul 2018" "iproute2" "Linux" |
| .SH NAME |
| ETF \- Earliest TxTime First (ETF) Qdisc |
| .SH SYNOPSIS |
| .B tc qdisc ... dev |
| dev |
| .B parent |
| classid |
| .B [ handle |
| major: |
| .B ] etf clockid |
| clockid |
| .B [ delta |
| delta_nsecs |
| .B ] [ deadline_mode ] |
| .B [ offload ] |
| |
| .SH DESCRIPTION |
| The ETF (Earliest TxTime First) qdisc allows applications to control |
| the instant when a packet should be dequeued from the traffic control |
| layer into the netdevice. If |
| .B offload |
| is configured and supported by the network interface card, the it will |
| also control when packets leave the network controller. |
| |
| ETF achieves that by buffering packets until a configurable time |
| before their transmission time (i.e. txtime, or deadline), which can |
| be configured through the |
| .B delta |
| option. |
| |
| The qdisc uses a rb-tree internally so packets are always 'ordered' by |
| their txtime and will be dequeued following the (next) earliest txtime |
| first. |
| |
| It relies on the SO_TXTIME socket option and the SCM_TXTIME CMSG in |
| each packet field to configure the behavior of time dependent sockets: |
| the clockid to be used as a reference, if the expected mode of txtime |
| for that socket is deadline or strict mode, and if packet drops should |
| be reported on the socket's error queue. See |
| .BR socket(7) |
| for more information. |
| |
| The etf qdisc will drop any packets with a txtime in the past, or if a |
| packet expires while waiting for being dequeued. |
| |
| This queueing discipline is intended to be used by TSN (Time Sensitive |
| Networking) applications, and it exposes a traffic shaping functionality |
| that is commonly documented as "Launch Time" or "Time-Based Scheduling" |
| by vendors and the documentation of network interface controllers. |
| |
| ETF is meant to be installed under another qdisc that maps packet flows |
| to traffic classes, one example is |
| .BR mqprio(8). |
| |
| .SH PARAMETERS |
| .TP |
| clockid |
| .br |
| Specifies the clock to be used by qdisc's internal timer for measuring |
| time and scheduling events. The qdisc expects that packets passing |
| through it to be using this same |
| .B clockid |
| as the reference of their txtime timestamps. It will drop packets |
| coming from sockets that do not comply with that. |
| |
| For more information about time and clocks on Linux, please refer |
| to |
| .BR time(7) |
| and |
| .BR clock_gettime(3). |
| |
| .TP |
| delta |
| .br |
| After enqueueing or dequeueing a packet, the qdisc will schedule its |
| next wake-up time for the next txtime minus this delta value. |
| This means |
| .B delta |
| can be used as a fudge factor for the scheduler latency of a system. |
| This value must be specified in nanoseconds. |
| The default value is 0 nanoseconds. |
| |
| .TP |
| deadline_mode |
| .br |
| When |
| .B deadline_mode |
| is set, the qdisc will handle txtime with a different semantics, |
| changed from a 'strict' transmission time to a deadline. |
| In practice, this means during the dequeue flow |
| .BR etf(8) |
| will set the txtime of the packet being dequeued to 'now'. |
| The default is for this option to be disabled. |
| |
| .TP |
| offload |
| .br |
| When |
| .B offload |
| is set, |
| .BR etf(8) |
| will try to configure the network interface so time-based transmission |
| arbitration is enabled in the controller. This feature is commonly |
| referred to as "Launch Time" or "Time-Based Scheduling" by the |
| documentation of network interface controllers. |
| The default is for this option to be disabled. |
| |
| .TP |
| skip_sock_check |
| .br |
| .BR etf(8) |
| currently drops any packet which does not have a socket associated with it or |
| if the socket does not have SO_TXTIME socket option set. But, this will not |
| work if the launchtime is set by another entity inside the kernel (e.g. some |
| other Qdisc). Setting the skip_sock_check will skip checking for a socket |
| associated with the packet. |
| |
| .SH EXAMPLES |
| |
| ETF is used to enforce a Quality of Service. It controls when each |
| packets should be dequeued and transmitted, and can be used for |
| limiting the data rate of a traffic class. To separate packets into |
| traffic classes the user may choose |
| .BR mqprio(8), |
| and configure it like this: |
| |
| .EX |
| # tc qdisc add dev eth0 handle 100: parent root mqprio 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 \\ |
| hw 0 |
| .EE |
| .P |
| To replace the current queueing discipline by ETF in traffic class |
| number 0, issue: |
| .P |
| .EX |
| # tc qdisc replace dev eth0 parent 100:1 etf \\ |
| clockid CLOCK_TAI delta 300000 offload |
| .EE |
| |
| With the options above, etf will be configured to use CLOCK_TAI as |
| its clockid_t, will schedule packets for 300 us before their txtime, |
| and will enable the functionality on that in the network interface |
| card. Deadline mode will not be configured for this mode. |
| |
| .SH AUTHORS |
| Jesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com> |
| .br |
| Vinicius Costa Gomes <vinicius.gomes@intel.com> |