mirror of
				https://git.proxmox.com/git/mirror_iproute2
				synced 2025-10-31 12:21:10 +00:00 
			
		
		
		
	 d2773f1261
			
		
	
	
		d2773f1261
		
	
	
	
	
		
			
			Add a new module to generate and parse options specific to the ETS Qdisc.
Example output:
    bands 8 strict 3 priomap 0 1 2 3 4 5 6 7
qdisc ets 1: root refcnt 2 offloaded bands 8 strict 3 quanta 1514 1514 1514 1514 1514 priomap 0 1 2 3 4 5 6 7 7 7 7 7 7 7 7 7
[
  {
    "kind": "ets",
    "handle": "1:",
    "root": true,
    "refcnt": 2,
    "offloaded": true,
    "options": {
      "bands": 8,
      "strict": 3,
      "quanta": [1514, 1514, 1514, 1514, 1514],
      "priomap": [0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7]
    }
  }
]
Signed-off-by: Petr Machata <petrm@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
		
	
			
		
			
				
	
	
		
			193 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .TH TC 8 "December 2019" "iproute2" "Linux"
 | |
| .SH NAME
 | |
| ETS \- Enhanced Transmission Selection scheduler
 | |
| .SH SYNOPSIS
 | |
| .B tc qdisc ... ets [ bands
 | |
| number
 | |
| .B ] [ strict
 | |
| number
 | |
| .B ] [ quanta
 | |
| bytes bytes bytes...
 | |
| .B ] [ priomap
 | |
| band band band...
 | |
| .B ]
 | |
| 
 | |
| .B tc class ... ets [ quantum
 | |
| bytes
 | |
| .B ]
 | |
| 
 | |
| .SH DESCRIPTION
 | |
| 
 | |
| The Enhanced Transmission Selection scheduler is a classful queuing
 | |
| discipline that merges functionality of PRIO and DRR qdiscs in one
 | |
| scheduler. ETS makes it easy to configure a set of strict and
 | |
| bandwidth-sharing bands to implement the transmission selection described
 | |
| in 802.1Qaz.
 | |
| 
 | |
| On creation with 'tc qdisc add', a fixed number of bands is created. Each
 | |
| band is a class, although it is not possible to directly add and remove
 | |
| bands with 'tc class' commands. The number of bands to be created must
 | |
| instead be specified on the command line as the qdisc is added.
 | |
| 
 | |
| The minor number of classid to use when referring to a band is the band
 | |
| number increased by one. Thus band 0 will have classid of major:1, band 1
 | |
| that of major:2, etc.
 | |
| 
 | |
| ETS bands are of two types: some number may be in strict mode, the
 | |
| remaining ones are in bandwidth-sharing mode.
 | |
| 
 | |
| .SH ALGORITHM
 | |
| When dequeuing, strict bands are tried first, if there are any. Band 0 is
 | |
| tried first. If it did not deliver a packet, band 1 is tried next, and so
 | |
| on until one of the bands delivers a packet, or the strict bands are
 | |
| exhausted.
 | |
| 
 | |
| If no packet has been dequeued from any of the strict bands, if there are
 | |
| any bandwidth-sharing bands, the dequeuing proceeds according to the DRR
 | |
| algorithm. Each bandwidth-sharing band is assigned a deficit counter,
 | |
| initialized to quantum assigned by a
 | |
| .B quanta
 | |
| element. ETS maintains an (internal) ''active'' list of bandwidth-sharing
 | |
| bands whose qdiscs are non-empty. This list is used for dequeuing. A packet
 | |
| is dequeued from the band at the head of the list if the packet size is
 | |
| smaller or equal to the deficit counter. If the counter is too small, it is
 | |
| increased by
 | |
| .B quantum
 | |
| and the scheduler moves on to the next band in the active list.
 | |
| 
 | |
| Only qdiscs that own their queue should be added below the
 | |
| bandwidth-sharing bands. Attaching to them non-work-conserving qdiscs like
 | |
| TBF does not make sense \-\- other qdiscs in the active list will be
 | |
| skipped until the dequeue operation succeeds. This limitation does not
 | |
| exist with the strict bands.
 | |
| 
 | |
| .SH CLASSIFICATION
 | |
| The ETS qdisc allows three ways to decide which band to enqueue a packet
 | |
| to:
 | |
| 
 | |
| - Packet priority can be directly set to a class handle, in which case that
 | |
|   is the queue where the packet will be put. For example, band number 2 of
 | |
|   a qdisc with handle of 11: will have classid 11:3. To mark a packet for
 | |
|   queuing to this band, the packet priority should be set to 0x110003.
 | |
| 
 | |
| - A tc filter attached to the qdisc can put the packet to a band by using
 | |
|   the \fBflowid\fR keyword.
 | |
| 
 | |
| - As a last resort, the ETS qdisc consults its priomap (see below), which
 | |
|   maps packets to bands based on packet priority.
 | |
| 
 | |
| .SH PARAMETERS
 | |
| .TP
 | |
| strict
 | |
| The number of bands that should be created in strict mode. If not given,
 | |
| this value is 0.
 | |
| 
 | |
| .TP
 | |
| quanta
 | |
| Each bandwidth-sharing band needs to know its quantum, which is the amount
 | |
| of bytes a band is allowed to dequeue before the scheduler moves to the
 | |
| next bandwidth-sharing band. The
 | |
| .B quanta
 | |
| argument lists quanta for the individual bandwidth-sharing bands.
 | |
| The minimum value of each quantum is 1. If
 | |
| .B quanta
 | |
| is not given, the default is no bandwidth-sharing bands, but note that when
 | |
| specifying a large number of
 | |
| .B bands,
 | |
| the extra ones are in bandwidth-sharing mode by default.
 | |
| 
 | |
| .TP
 | |
| bands
 | |
| Number of bands given explicitly. This value has to be at least large
 | |
| enough to cover the strict bands specified through the
 | |
| .B strict
 | |
| keyword and bandwidth-sharing bands specified in
 | |
| .B quanta.
 | |
| If a larger value is given, any extra bands are in bandwidth-sharing mode,
 | |
| and their quanta are deduced from the interface MTU. If no value is given,
 | |
| as many bands are created as necessary to cover all bands implied by the
 | |
| .B strict
 | |
| and
 | |
| .B quanta
 | |
| keywords.
 | |
| 
 | |
| .TP
 | |
| priomap
 | |
| The priomap maps the priority of a packet to a band. The argument is a list
 | |
| of numbers. The first number indicates which band the packets with priority
 | |
| 0 should be put to, the second is for priority 1, and so on.
 | |
| 
 | |
| There can be up to 16 numbers in the list. If there are fewer, the default
 | |
| band that traffic with one of the unmentioned priorities goes to is the
 | |
| last one.
 | |
| 
 | |
| .SH EXAMPLE & USAGE
 | |
| 
 | |
| .P
 | |
| Add a qdisc with 8 bandwidth-sharing bands, using the interface MTU as
 | |
| their quanta. Since all quanta are the same, this will lead to equal
 | |
| distribution of bandwidth between the bands, each will get about 12.5% of
 | |
| the link. The low 8 priorities go to individual bands in a reverse 1:1
 | |
| fashion (such that the highest priority goes to the first band).
 | |
| 
 | |
| .P
 | |
| # tc qdisc add dev eth0 root handle 1: ets bands 8 priomap 7 6 5 4 3 2 1 0
 | |
| .br
 | |
| # tc qdisc show dev eth0
 | |
| .br
 | |
| qdisc ets 1: root refcnt 2 bands 8 quanta 1514 1514 1514 1514 1514 1514 1514 1514 priomap 7 6 5 4 3 2 1 0 7 7 7 7 7 7 7 7
 | |
| 
 | |
| .P
 | |
| Tweak the first band of the above qdisc to give it a quantum of 2650, which
 | |
| will give it about 20% of the link (and about 11.5% to the remaining
 | |
| bands):
 | |
| 
 | |
| .P
 | |
| # tc class change dev eth0 classid 1:1 ets quantum 2650
 | |
| .br
 | |
| # tc qdisc show dev eth0
 | |
| .br
 | |
| qdisc ets 1: root refcnt 2 bands 8 quanta 2650 1514 1514 1514 1514 1514 1514 1514 priomap 7 6 5 4 3 2 1 0 7 7 7 7 7 7 7 7
 | |
| 
 | |
| .P
 | |
| Create a purely strict Qdisc with reverse 1:1 mapping between priorities
 | |
| and bands:
 | |
| 
 | |
| .P
 | |
| # tc qdisc add dev eth0 root handle 1: ets strict 8 priomap 7 6 5 4 3 2 1 0
 | |
| .br
 | |
| # tc qdisc sh dev eth0
 | |
| .br
 | |
| qdisc ets 1: root refcnt 2 bands 8 strict 8 priomap 7 6 5 4 3 2 1 0 7 7 7 7 7 7 7 7
 | |
| 
 | |
| .P
 | |
| Add a Qdisc with 6 bands, 3 strict and 3 ETS with 35%-30%-25% weights:
 | |
| .P
 | |
| # tc qdisc add dev eth0 root handle 1: ets strict 3 quanta 3500 3000 2500 priomap 0 1 1 1 2 3 4 5
 | |
| .br
 | |
| # tc qdisc sh dev eth0
 | |
| .br
 | |
| qdisc ets 1: root refcnt 2 bands 6 strict 3 quanta 3500 3000 2500 priomap 0 1 1 1 2 3 4 5 5 5 5 5 5 5 5 5
 | |
| 
 | |
| .P
 | |
| Create a Qdisc such that traffic with priorities 2, 3 and 4 are strictly
 | |
| prioritized over other traffic, and the rest goes into bandwidth-sharing
 | |
| classes with equal weights:
 | |
| .P
 | |
| # tc qdisc add dev eth0 root handle 1: ets bands 8 strict 3 priomap 3 4 0 1 2 5 6 7
 | |
| .br
 | |
| # tc qdisc sh dev eth0
 | |
| .br
 | |
| qdisc ets 1: root refcnt 2 bands 8 strict 3 quanta 1514 1514 1514 1514 1514 priomap 3 4 0 1 2 5 6 7 7 7 7 7 7 7 7 7
 | |
| 
 | |
| .SH SEE ALSO
 | |
| .BR tc (8),
 | |
| .BR tc-prio (8),
 | |
| .BR tc-drr (8)
 | |
| 
 | |
| .SH AUTHOR
 | |
| Parts of both this manual page and the code itself are taken from PRIO and
 | |
| DRR qdiscs.
 | |
| .br
 | |
| ETS qdisc itself was written by Petr Machata.
 |