sched: add pipe config params to subport struct
authorJasvinder Singh <jasvinder.singh@intel.com>
Fri, 25 Oct 2019 10:51:10 +0000 (11:51 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 25 Oct 2019 15:49:45 +0000 (17:49 +0200)
Add pipe configuration parameters to subport level structure to
allow different subports of the same port to have different
configuration in terms of number of pipes, pipe queue sizes, etc.

Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
Signed-off-by: Lukasz Krakowiak <lukaszx.krakowiak@intel.com>
lib/librte_sched/Makefile
lib/librte_sched/meson.build
lib/librte_sched/rte_sched.h

index 3d7f410..6e4a72d 100644 (file)
@@ -18,7 +18,7 @@ LDLIBS += -lrte_timer
 
 EXPORT_MAP := rte_sched_version.map
 
-LIBABIVER := 3
+LIBABIVER := 4
 
 #
 # all source are stored in SRCS-y
index 59d43c6..9f40a23 100644 (file)
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-version = 3
+version = 4
 sources = files('rte_sched.c', 'rte_red.c', 'rte_approx.c')
 headers = files('rte_sched.h', 'rte_sched_common.h',
                'rte_red.h', 'rte_approx.h')
index eac6db2..fbb0e23 100644 (file)
@@ -111,7 +111,7 @@ extern "C" {
 #endif
 
 /*
- * Subport configuration parameters. The period and credits_per_period
+ * Pipe configuration parameters. The period and credits_per_period
  * parameters are measured in bytes, with one byte meaning the time
  * duration associated with the transmission of one byte on the
  * physical medium of the output port, with pipe or pipe traffic class
@@ -119,7 +119,7 @@ extern "C" {
  * credits_per_period divided by period. One credit represents one
  * byte.
  */
-struct rte_sched_subport_params {
+struct rte_sched_pipe_params {
        /** Token bucket rate (measured in bytes per second) */
        uint32_t tb_rate;
 
@@ -129,32 +129,18 @@ struct rte_sched_subport_params {
        /** Traffic class rates (measured in bytes per second) */
        uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
 
-       /** Enforcement period for rates (measured in milliseconds) */
+       /** Enforcement period (measured in milliseconds) */
        uint32_t tc_period;
-};
-
-/** Subport statistics */
-struct rte_sched_subport_stats {
-       /** Number of packets successfully written */
-       uint32_t n_pkts_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
-
-       /** Number of packets dropped */
-       uint32_t n_pkts_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
 
-       /** Number of bytes successfully written for each traffic class */
-       uint32_t n_bytes_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
-
-       /** Number of bytes dropped for each traffic class */
-       uint32_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+       /** Best-effort traffic class oversubscription weight */
+       uint8_t tc_ov_weight;
 
-#ifdef RTE_SCHED_RED
-       /** Number of packets dropped by red */
-       uint32_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
-#endif
+       /** WRR weights of best-effort traffic class queues */
+       uint8_t wrr_weights[RTE_SCHED_BE_QUEUES_PER_PIPE];
 };
 
 /*
- * Pipe configuration parameters. The period and credits_per_period
+ * Subport configuration parameters. The period and credits_per_period
  * parameters are measured in bytes, with one byte meaning the time
  * duration associated with the transmission of one byte on the
  * physical medium of the output port, with pipe or pipe traffic class
@@ -162,7 +148,7 @@ struct rte_sched_subport_stats {
  * credits_per_period divided by period. One credit represents one
  * byte.
  */
-struct rte_sched_pipe_params {
+struct rte_sched_subport_params {
        /** Token bucket rate (measured in bytes per second) */
        uint32_t tb_rate;
 
@@ -172,14 +158,58 @@ struct rte_sched_pipe_params {
        /** Traffic class rates (measured in bytes per second) */
        uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
 
-       /** Enforcement period (measured in milliseconds) */
+       /** Enforcement period for rates (measured in milliseconds) */
        uint32_t tc_period;
 
-       /** Best-effort traffic class oversubscription weight */
-       uint8_t tc_ov_weight;
+       /** Number of subport pipes.
+        * The subport can enable/allocate fewer pipes than the maximum
+        * number set through struct port_params::n_max_pipes_per_subport,
+        * as needed, to avoid memory allocation for the queues of the
+        * pipes that are not really needed.
+        */
+       uint32_t n_pipes_per_subport_enabled;
 
-       /** WRR weights of best-effort traffic class queues */
-       uint8_t wrr_weights[RTE_SCHED_BE_QUEUES_PER_PIPE];
+       /** Packet queue size for each traffic class.
+        * All the pipes within the same subport share the similar
+        * configuration for the queues.
+        */
+       uint16_t qsize[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+       /** Pipe profile table.
+        * Every pipe is configured using one of the profiles from this table.
+        */
+       struct rte_sched_pipe_params *pipe_profiles;
+
+       /** Profiles in the pipe profile table */
+       uint32_t n_pipe_profiles;
+
+       /** Max allowed profiles in the pipe profile table */
+       uint32_t n_max_pipe_profiles;
+
+#ifdef RTE_SCHED_RED
+       /** RED parameters */
+       struct rte_red_params red_params[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE][RTE_COLORS];
+#endif
+};
+
+/** Subport statistics */
+struct rte_sched_subport_stats {
+       /** Number of packets successfully written */
+       uint32_t n_pkts_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+       /** Number of packets dropped */
+       uint32_t n_pkts_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+       /** Number of bytes successfully written for each traffic class */
+       uint32_t n_bytes_tc[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+       /** Number of bytes dropped for each traffic class */
+       uint32_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+
+#ifdef RTE_SCHED_RED
+       /** Number of packets dropped by red */
+       uint32_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+#endif
 };
 
 /** Queue statistics */
@@ -224,7 +254,11 @@ struct rte_sched_port_params {
        /** Number of subports */
        uint32_t n_subports_per_port;
 
-       /** Number of subport_pipes */
+       /** Maximum number of subport pipes.
+        * This parameter is used to reserve a fixed number of bits
+        * in struct rte_mbuf::sched.queue_id for the pipe_id for all
+        * the subports of the same port.
+        */
        uint32_t n_pipes_per_subport;
 
        /** Packet queue size for each traffic class.