Petri Savolainen(psavol) replied on github web page:

include/odp/api/spec/std_types.h
@@ -32,6 +32,13 @@ extern "C" {
  */
 
 /**
+ * @typedef odp_percent_t
+ * Use odp_percent_t for specifying fields that are percentages. It is a fixed
+ * point integer whose units are expressed as one-hundredth of a percent.
+ * Hence 100% is represented as integer value 10000.
+ */
+


Comment:
Replace "@typedef odp_percent_t" doxygen tag with the short comment line 
("Percent type"). The tag is not needed anymore as the typedef follows the 
comment.

Also, remove the extra line feed.

> Petri Savolainen(psavol) wrote:
> bp_ prefixes can be removed from "bp_enable" and "bp_threshold".
> 
> "BP is enabled when queue or pool value is equal to or greater than the max 
> backpressure threshold."
> This should refer to "resource usage" (which has been defined on RED 
> documentation). "queue and pool value" are  undefined terms.


>> Petri Savolainen(psavol) wrote:
>> Remove this extra line feed.


>>> Petri Savolainen(psavol) wrote:
>>> "... RED is enabled when the resource limit is equal to ..."
>>> 
>>> This refers still to "resource limit", it should be "resource usage" which 
>>> is a term that has been define above.


>>>> Petri Savolainen(psavol) wrote:
>>>> red_ prefix can be dropped from the struct field names. When red param is 
>>>> used, the name of the variable is likely red or red_param, etc. So, after 
>>>> removing the prefix it looks like this
>>>> 
>>>> red.enable = 1;
>>>> red.threshold.packets.min = 1000;
>>>> 
>>>> vs 
>>>> 
>>>> red.red_enable = 1;
>>>> red.red_threshold....
>>>> ...


>>>>> Petri Savolainen(psavol) wrote:
>>>>> "Reaches between" is not valid since drop probability is defined also 
>>>>> when <min and >max. "... when the packets in the queue/pool reaches 
>>>>> between the specified threshold." -> "... when the packets in the 
>>>>> queue/pool cross specified threshold values."
>>>>> 
>>>>> The "resource limit" needs to be specified: is it free or used space? Or 
>>>>> is it different for pools and queues: free space in a pool, used space in 
>>>>> a queue? May be the text is easier to understand with a bullet list:
>>>>> * drop probability is 100%, when resource usage > threshold.max
>>>>> * drop probability is 0%, when resource usage < threshold.min
>>>>> * drop probability is between 0 ... 100%, when resource usage is between 
>>>>> threshold.min and threshold.max
>>>>> 
>>>>> ... and then define what "resource usage" means. Pools: space used, 
>>>>> queues packet/bytes in queue


>>>>>> Petri Savolainen(psavol) wrote:
>>>>>> This should match the type enum: byte. Also better description is 
>>>>>> needed: e.g. "Sum of all data bytes of all packets". Packet size does 
>>>>>> not tell if it's the size of one or many packets.


>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>> This should match the type enum: packet


>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>> When percent is not abbreviated, then this should not be either. So, 
>>>>>>>> _PERCENT and _PACKET, or PCT and PKT.


>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>> As we discussed during today's ARCH call. `max` and `min` can be 
>>>>>>>>> renamed `start` and `stop` to more accurately reflect the actions. 
>>>>>>>>> RED / backpressure begins when utilization hits the `start` threshold 
>>>>>>>>> and is deasserted when utilization drops back to the `stop` 
>>>>>>>>> threshold. So `start` >= `stop`.  If the two are equal it means there 
>>>>>>>>> is no hysteresis.
>>>>>>>>> 
>>>>>>>>> The question arises whether a third `max` threshold value should 
>>>>>>>>> exist at which drops / backpressure is held at 100%. The idea here is 
>>>>>>>>> to reserve a portion of the pool/queue resource for application use 
>>>>>>>>> independent of use by PktIOs. Since this may not be feasible in all 
>>>>>>>>> implementations this should probably be advertised with additional 
>>>>>>>>> capability info.


>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>> I can move the typedef here.
>>>>>>>>>> Not sure if I understand the need to move to uint32_t, I have only 
>>>>>>>>>> defined 100% as 10,000 and we should be fine with uin16_t. Any other 
>>>>>>>>>> specific reason for using uint32_t?


>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>> The drop probability is 100% only when the pool is completely full 
>>>>>>>>>>> i.e there is no further buffer to allocate packet. The intention of 
>>>>>>>>>>> this description is that when resource usage is greater than 
>>>>>>>>>>> threshold.max then the drop probability is enabled and packets will 
>>>>>>>>>>> get dropped on an increasing drop probability and when it is less 
>>>>>>>>>>> than min threshold then drop probability is disabled.


>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>> I think it should be:
>>>>>>>>>>>>     * drop probability == 100%, when resource usage > threshold.max
>>>>>>>>>>>>     * drop probability == 0%, when resource usage < threshold.min
>>>>>>>>>>>>     * drop probability between 0 ... 100%, when resource usage 
>>>>>>>>>>>> between min and max
>>>>>>>>>>>> 
>>>>>>>>>>>> Now the text describe min/max as hysteresis: > max enables, < min 
>>>>>>>>>>>> disables. Which is not the intention, I guess.


>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>> Another option for enums: ODP_THRESHOLD_PCT, ODP_THRESHOLD_PKT, 
>>>>>>>>>>>>> ODP_THRESHOLD_BYTE


>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>> the enum: odp_threshold_type_t
>>>>>>>>>>>>>> the bitfield: odp_threshold_types_t
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> The enum values need to be UPPERCASE and contain a common 
>>>>>>>>>>>>>> prefix: ODP_THLD_PERCENT, ODP_THLD_PACKET, ODP_THLD_BYTE
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> If bitfield is only needed in one place (one capability struct) 
>>>>>>>>>>>>>> it could be defined there only (no typedef needed).
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>  


>>>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>>>> Since API specifies already what odp_percent_t is, it's better 
>>>>>>>>>>>>>>> do also the typedef here. Also the documentation should say 
>>>>>>>>>>>>>>> that it's _unsigned_ integer. May be uint32_t is safer choice 
>>>>>>>>>>>>>>> than uint16_t, so that percent calculations do not easily wrap 
>>>>>>>>>>>>>>> around. 


>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>> Done.


>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>> Currently, I have followed the syntax existing in api-next. 
>>>>>>>>>>>>>>>>> If ABI changes are merged first I will change my patch to 
>>>>>>>>>>>>>>>>> match the specifications. If my patch gets merged first, 
>>>>>>>>>>>>>>>>> change this as part of your ABI spec.


>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>> We shouldn't leave fields undefined in the returned 
>>>>>>>>>>>>>>>>>> `odp_cls_capability_t` struct. Either set `threshold_red` 
>>>>>>>>>>>>>>>>>> and `threshold_bp` explicitly or just clear the struct to 
>>>>>>>>>>>>>>>>>> zeros at the start of this routine.


>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>>>>>>>>>>> No, `odp_bool_t` exact implementation is not part of the 
>>>>>>>>>>>>>>>>>>> spec, as it is part of platform ABI. Percent type is just 
>>>>>>>>>>>>>>>>>>> data, so from my point of view it should not be a part of 
>>>>>>>>>>>>>>>>>>> ABI, but rather be a part of API spec.


>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>> They typedef for odp_bool_t is still under 
>>>>>>>>>>>>>>>>>>>> platform/linux-generic directory hence I had this here. I 
>>>>>>>>>>>>>>>>>>>> am fine pushing this to spec/std_types.h but is odp_bool_t 
>>>>>>>>>>>>>>>>>>>> going to be moved later?


>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>>>>>>>>>>>>> @bala-manoharan  @Bill-Fischofer-Linaro In my opinion, 
>>>>>>>>>>>>>>>>>>>>> let's just push it into `odp/api/spec/std_types.h`.


>>>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>>>> Oops. Will take care of that in next version.


>>>>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>>>>> I felt using a bitfield is more useful in exposing the 
>>>>>>>>>>>>>>>>>>>>>>> platform capability whereas using an enum makes more 
>>>>>>>>>>>>>>>>>>>>>>> sense during configuration. I am open for suggestions 
>>>>>>>>>>>>>>>>>>>>>>> along these lines.


>>>>>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>>>>>> Back pressure is to indicate the remote peer that 
>>>>>>>>>>>>>>>>>>>>>>>> there is a network congestion on this particular flow. 
>>>>>>>>>>>>>>>>>>>>>>>> Whether the remote peer takes respective action is 
>>>>>>>>>>>>>>>>>>>>>>>> beyond the scope of this RFC.


>>>>>>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> NXP is implementing RED at queue level. Hence I had 
>>>>>>>>>>>>>>>>>>>>>>>>> added this based on the feedback from Nikhil.


>>>>>>>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> The previous PR was handling this RED and BP at cos 
>>>>>>>>>>>>>>>>>>>>>>>>>> level. There were some concerns from NXP since CoS 
>>>>>>>>>>>>>>>>>>>>>>>>>> is a logical entity and application configuration 
>>>>>>>>>>>>>>>>>>>>>>>>>> should make sure that multiple CoS with different 
>>>>>>>>>>>>>>>>>>>>>>>>>> RED configuration should not direct to the same pool 
>>>>>>>>>>>>>>>>>>>>>>>>>> or queue.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> HW implements the RED and BP effectively either at 
>>>>>>>>>>>>>>>>>>>>>>>>>> the pool or the queue.
>>>>>>>>>>>>>>>>>>>>>>>>>> Since a pool represents the real bottleneck for 
>>>>>>>>>>>>>>>>>>>>>>>>>> resource exhausion and packet drop.
>>>>>>>>>>>>>>>>>>>>>>>>>>  We can discuss further in todays Public call.


>>>>>>>>>>>>>>>>>>>>>>>>>>> Balasubramanian Manoharan(bala-manoharan) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>> The implementation provides preference whether the 
>>>>>>>>>>>>>>>>>>>>>>>>>>> RED and BP are configured either in pool or queue 
>>>>>>>>>>>>>>>>>>>>>>>>>>> and provide support for which threshold method is 
>>>>>>>>>>>>>>>>>>>>>>>>>>> supported using capability.
>>>>>>>>>>>>>>>>>>>>>>>>>>> I believe this is sufficient from the 
>>>>>>>>>>>>>>>>>>>>>>>>>>> implementation point of view.


>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Adding new files requires updates to the various 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Makefile.am and related autotools. That's why 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Travis is reporting failures since these new files 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> aren't able to be found / used.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Need to clarify under what conditions RED (and 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> BP) apply to pools. If an application calls 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_packet_alloc()` that should either succeed 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> or fail. "Drop probability" doesn't make any 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> obvious sense here. Tying these concepts to 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_pktio_t` configurations seems more in 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> keeping with what's needed, but I understand the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> difficulties that that caused in the previous PR.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perhaps tying this to a `odp_cos_t` might work? 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> An `odp_cos_t` has an associated queue and pool 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and these can then be viewed as admission 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> controls to packets being added to a CoS. That 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> would mean that these features would only be 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> applicable if the classifier is being used, but 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is that a significant drawback since we want to 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> encourage its use anyway?


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Back pressure in this context presumably means 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that `odp_queue_enq()` calls stall until the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> back pressure is relieved. Not sure if that's 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> what's really desired for queues in general.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> RED for a queue in doesn't seem to make sense 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for queues in general. RED is used for 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> admission control, which is why it's tied to 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PktIOs. If an application calls 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_queue_enq()` that should either succeed or 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fail. A "drop probability" doesn't make sense 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> here. We need to clarify that somehow and I'm 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not sure how that can be done without tying the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configuration back to an `odp_pktio_t`.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Same comment as for pools. It would seem these 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should be individual `odp_support_t` 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> indications.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Wouldn't these be better done as individual 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_support_t` configurations? That way 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> implementations can indicate not just support 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> but preferences. 


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We've defined what we mean by RED as 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> assigning a drop probability but what we 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mean by "back pressure" seems very fuzzy 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> here. This needs to be more specific if an 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> application is to know how to make use of 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> We use `_t` suffixes rather than `_e` for 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `enums` so `odp_threshold_type_t` would be 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> more standard here, but we already have an 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_threshold_type_t` defined above. The 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> problem seems to be `_t` already implies 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> type, so "type type" is redundant. 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perhaps a better choice is an 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_threshold_t` has an 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_threshold_metric_t metric` field that 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is the enum above. It's not clear how the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `odp_threshold_type_t` bits are intended to 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be used. Capabilities?


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Need Doxygen for each struct and union


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Doxygen 1.8.13 requires every element to 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be documented.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Again this new type should follow the PR 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #250 model.


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Since we've given conceptual approval 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to PR #250, these changes should be 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> based on that and this definition would 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be part of abi-default/std_types.h.


https://github.com/Linaro/odp/pull/277#discussion_r151951334
updated_at 2017-11-20 13:07:56

Reply via email to