X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_sched%2Frte_sched.h;fp=lib%2Flibrte_sched%2Frte_sched.h;h=fbb0e23fa3bae4cef3303268fa64b9c3f09dc8fa;hb=85f52aa422d6d0822c76f02a5d3452f900db17b5;hp=eac6db2746ea4a0ae1b987e5bfa20d8af07660b8;hpb=927a0e20e2415f718ceb346cd94bbf930ad9f29a;p=dpdk.git diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h index eac6db2746..fbb0e23fa3 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,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.