STANNIX Community


Manual: tc-cbs

CBS(8)							    Linux						      CBS(8)

NAME
       CBS - Credit Based Shaper (CBS) Qdisc

SYNOPSIS
       tc  qdisc  ... dev dev parent classid [ handle major: ] cbs idleslope idleslope sendslope sendslope hicredit hicredit
       locredit locredit [ offload 0|1 ]

DESCRIPTION
       The CBS (Credit Based Shaper) qdisc implements the shaping algorithm defined by the IEEE 802.1Q-2014 Section 8.6.8.2,
       which applies a well defined rate limiting method to the traffic.

       This queueing discipline is intended to be used by TSN (Time Sensitive Networking) applications, the  CBS  parameters
       are derived directly by what is described by the Annex L of the IEEE 802.1Q-2014 Specification. The algorithm and how
       it affects the latency are detailed there.

       CBS is meant to be installed under another qdisc that maps packet flows to traffic classes, one example is mqprio(8).

PARAMETERS
       idleslope
	      Idleslope	 is  the  rate	of  credits  that is accumulated (in kilobits per second) when there is at least one
	      packet waiting for transmission.	Packets are transmitted when the  current  value  of  credits  is  equal  or
	      greater than zero. When there is no packet to be transmitted the amount of credits is set to zero. This is the
	      main  tunable  of the CBS algorithm and represents the bandwidth that will be consumed.  Note that when calcu‐
	      lating idleslope, the entire packet size must be considered, including headers from all layers (i.e. MAC fram‐
	      ing and any overhead from the physical layer), as described by IEEE 802.1Q-2014 section 34.4.

	      As an example, for an ethernet frame carrying 284 bytes of payload, and with no VLAN tags,  you  must  add  14
	      bytes  for the Ethernet headers, 4 bytes for the Frame check sequence (CRC), and 20 bytes for the L1 overhead:
	      12 bytes of interpacket gap, 7 bytes of preamble and 1 byte of start of frame delimiter. That results  in	 322
	      bytes for the total packet size, which is then used for calculating the idleslope.

       sendslope
	      Sendslope is the rate of credits that is depleted (it should be a negative number of kilobits per second) when
	      a transmission is occurring. It can be calculated as follows, (IEEE 802.1Q-2014 Section 8.6.8.2 item g):

	      sendslope = idleslope - port_transmit_rate

       hicredit
	      Hicredit	defines	 the  maximum  amount of credits (in bytes) that can be accumulated. Hicredit depends on the
	      characteristics of interfering traffic, 'max_interference_size' is the maximum size of any  burst	 of  traffic
	      that  can	 delay	the transmission of a frame that is available for transmission for this traffic class, (IEEE
	      802.1Q-2014 Annex L, Equation L-3):

	      hicredit = max_interference_size * (idleslope / port_transmit_rate)

       locredit
	      Locredit is the minimum amount of credits that can be reached. It is a function of the traffic flowing through
	      this qdisc (IEEE 802.1Q-2014 Annex L, Equation L-2):

	      locredit = max_frame_size * (sendslope / port_transmit_rate)

       offload
	      When offload is 1, cbs(8) will try to configure the network interface so the CBS algorithm runs  in  the	con‐
	      troller. The default is 0.

EXAMPLES
       CBS  is	used  to enforce a Quality of Service by limiting the data rate of a traffic class, to separate packets into
       traffic classes the user may choose mqprio(8), and configure it like this:

       # 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

       To replace the current queuing disciple by CBS in the current queueing discipline connected to traffic  class  number
       0, issue:

       # tc qdisc replace dev eth0 parent 100:4 cbs \
	    locredit -1470 hicredit 30 sendslope -980000 idleslope 20000

       These  values are obtained from the following parameters, idleslope is 20mbit/s, the transmission rate is 1Gbit/s and
       the maximum interfering frame size is 1500 bytes.

AUTHORS
       Vinicius Costa Gomes 

iproute2						18 Sept 2017						      CBS(8)