[01/15] sched: add pipe config params to subport struct

Message ID 20190823144602.58213-2-jasvinder.singh@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Cristian Dumitrescu
Headers
Series sched: subport level configuration of pipe nodes |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-Compile-Testing success Compile Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS

Commit Message

Jasvinder Singh Aug. 23, 2019, 2:45 p.m. UTC
  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    |  2 +-
 lib/librte_sched/meson.build |  2 +-
 lib/librte_sched/rte_sched.h | 81 +++++++++++++++++++++++-------------
 3 files changed, 55 insertions(+), 30 deletions(-)
  

Patch

diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
index 3d7f410e1..6e4a72d89 100644
--- a/lib/librte_sched/Makefile
+++ b/lib/librte_sched/Makefile
@@ -18,7 +18,7 @@  LDLIBS += -lrte_timer
 
 EXPORT_MAP := rte_sched_version.map
 
-LIBABIVER := 3
+LIBABIVER := 4
 
 #
 # all source are stored in SRCS-y
diff --git a/lib/librte_sched/meson.build b/lib/librte_sched/meson.build
index 59d43c6d8..9f40a2368 100644
--- a/lib/librte_sched/meson.build
+++ b/lib/librte_sched/meson.build
@@ -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')
diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h
index eac6db274..48be702bc 100644
--- a/lib/librte_sched/rte_sched.h
+++ b/lib/librte_sched/rte_sched.h
@@ -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,50 @@  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 */
+	uint32_t n_pipes_per_subport;
 
-	/** 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;
+
+#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 */
@@ -227,6 +249,9 @@  struct rte_sched_port_params {
 	/** Number of subport_pipes */
 	uint32_t n_pipes_per_subport;
 
+	/** Maximum number of subport_pipes */
+	uint32_t n_max_pipes_per_subport;
+
 	/** Packet queue size for each traffic class.
 	 * All the pipes within the same subport share the similar
 	 * configuration for the queues.