On Mon, Jun 12, 2017 at 6:41 AM, Balasubramanian Manoharan <[email protected]> wrote: > Add random early discard configuration to class-of-service > > Signed-off-by: Balasubramanian Manoharan <[email protected]> > --- > include/odp/api/spec/classification.h | 44 > +++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/include/odp/api/spec/classification.h > b/include/odp/api/spec/classification.h > index 39831b2..badadff 100644 > --- a/include/odp/api/spec/classification.h > +++ b/include/odp/api/spec/classification.h > @@ -128,6 +128,13 @@ typedef struct odp_cls_capability_t { > > /** A Boolean to denote support of PMR range */ > odp_bool_t pmr_range_supported; > + > + /** Support for Random Early Discard */ > + odp_support_t random_early_discard;
The correct expansion of the RED acronym, per RFC 2309 [1], is Random Early Detection. This should be updated throughout. --- [1] https://tools.ietf.org/html/rfc2309 > + > + /** Support for Back Pressure to the remote peer */ > + odp_support_t back_pressure; > + > } odp_cls_capability_t; > > /** > @@ -167,6 +174,43 @@ typedef struct odp_cls_cos_param { > odp_queue_t queue; /**< Queue associated with CoS */ > odp_pool_t pool; /**< Pool associated with CoS */ > odp_cls_drop_t drop_policy; /**< Drop policy associated with CoS > */ > + > + /* Random Early Discard (RED) > + * Random Early discard is enabled to initiate a drop probability > + * for the incoming packet when the packets in the queue/pool reaches > + * a specified threshold. > + * When RED is enabled for a particular flow then further incoming > + * packets are assigned a drop probability based on the size of the > + * pool/queue and the drop probability becomes 1 when the queue/pool > + * is full. > + * RED is logically configured in the CoS and could be implemented > + * in either pool or queue linked to the CoS depending on > + * platform capabilities. > + * RED is controlled using maximum and minimum threshold values > + * which are defined as percentage of the system resource. > + * RED is enabled when the resource limit is equal to or greater than > + * the maximum threshold value and is disabled when resource limit > + * is less than or equal to minimum threshold value. */ Is this sufficient? RED is a family of algorithms, including Weighted RED (WRED), Adaptive RED (ARED), Robust RED (RRED), etc. [2]. Each of these require a number of parameters to control it. All RED-type processing requires some estimation of average queue size or marks, so has ties both to HW as well as higher-level protocols like TCP with ECN support. So the question is how will applications, or subsystems like OFP, make use of this feature? --- [2] https://en.wikipedia.org/wiki/Random_early_detection > + > + /* A boolean to enable RED parameters */ > + odp_bool_t red_enable; > + > + /* Maximum threshold percentage for RED */ > + uint16_t max_red_threshold; > + > + /* Minimum threshold percentage for RED */ > + uint16_t min_red_threshold; Need to be more precise about what minimum and maximum refer to here. Needs to be sufficiently specific to enable a validation test to be written to determine whether an ODP implementation conforms to the spec. Also, if these are percentages, shouldn't a uint8_t be sufficient since the range should only be between 0-100? > + > + /* Back pressure > + * When back pressure is enabled for a particular flow, the HW can > send > + * back pressure information to the remote peer indicating a network > + * congestion */ > + odp_bool_t bp_enable; Again, requires a bit more precision and possibly additional parameters. For example, if PFC is used as a back pressure mechanism, we need to know the PFC class to use. > + > + /* Threshold for enabling back pressure. BP is enabled when pool/queue > + * size is equal to or greater than this backpressure threshold. > + * BP threshold is expressed as a percentage of the resource size. */ > + uint16_t bp_threshold; Why is this a size when RED is specified in terms of percentages? Shouldn't these be consistent? > } odp_cls_cos_param_t; > > /** > -- > 1.9.1 >
