[v2,05/10] sched: update the pipe config api implementation

Message ID 1599763717-135002-6-git-send-email-savinay.dharmappa@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Enable dynamic config of subport bandwidth |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Savinay Dharmappa Sept. 10, 2020, 6:48 p.m. UTC
  Subport profile parameters are fetched from subport profile
table to calculate the subport best effort tc rate.

Signed-off-by: Savinay Dharmappa <savinay.dharmappa@intel.com>
Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
---
 lib/librte_sched/rte_sched.c | 40 +++++++++++++++++++++-------------------
 1 file changed, 21 insertions(+), 19 deletions(-)
  

Comments

Jasvinder Singh Sept. 14, 2020, 2:26 p.m. UTC | #1
> -----Original Message-----
> From: Dharmappa, Savinay <savinay.dharmappa@intel.com>
> Sent: Thursday, September 10, 2020 7:49 PM
> To: Singh, Jasvinder <jasvinder.singh@intel.com>; Dumitrescu, Cristian
> <cristian.dumitrescu@intel.com>; dev@dpdk.org
> Cc: Dharmappa, Savinay <savinay.dharmappa@intel.com>
> Subject: [PATCH v2 05/10] sched: update the pipe config api implementation
> 
> Subport profile parameters are fetched from subport profile table to
> calculate the subport best effort tc rate.
> 
> Signed-off-by: Savinay Dharmappa <savinay.dharmappa@intel.com>
> Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
> ---
>  lib/librte_sched/rte_sched.c | 40 +++++++++++++++++++++-------------------
>  1 file changed, 21 insertions(+), 19 deletions(-)
> 
> diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c index
> 8e66d08..9ff67e0 100644
> --- a/lib/librte_sched/rte_sched.c
> +++ b/lib/librte_sched/rte_sched.c
> @@ -1403,6 +1403,7 @@ rte_sched_pipe_config(struct rte_sched_port
> *port,
>  	int32_t pipe_profile)
>  {
>  	struct rte_sched_subport *s;
> +	struct rte_sched_subport_profile *sp;
>  	struct rte_sched_pipe *p;
>  	struct rte_sched_pipe_profile *params;
>  	uint32_t n_subports = subport_id + 1;
> @@ -1443,14 +1444,15 @@ rte_sched_pipe_config(struct rte_sched_port
> *port,
>  		return -EINVAL;
>  	}
> 
> +	sp = port->subport_profiles + s->profile;
>  	/* Handle the case when pipe already has a valid configuration */
>  	p = s->pipe + pipe_id;
>  	if (p->tb_time) {
>  		params = s->pipe_profiles + p->profile;
> 
>  		double subport_tc_be_rate =
> -			(double) s-
> >tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
> -			/ (double) s->tc_period;
> +		(double)sp-
> >tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
> +			/ (double) sp->tc_period;
>  		double pipe_tc_be_rate =
>  			(double) params-
> >tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
>  			/ (double) params->tc_period;
> @@ -1492,8 +1494,8 @@ rte_sched_pipe_config(struct rte_sched_port
> *port,
>  	{
>  		/* Subport best effort tc oversubscription */
>  		double subport_tc_be_rate =
> -			(double) s-
> >tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
> -			/ (double) s->tc_period;
> +		(double)sp-
> >tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
> +			/ (double) sp->tc_period;
>  		double pipe_tc_be_rate =
>  			(double) params-
> >tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
>  			/ (double) params->tc_period;
> @@ -2286,11 +2288,11 @@ grinder_credits_update(struct rte_sched_port
> *port,
>  	uint32_t i;
> 
>  	/* Subport TB */
> -	n_periods = (port->time - subport->tb_time) / sp_params-
> >sp_tb_period;
> -	subport->tb_credits += n_periods * sp_params-
> >sp_tb_credits_per_period;
> +	n_periods = (port->time - subport->tb_time) / sp_params-
> >tb_period;
> +	subport->tb_credits += n_periods * sp_params-
> >tb_credits_per_period;
>  	subport->tb_credits = RTE_MIN(subport->tb_credits,
> -				sp_params->sp_tb_size);
> -	subport->tb_time += n_periods * sp_params->sp_tb_period;
> +				sp_params->tb_size);
> +	subport->tb_time += n_periods * sp_params->tb_period;
> 
>  	/* Pipe TB */
>  	n_periods = (port->time - pipe->tb_time) / params->tb_period; @@ -
> 2302,9 +2304,9 @@ grinder_credits_update(struct rte_sched_port *port,
>  	if (unlikely(port->time >= subport->tc_time)) {
>  		for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++)
>  			subport->tc_credits[i] =
> -					sp_params-
> >sp_tc_credits_per_period[i];
> +					sp_params->tc_credits_per_period[i];
> 
> -		subport->tc_time = port->time + sp_params->sp_tc_period;
> +		subport->tc_time = port->time + sp_params->tc_period;
>  	}
> 
>  	/* Pipe TCs */
> @@ -2333,17 +2335,17 @@ grinder_tc_ov_credits_update(struct
> rte_sched_port *port,
>  		return subport->tc_ov_wm_max;
> 
>  	for (i = 0; i < RTE_SCHED_TRAFFIC_CLASS_BE; i++) {
> -		tc_ov_consumption[i] = sp_params-
> >sp_tc_credits_per_period[i]
> +		tc_ov_consumption[i] = sp_params->tc_credits_per_period[i]
>  					-  subport->tc_credits[i];
>  		tc_consumption += tc_ov_consumption[i];
>  	}
> 
>  	tc_ov_consumption[RTE_SCHED_TRAFFIC_CLASS_BE] =
> -	sp_params-
> >sp_tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE] -
> +	sp_params->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
> -
>  		subport->tc_credits[RTE_SCHED_TRAFFIC_CLASS_BE];
> 
>  	tc_ov_consumption_max =
> -	sp_params-
> >sp_tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE] -
> +	sp_params->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
> -
>  			tc_consumption;
> 
>  	if (tc_ov_consumption[RTE_SCHED_TRAFFIC_CLASS_BE] > @@ -
> 2374,11 +2376,11 @@ grinder_credits_update(struct rte_sched_port *port,
>  	uint32_t i;
> 
>  	/* Subport TB */
> -	n_periods = (port->time - subport->tb_time) / sp_params-
> >sp_tb_period;
> -	subport->tb_credits += n_periods * sp_params-
> >sp_tb_credits_per_period;
> +	n_periods = (port->time - subport->tb_time) / sp_params-
> >tb_period;
> +	subport->tb_credits += n_periods * sp_params-
> >tb_credits_per_period;
>  	subport->tb_credits = RTE_MIN(subport->tb_credits,
> -				sp_params->sp_tb_size);
> -	subport->tb_time += n_periods * sp_params->sp_tb_period;
> +				sp_params->tb_size);
> +	subport->tb_time += n_periods * sp_params->tb_period;
> 
>  	/* Pipe TB */
>  	n_periods = (port->time - pipe->tb_time) / params->tb_period; @@ -
> 2393,9 +2395,9 @@ grinder_credits_update(struct rte_sched_port *port,
> 
>  		for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++)
>  			subport->tc_credits[i] =
> -				sp_params->sp_tc_credits_per_period[i];
> +				sp_params->tc_credits_per_period[i];
> 
> -		subport->tc_time = port->time + sp_params->sp_tc_period;
> +		subport->tc_time = port->time + sp_params->tc_period;
>  		subport->tc_ov_period_id++;
>  	}
> 
> --
> 2.7.4

Looks like the above changes have already been done in the last patch of this series. Please check.
  

Patch

diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c
index 8e66d08..9ff67e0 100644
--- a/lib/librte_sched/rte_sched.c
+++ b/lib/librte_sched/rte_sched.c
@@ -1403,6 +1403,7 @@  rte_sched_pipe_config(struct rte_sched_port *port,
 	int32_t pipe_profile)
 {
 	struct rte_sched_subport *s;
+	struct rte_sched_subport_profile *sp;
 	struct rte_sched_pipe *p;
 	struct rte_sched_pipe_profile *params;
 	uint32_t n_subports = subport_id + 1;
@@ -1443,14 +1444,15 @@  rte_sched_pipe_config(struct rte_sched_port *port,
 		return -EINVAL;
 	}
 
+	sp = port->subport_profiles + s->profile;
 	/* Handle the case when pipe already has a valid configuration */
 	p = s->pipe + pipe_id;
 	if (p->tb_time) {
 		params = s->pipe_profiles + p->profile;
 
 		double subport_tc_be_rate =
-			(double) s->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
-			/ (double) s->tc_period;
+		(double)sp->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
+			/ (double) sp->tc_period;
 		double pipe_tc_be_rate =
 			(double) params->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
 			/ (double) params->tc_period;
@@ -1492,8 +1494,8 @@  rte_sched_pipe_config(struct rte_sched_port *port,
 	{
 		/* Subport best effort tc oversubscription */
 		double subport_tc_be_rate =
-			(double) s->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
-			/ (double) s->tc_period;
+		(double)sp->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
+			/ (double) sp->tc_period;
 		double pipe_tc_be_rate =
 			(double) params->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE]
 			/ (double) params->tc_period;
@@ -2286,11 +2288,11 @@  grinder_credits_update(struct rte_sched_port *port,
 	uint32_t i;
 
 	/* Subport TB */
-	n_periods = (port->time - subport->tb_time) / sp_params->sp_tb_period;
-	subport->tb_credits += n_periods * sp_params->sp_tb_credits_per_period;
+	n_periods = (port->time - subport->tb_time) / sp_params->tb_period;
+	subport->tb_credits += n_periods * sp_params->tb_credits_per_period;
 	subport->tb_credits = RTE_MIN(subport->tb_credits,
-				sp_params->sp_tb_size);
-	subport->tb_time += n_periods * sp_params->sp_tb_period;
+				sp_params->tb_size);
+	subport->tb_time += n_periods * sp_params->tb_period;
 
 	/* Pipe TB */
 	n_periods = (port->time - pipe->tb_time) / params->tb_period;
@@ -2302,9 +2304,9 @@  grinder_credits_update(struct rte_sched_port *port,
 	if (unlikely(port->time >= subport->tc_time)) {
 		for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++)
 			subport->tc_credits[i] =
-					sp_params->sp_tc_credits_per_period[i];
+					sp_params->tc_credits_per_period[i];
 
-		subport->tc_time = port->time + sp_params->sp_tc_period;
+		subport->tc_time = port->time + sp_params->tc_period;
 	}
 
 	/* Pipe TCs */
@@ -2333,17 +2335,17 @@  grinder_tc_ov_credits_update(struct rte_sched_port *port,
 		return subport->tc_ov_wm_max;
 
 	for (i = 0; i < RTE_SCHED_TRAFFIC_CLASS_BE; i++) {
-		tc_ov_consumption[i] = sp_params->sp_tc_credits_per_period[i]
+		tc_ov_consumption[i] = sp_params->tc_credits_per_period[i]
 					-  subport->tc_credits[i];
 		tc_consumption += tc_ov_consumption[i];
 	}
 
 	tc_ov_consumption[RTE_SCHED_TRAFFIC_CLASS_BE] =
-	sp_params->sp_tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE] -
+	sp_params->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE] -
 		subport->tc_credits[RTE_SCHED_TRAFFIC_CLASS_BE];
 
 	tc_ov_consumption_max =
-	sp_params->sp_tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE] -
+	sp_params->tc_credits_per_period[RTE_SCHED_TRAFFIC_CLASS_BE] -
 			tc_consumption;
 
 	if (tc_ov_consumption[RTE_SCHED_TRAFFIC_CLASS_BE] >
@@ -2374,11 +2376,11 @@  grinder_credits_update(struct rte_sched_port *port,
 	uint32_t i;
 
 	/* Subport TB */
-	n_periods = (port->time - subport->tb_time) / sp_params->sp_tb_period;
-	subport->tb_credits += n_periods * sp_params->sp_tb_credits_per_period;
+	n_periods = (port->time - subport->tb_time) / sp_params->tb_period;
+	subport->tb_credits += n_periods * sp_params->tb_credits_per_period;
 	subport->tb_credits = RTE_MIN(subport->tb_credits,
-				sp_params->sp_tb_size);
-	subport->tb_time += n_periods * sp_params->sp_tb_period;
+				sp_params->tb_size);
+	subport->tb_time += n_periods * sp_params->tb_period;
 
 	/* Pipe TB */
 	n_periods = (port->time - pipe->tb_time) / params->tb_period;
@@ -2393,9 +2395,9 @@  grinder_credits_update(struct rte_sched_port *port,
 
 		for (i = 0; i < RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE; i++)
 			subport->tc_credits[i] =
-				sp_params->sp_tc_credits_per_period[i];
+				sp_params->tc_credits_per_period[i];
 
-		subport->tc_time = port->time + sp_params->sp_tc_period;
+		subport->tc_time = port->time + sp_params->tc_period;
 		subport->tc_ov_period_id++;
 	}