Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_sched.h(3)			      DPDK			  rte_sched.h(3)

NAME
     rte_sched.h

SYNOPSIS
     #include <rte_common.h>
     #include <rte_mbuf.h>
     #include <rte_meter.h>
     #include 'rte_red.h'
     #include 'rte_pie.h'

   Data Structures
     struct rte_sched_subport_stats
     struct rte_sched_queue_stats
     struct rte_sched_port_params

   Macros
     #define RTE_SCHED_QUEUES_PER_PIPE	 16
     #define RTE_SCHED_BE_QUEUES_PER_PIPE   4
     #define  RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE    (RTE_SCHED_QUEUES_PER_PIPE -
	 RTE_SCHED_BE_QUEUES_PER_PIPE + 1)
     #define RTE_SCHED_TRAFFIC_CLASS_BE   (RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE  -
	 1)

   Enumerations
     enum rte_sched_cman_mode { RTE_SCHED_CMAN_RED, RTE_SCHED_CMAN_PIE }

   Functions
     void rte_sched_port_free (struct rte_sched_port *port)
     struct rte_sched_port * rte_sched_port_config (struct rte_sched_port_params
	 *params) __rte_malloc __rte_dealloc(rte_sched_port_free
     struct   rte_sched_port   int   rte_sched_subport_pipe_profile_add  (struct
	 rte_sched_port *port, uint32_t subport_id, struct rte_sched_pipe_params
	 *params, uint32_t *pipe_profile_id)
     int rte_sched_port_subport_profile_add (struct rte_sched_port *port, struct
	 rte_sched_subport_profile_params   *profile,	uint32_t   *subport_pro-
	 file_id)
     int  rte_sched_subport_config  (struct  rte_sched_port *port, uint32_t sub-
	 port_id, struct rte_sched_subport_params *params, uint32_t subport_pro-
	 file_id)
     int  rte_sched_pipe_config  (struct  rte_sched_port  *port,  uint32_t  sub-
	 port_id, uint32_t pipe_id, int32_t pipe_profile)
     uint32_t  rte_sched_port_get_memory_footprint (struct rte_sched_port_params
	 *port_params, struct rte_sched_subport_params **subport_params)
     int rte_sched_subport_read_stats  (struct	rte_sched_port	*port,	uint32_t
	 subport_id, struct rte_sched_subport_stats *stats, uint32_t *tc_ov)
     int   rte_sched_queue_read_stats  (struct	rte_sched_port	*port,	uint32_t
	 queue_id, struct rte_sched_queue_stats *stats, uint16_t *qlen)
     void rte_sched_port_pkt_write (struct rte_sched_port *port, struct rte_mbuf
	 *pkt, uint32_t subport, uint32_t pipe, uint32_t traffic_class, uint32_t
	 queue, enum rte_color color)
     void rte_sched_port_pkt_read_tree_path (struct rte_sched_port *port,  const
	 struct  rte_mbuf  *pkt,  uint32_t  *subport,  uint32_t  *pipe, uint32_t
	 *traffic_class, uint32_t *queue)
     int rte_sched_port_enqueue (struct rte_sched_port	*port,	struct	rte_mbuf
	 **pkts, uint32_t n_pkts)
     int  rte_sched_port_dequeue  (struct  rte_sched_port *port, struct rte_mbuf
	 **pkts, uint32_t n_pkts)
     int rte_sched_subport_tc_ov_config (struct rte_sched_port	*port,	uint32_t
	 subport_id, bool tc_ov_enable)

Detailed Description
     RTE Hierarchical Scheduler

     The  hierarchical	scheduler  prioritizes	the transmission of packets from
     different users and traffic classes according to the Service  Level  Agree-
     ments (SLAs) defined for the current network node.

     The  scheduler  supports thousands of packet queues grouped under a 5-level
     hierarchy:

     1.  Port:

       * Typical usage: output Ethernet port;

       * Multiple ports are scheduled in round robin order with equal priority;

     2.  Subport:

       * Typical usage: group of users;

       * Traffic shaping using the token bucket algorithm (one bucket  per  sub-
	 port);

       * Upper limit enforced per traffic class at subport level;

       * Lower	priority  traffic  classes  able to reuse subport bandwidth cur-
	 rently unused by higher priority traffic classes of the same subport;

       * When any subport traffic class is  oversubscribed  (configuration  time
	 event),  the  usage  of  subport member pipes with high demand for that
	 traffic class pipes is truncated to a dynamically adjusted  value  with
	 no impact to low demand pipes;

     3.  Pipe:

       * Typical usage: individual user/subscriber;

       * Traffic shaping using the token bucket algorithm (one bucket per pipe);

     4.  Traffic class:

       * Traffic classes of the same pipe handled in strict priority order;

       * Upper limit enforced per traffic class at the pipe level;

       * Lower	priority  traffic classes able to reuse pipe bandwidth currently
	 unused by higher priority traffic classes of the same pipe;

     5.  Queue:

       * Typical usage: queue hosting packets from one or  multiple  connections
	 of same traffic class belonging to the same user;

       * Weighted  Round  Robin  (WRR) is used to service the queues within same
	 pipe lowest priority traffic class (best-effort).

     Definition in file rte_sched.h.

Macro Definition Documentation
   #define RTE_SCHED_QUEUES_PER_PIPE   16
     Congestion Management Maximum number of queues per pipe. Note that the mul-
     tiple queues (power of 2) can only be assigned to lowest priority (best-ef-
     fort) traffic class. Other higher priority traffic classes  can  only  have
     one queue. Can not change.

     See also
	 struct rte_sched_port_params

     Definition at line 74 of file rte_sched.h.

   #define RTE_SCHED_BE_QUEUES_PER_PIPE   4
     Number of WRR queues for best-effort traffic class per pipe.

     See also
	 struct rte_sched_pipe_params

     Definition at line 80 of file rte_sched.h.

   #define   RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE    (RTE_SCHED_QUEUES_PER_PIPE  -
     RTE_SCHED_BE_QUEUES_PER_PIPE + 1)
     Number of traffic classes per pipe (as well as subport).

     See also
	 struct rte_sched_subport_params

	 struct rte_sched_pipe_params

     Definition at line 86 of file rte_sched.h.

   #define RTE_SCHED_TRAFFIC_CLASS_BE	(RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE - 1)

     Best-effort traffic class ID Can not change.

     Definition at line 92 of file rte_sched.h.

Enumeration Type Documentation
   enum rte_sched_cman_mode
     Congestion Management (CMAN) mode

     This is used for controlling the admission of packets into a  packet  queue
     or group of packet queues on congestion.

     The  Random  Early  Detection (RED) algorithm works by proactively dropping
     more and more input packets as the queue  occupancy  builds  up.  When  the
     queue  is	full  or  almost  full,  RED effectively works as tail drop. The
     Weighted RED algorithm uses a separate  set  of  RED  thresholds  for  each
     packet color.

     Similar  to  RED,	Proportional Integral Controller Enhanced (PIE) randomly
     drops a packet at the onset of the congestion and tries to control the  la-
     tency  around the target value. The congestion detection, however, is based
     on the queueing latency instead of the queue length like RED. For more  in-
     formation, refer RFC8033.

     Enumerator

     RTE_SCHED_CMAN_RED
	    Random Early Detection (RED)

     RTE_SCHED_CMAN_PIE
	    Proportional Integral Controller Enhanced (PIE)

     Definition at line 127 of file rte_sched.h.

Function Documentation
   void rte_sched_port_free (struct rte_sched_port * port)
     Hierarchical scheduler port free

     Parameters
	 port  Handle  to port scheduler instance. If port is NULL, no operation
	 is performed.

   struct rte_sched_port * rte_sched_port_config (struct rte_sched_port_params *
     params)
     Hierarchical scheduler port configuration

     Parameters
	 params Port scheduler configuration parameter structure

     Returns
	 Handle to port scheduler instance upon success or NULL otherwise.

   struct   rte_sched_port   int   rte_sched_subport_pipe_profile_add	 (struct
     rte_sched_port  * port, uint32_t subport_id, struct rte_sched_pipe_params *
     params, uint32_t * pipe_profile_id)
     Hierarchical scheduler pipe profile add

     Parameters
	 port Handle to port scheduler instance
	 subport_id Subport ID
	 params Pipe profile parameters
	 pipe_profile_id Set to valid profile id when profile is added	success-
	 fully.

     Returns
	 0 upon success, error code otherwise

   int	rte_sched_port_subport_profile_add (struct rte_sched_port * port, struct
     rte_sched_subport_profile_params * profile, uint32_t * subport_profile_id)
     Hierarchical scheduler subport bandwidth profile add Note that  this  func-
     tion  is safe to use in runtime for adding new subport bandwidth profile as
     it doesn't have any impact on hierarchical structure of the scheduler.

     Parameters
	 port Handle to port scheduler instance
	 profile Subport bandwidth profile
	 subport_profile_id Subport profile id

     Returns
	 0 upon success, error code otherwise

   int rte_sched_subport_config (struct rte_sched_port	*  port,  uint32_t  sub-
     port_id,  struct  rte_sched_subport_params  * params, uint32_t subport_pro-
     file_id)
     Hierarchical scheduler subport configuration Note	that  this  function  is
     safe to use at runtime to configure subport bandwidth profile.

     Parameters
	 port Handle to port scheduler instance
	 subport_id Subport ID
	 params Subport configuration parameters. Must be non-NULL for first in-
	 vocation (i.e initialization) for a given subport. Ignored (recommended
	 value is NULL) for all subsequent invocation on the same subport.
	 subport_profile_id ID of subport bandwidth profile

     Returns
	 0 upon success, error code otherwise

   int rte_sched_pipe_config (struct rte_sched_port * port, uint32_t subport_id,
     uint32_t pipe_id, int32_t pipe_profile)
     Hierarchical scheduler pipe configuration

     Parameters
	 port Handle to port scheduler instance
	 subport_id Subport ID
	 pipe_id Pipe ID within subport
	 pipe_profile ID of subport-level pre-configured pipe profile

     Returns
	 0 upon success, error code otherwise

   uint32_t  rte_sched_port_get_memory_footprint (struct rte_sched_port_params *
     port_params, struct rte_sched_subport_params ** subport_params)
     Hierarchical scheduler memory footprint size per port

     Parameters
	 port_params Port scheduler configuration parameter structure
	 subport_params Array of subport parameter structures

     Returns
	 Memory footprint size in bytes upon success, 0 otherwise

   int rte_sched_subport_read_stats (struct rte_sched_port * port, uint32_t sub-
     port_id, struct rte_sched_subport_stats * stats, uint32_t * tc_ov)
     Hierarchical scheduler subport statistics read

     Parameters
	 port Handle to port scheduler instance
	 subport_id Subport ID
	 stats Pointer to pre-allocated subport statistics structure  where  the
	 statistics counters should be stored
	 tc_ov Pointer to pre-allocated RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE-entry
	 array where the oversubscription status for each of the subport traffic
	 classes should be stored.

     Returns
	 0 upon success, error code otherwise

   int	 rte_sched_queue_read_stats  (struct  rte_sched_port  *  port,	uint32_t
     queue_id, struct rte_sched_queue_stats * stats, uint16_t * qlen)
     Hierarchical scheduler queue statistics read

     Parameters
	 port Handle to port scheduler instance
	 queue_id Queue ID within port scheduler
	 stats Pointer to pre-allocated subport statistics structure  where  the
	 statistics counters should be stored
	 qlen  Pointer	to pre-allocated variable where the current queue length
	 should be stored.

     Returns
	 0 upon success, error code otherwise

   void rte_sched_port_pkt_write (struct rte_sched_port * port, struct	rte_mbuf
     *	pkt,  uint32_t	subport, uint32_t pipe, uint32_t traffic_class, uint32_t
     queue, enum rte_color color)
     Scheduler hierarchy path write to packet descriptor.  Typically  called  by
     the packet classification stage.

     Parameters
	 port Handle to port scheduler instance
	 pkt Packet descriptor handle
	 subport Subport ID
	 pipe Pipe ID within subport
	 traffic_class	Traffic  class	ID  within  pipe  (0  .. RTE_SCHED_TRAF-
	 FIC_CLASS_BE)
	 queue Queue ID within pipe traffic class, 0 for high priority TCs,  and
	 0 .. (RTE_SCHED_BE_QUEUES_PER_PIPE - 1) for best-effort TC
	 color Packet color set

   void  rte_sched_port_pkt_read_tree_path  (struct rte_sched_port * port, const
     struct rte_mbuf * pkt, uint32_t * subport,  uint32_t  *  pipe,  uint32_t  *
     traffic_class, uint32_t * queue)
     Scheduler	hierarchy  path  read  from packet descriptor (struct rte_mbuf).
     Typically called as part of the hierarchical scheduler  enqueue  operation.
     The  subport, pipe, traffic class and queue parameters need to be pre-allo-
     cated by the caller.

     Parameters
	 port Handle to port scheduler instance
	 pkt Packet descriptor handle
	 subport Subport ID
	 pipe Pipe ID within subport
	 traffic_class Traffic	class  ID  within  pipe  (0  ..  RTE_SCHED_TRAF-
	 FIC_CLASS_BE)
	 queue	Queue ID within pipe traffic class, 0 for high priority TCs, and
	 0 .. (RTE_SCHED_BE_QUEUES_PER_PIPE - 1) for best-effort TC

   int rte_sched_port_enqueue (struct rte_sched_port * port, struct rte_mbuf  **
     pkts, uint32_t n_pkts)
     Hierarchical  scheduler port enqueue. Writes up to n_pkts to port scheduler
     and returns the number of packets actually written. For  each  packet,  the
     port  scheduler  queue  to write the packet to is identified by reading the
     hierarchy path from the packet descriptor; if the queue  is  full	or  con-
     gested and the packet is not written to the queue, then the packet is auto-
     matically dropped without any action required from the caller.

     Parameters
	 port Handle to port scheduler instance
	 pkts Array storing the packet descriptor handles
	 n_pkts  Number  of packets to enqueue from the pkts array into the port
	 scheduler

     Returns
	 Number of packets successfully enqueued

   int rte_sched_port_dequeue (struct rte_sched_port * port, struct rte_mbuf  **
     pkts, uint32_t n_pkts)
     Hierarchical  scheduler  port  dequeue.  Reads  up  to n_pkts from the port
     scheduler and stores them in the pkts array and returns the number of pack-
     ets actually read. The pkts array needs to be pre-allocated by  the  caller
     with at least n_pkts entries.

     Parameters
	 port Handle to port scheduler instance
	 pkts  Pre-allocated  packet descriptor array where the packets dequeued
	 from the port scheduler should be stored
	 n_pkts Number of packets to dequeue from the port scheduler

     Returns
	 Number of packets successfully dequeued and placed in the pkts array

   int rte_sched_subport_tc_ov_config (struct rte_sched_port  *  port,	uint32_t
     subport_id, bool tc_ov_enable)
     Hierarchical  scheduler  subport traffic class oversubscription enable/dis-
     able. This function should be called at the time of subport initialization.

     Parameters
	 port Handle to port scheduler instance
	 subport_id Subport ID
	 tc_ov_enable Boolean flag to enable/disable TC OV

     Returns
	 0 upon success, error code otherwise

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026		  rte_sched.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_SCHED_CMAN_RED&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help