Skip to content
  • Amritha Nambiar's avatar
    mqprio: Introduce new hardware offload mode and shaper in mqprio · 4e8b86c0
    Amritha Nambiar authored
    
    
    The offload types currently supported in mqprio are 0 (no offload) and
    1 (offload only TCs) by setting these values for the 'hw' option. If
    offloads are supported by setting the 'hw' option to 1, the default
    offload mode is 'dcb' where only the TC values are offloaded to the
    device. This patch introduces a new hardware offload mode called
    'channel' with 'hw' set to 1 in mqprio which makes full use of the
    mqprio options, the TCs, the queue configurations and the QoS parameters
    for the TCs. This is achieved through a new netlink attribute for the
    'mode' option which takes values such as 'dcb' (default) and 'channel'.
    The 'channel' mode also supports QoS attributes for traffic class such as
    minimum and maximum values for bandwidth rate limits.
    
    This patch enables configuring additional HW shaper attributes associated
    with a traffic class. Currently the shaper for bandwidth rate limiting is
    supported which takes options such as minimum and maximum bandwidth rates
    and are offloaded to the hardware in the 'channel' mode. The min and max
    limits for bandwidth rates are provided by the user along with the TCs
    and the queue configurations when creating the mqprio qdisc. The interface
    can be extended to support new HW shapers in future through the 'shaper'
    attribute.
    
    Introduces a new data structure 'tc_mqprio_qopt_offload' for offloading
    mqprio queue options and use this to be shared between the kernel and
    device driver. This contains a copy of the existing data structure
    for mqprio queue options. This new data structure can be extended when
    adding new attributes for traffic class such as mode, shaper, shaper
    parameters (bandwidth rate limits). The existing data structure for mqprio
    queue options will be shared between the kernel and userspace.
    
    Example:
      queues 4@0 4@4 hw 1 mode channel shaper bw_rlimit\
      min_rate 1Gbit 2Gbit max_rate 4Gbit 5Gbit
    
    To dump the bandwidth rates:
    
    qdisc mqprio 804a: root  tc 2 map 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
                 queues:(0:3) (4:7)
                 mode:channel
                 shaper:bw_rlimit   min_rate:1Gbit 2Gbit   max_rate:4Gbit 5Gbit
    
    Signed-off-by: default avatarAmritha Nambiar <amritha.nambiar@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    4e8b86c0