CBS(8)                   (18 Sept 2017)                    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 transmit-
               ted when the current value of credits is equal or
               greater than zero. When there is no packet to be trans-
               mitted 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
               calculating idleslope, the entire packet size must be
               considered, including headers from all layers (i.e. MAC
               framing 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.

     Page 1                      iproute2            (printed 5/25/22)

     CBS(8)                   (18 Sept 2017)                    CBS(8)

          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 traf-
               fic 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 traf-
          fic 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 cur-
          rent queueing discipline connected to traffic class number
          0, issue:

     Page 2                      iproute2            (printed 5/25/22)

     CBS(8)                   (18 Sept 2017)                    CBS(8)

          # 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 <vinicius.gomes@intel.com>

     Page 3                      iproute2            (printed 5/25/22)