> -----Original Message-----
> From: Dumitrescu, Cristian
> Sent: Monday, July 1, 2019 7:59 PM
> To: Singh, Jasvinder <jasvinder.si...@intel.com>; dev@dpdk.org
> Cc: Tovar, AbrahamX <abrahamx.to...@intel.com>; Krakowiak, LukaszX
> <lukaszx.krakow...@intel.com>
> Subject: RE: [PATCH v2 02/28] sched: update subport and pipe data structures
> 
> 
> 
> > -----Original Message-----
> > From: Singh, Jasvinder
> > Sent: Tuesday, June 25, 2019 4:32 PM
> > To: dev@dpdk.org
> > Cc: Dumitrescu, Cristian <cristian.dumitre...@intel.com>; Tovar,
> > AbrahamX <abrahamx.to...@intel.com>; Krakowiak, LukaszX
> > <lukaszx.krakow...@intel.com>
> > Subject: [PATCH v2 02/28] sched: update subport and pipe data
> > structures
> >
> > Update subport and pipe data structures to allow configuration
> > flexiblity for pipe traffic classes and queues, and subport level
> > configuration of the pipe parameters.
> >
> > Signed-off-by: Jasvinder Singh <jasvinder.si...@intel.com>
> > Signed-off-by: Abraham Tovar <abrahamx.to...@intel.com>
> > Signed-off-by: Lukasz Krakowiak <lukaszx.krakow...@intel.com>
> > ---
> >  app/test/test_sched.c        |   2 +-
> >  examples/qos_sched/init.c    |   2 +-
> >  lib/librte_sched/rte_sched.h | 126
> > +++++++++++++++++++++++------------
> >  3 files changed, 85 insertions(+), 45 deletions(-)
> >
> > diff --git a/app/test/test_sched.c b/app/test/test_sched.c index
> > 49bb9ea6f..d6651d490 100644
> > --- a/app/test/test_sched.c
> > +++ b/app/test/test_sched.c
> > @@ -40,7 +40,7 @@ static struct rte_sched_pipe_params pipe_profile[] = {
> >             .tc_rate = {305175, 305175, 305175, 305175},
> >             .tc_period = 40,
> >
> > -           .wrr_weights = {1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 
> > 1},
> > +           .wrr_weights = {1, 1, 1, 1,  1, 1, 1, 1},
> >     },
> >  };
> >
> > diff --git a/examples/qos_sched/init.c b/examples/qos_sched/init.c
> > index 1209bd7ce..f6e9af16b 100644
> > --- a/examples/qos_sched/init.c
> > +++ b/examples/qos_sched/init.c
> > @@ -186,7 +186,7 @@ static struct rte_sched_pipe_params
> > pipe_profiles[RTE_SCHED_PIPE_PROFILES_PER_PO
> >             .tc_ov_weight = 1,
> >  #endif
> >
> > -           .wrr_weights = {1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 1,  1, 1, 1, 
> > 1},
> > +           .wrr_weights = {1, 1, 1, 1,  1, 1, 1, 1},
> >     },
> >  };
> >
> > diff --git a/lib/librte_sched/rte_sched.h
> > b/lib/librte_sched/rte_sched.h index 470a0036a..ebde07669 100644
> > --- a/lib/librte_sched/rte_sched.h
> > +++ b/lib/librte_sched/rte_sched.h
> > @@ -114,6 +114,35 @@ extern "C" {
> >  #define RTE_SCHED_FRAME_OVERHEAD_DEFAULT      24
> >  #endif
> >
> > +/*
> > + * 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
> > + * rate (measured as percentage of output port rate) determined as
> > + * credits_per_period divided by period. One credit represents one
> > + * byte.
> > + */
> > +struct rte_sched_pipe_params {
> > +   /** Token bucket rate (measured in bytes per second) */
> > +   uint32_t tb_rate;
> > +   /** Token bucket size (measured in credits) */
> > +   uint32_t tb_size;
> > +
> > +   /** Traffic class rates (measured in bytes per second) */
> > +   uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
> > +
> > +   /** Enforcement period (measured in milliseconds) */
> > +   uint32_t tc_period;
> > +#ifdef RTE_SCHED_SUBPORT_TC_OV
> > +   /** Best-effort traffic class oversubscription weight */
> > +   uint8_t tc_ov_weight;
> > +#endif
> 
> We should always enable the Best Effort traffic class oversubscription feature
> on the API side, at least. In case this feature is disabled through the build 
> time
> option (RTE_SCHED_SUBPORT_TC_OV), the values for these params can be
> ignored.
> 
> We should also consider always enabling the run-time part for this feature, as
> the oversubscription is the typical configuration used by the service 
> providers.

Yes, will do in next version.

> Do you see significant performance drop when this feature is enabled?

There is  ~2.5 MPPS drop with oversubscription flag on due to extra cycles 
consumption in credits compute. 

> > +
> > +   /** WRR weights of best-effort traffic class queues */
> > +   uint8_t wrr_weights[RTE_SCHED_BE_QUEUES_PER_PIPE];
> > +};
> > +
> >  /*
> >   * Subport configuration parameters. The period and credits_per_period
> >   * parameters are measured in bytes, with one byte meaning the time
> > @@ -124,15 +153,44 @@ extern "C" {
> >   * byte.
> >   */
> >  struct rte_sched_subport_params {
> > -   /* Subport token bucket */
> > -   uint32_t tb_rate;                /**< Rate (measured in bytes per 
> > second)
> > */
> > -   uint32_t tb_size;                /**< Size (measured in credits) */
> > +   /** Token bucket rate (measured in bytes per second) */
> > +   uint32_t tb_rate;
> > +
> > +   /** Token bucket size (measured in credits) */
> > +   uint32_t tb_size;
> >
> > -   /* Subport traffic classes */
> > +   /** Traffic class rates (measured in bytes per second) */
> >     uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
> > -   /**< Traffic class rates (measured in bytes per second) */
> > +
> > +   /** Enforcement period for rates (measured in milliseconds) */
> >     uint32_t tc_period;
> > -   /**< Enforcement period for rates (measured in milliseconds) */
> > +
> > +   /** Number of subport_pipes */
> > +   uint32_t n_subport_pipes;
> 
> Minor issue: Any reason why not keeping the initial name of
> n_pipes_per_subport? The initial name looks more intuitive to me, I vote to
> keep it; it is also inline with other naming conventions in this library.

Will change in next version.

> > +
> > +   /** Packet queue size for each traffic class.
> > +    * All the pipes within the same subport share the similar
> > +    * configuration for the queues. Queues which are not needed, have
> > +    * zero size.
> > +    */
> > +   uint16_t qsize[RTE_SCHED_QUEUES_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 profiles allowed 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 */
> > @@ -155,33 +213,6 @@ struct rte_sched_subport_stats {  #endif  };
> >
> > -/*
> > - * 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
> > - * rate (measured as percentage of output port rate) determined as
> > - * credits_per_period divided by period. One credit represents one
> > - * byte.
> > - */
> > -struct rte_sched_pipe_params {
> > -   /* Pipe token bucket */
> > -   uint32_t tb_rate;                /**< Rate (measured in bytes per 
> > second)
> > */
> > -   uint32_t tb_size;                /**< Size (measured in credits) */
> > -
> > -   /* Pipe traffic classes */
> > -   uint32_t tc_rate[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
> > -   /**< Traffic class rates (measured in bytes per second) */
> > -   uint32_t tc_period;
> > -   /**< Enforcement period (measured in milliseconds) */
> > -#ifdef RTE_SCHED_SUBPORT_TC_OV
> > -   uint8_t tc_ov_weight;            /**< Weight Traffic class 3
> > oversubscription */
> > -#endif
> > -
> > -   /* Pipe queues */
> > -   uint8_t  wrr_weights[RTE_SCHED_QUEUES_PER_PIPE]; /**< WRR
> > weights */
> > -};
> > -
> >  /** Queue statistics */
> >  struct rte_sched_queue_stats {
> >     /* Packets */
> > @@ -198,16 +229,25 @@ struct rte_sched_queue_stats {
> >
> >  /** Port configuration parameters. */  struct rte_sched_port_params {
> > -   const char *name;                /**< String to be associated */
> > -   int socket;                      /**< CPU socket ID */
> > -   uint32_t rate;                   /**< Output port rate
> > -                                     * (measured in bytes per second) */
> > -   uint32_t mtu;                    /**< Maximum Ethernet frame size
> > -                                     * (measured in bytes).
> > -                                     * Should not include the framing
> > overhead. */
> > -   uint32_t frame_overhead;         /**< Framing overhead per packet
> > -                                     * (measured in bytes) */
> > -   uint32_t n_subports_per_port;    /**< Number of subports */
> > +   /** Name of the port to be associated */
> > +   const char *name;
> > +
> > +   /** CPU socket ID */
> > +   int socket;
> > +
> > +   /** Output port rate (measured in bytes per second) */
> > +   uint32_t rate;
> > +
> > +   /** Maximum Ethernet frame size (measured in bytes).
> > +    * Should not include the framing overhead.
> > +    */
> > +   uint32_t mtu;
> > +
> > +   /** Framing overhead per packet (measured in bytes) */
> > +   uint32_t frame_overhead;
> > +
> > +   /** Number of subports */
> > +   uint32_t n_subports_per_port;
> >     uint32_t n_pipes_per_subport;    /**< Number of pipes per subport
> > */
> >     uint16_t qsize[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
> >     /**< Packet queue size for each traffic class.
> > --
> > 2.21.0

Reply via email to