Skip to content

Commit

Permalink
sched: add pipe config params to subport struct
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
JasvinderD authored and tmonjalo committed Oct 25, 2019
1 parent 927a0e2 commit 85f52aa
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 31 deletions.
2 changes: 1 addition & 1 deletion lib/librte_sched/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ LDLIBS += -lrte_timer

EXPORT_MAP := rte_sched_version.map

LIBABIVER := 3
LIBABIVER := 4

#
# all source are stored in SRCS-y
Expand Down
2 changes: 1 addition & 1 deletion lib/librte_sched/meson.build
Original file line number Diff line number Diff line change
@@ -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')
Expand Down
92 changes: 63 additions & 29 deletions lib/librte_sched/rte_sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,15 @@ 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
* rate (measured as percentage of output port rate) determined as
* 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;

Expand All @@ -129,40 +129,26 @@ 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
* 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 {
struct rte_sched_subport_params {
/** Token bucket rate (measured in bytes per second) */
uint32_t tb_rate;

Expand All @@ -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 */
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 85f52aa

Please sign in to comment.