On 13 May 2024, at 14:44, Adrian Moreno wrote:

> On 5/13/24 2:38 PM, Ilya Maximets wrote:
>> On 5/13/24 09:17, Eelco Chaudron wrote:
>>>
>>>
>>> On 10 May 2024, at 15:06, Ilya Maximets wrote:
>>>
>>>> On 5/10/24 14:01, Eelco Chaudron wrote:
>>>>>
>>>>>
>>>>> On 10 May 2024, at 12:45, Adrian Moreno wrote:
>>>>>
>>>>>> On 5/10/24 12:06 PM, Eelco Chaudron wrote:
>>>>>>> On 24 Apr 2024, at 21:53, Adrian Moreno wrote:
>>>>>>>
>>>>>>>> The new odp sample attributes allow userspace to specify a group_id and
>>>>>>>> user-defined cookie to be passed down to psample.
>>>>>>>>
>>>>>>>> Add support for parsing and formatting such action.
>>>>>>>>
>>>>>>>> Signed-off-by: Adrian Moreno <amore...@redhat.com>
>>>>>>>
>>>>>>> Hi Adrian,
>>>>>>>
>>>>>>> See my comments below inline.
>>>>>>>
>>>>>>> //Eelco
>>>>>>>
>>>>>>>> ---
>>>>>>>>    include/linux/openvswitch.h  |  49 +++++++++---
>>>>>>>>    lib/odp-execute.c            |   3 +
>>>>>>>>    lib/odp-util.c               | 150 
>>>>>>>> ++++++++++++++++++++++++++---------
>>>>>>>>    ofproto/ofproto-dpif-ipfix.c |   2 +
>>>>>>>>    python/ovs/flow/odp.py       |   2 +
>>>>>>>>    tests/odp.at                 |   5 ++
>>>>>>>>    6 files changed, 163 insertions(+), 48 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h
>>>>>>>> index d9fb991ef..3e748405c 100644
>>>>>>>> --- a/include/linux/openvswitch.h
>>>>>>>> +++ b/include/linux/openvswitch.h
>>>>>>>> @@ -696,6 +696,7 @@ enum ovs_flow_attr {
>>>>>>>>    #define OVS_UFID_F_OMIT_MASK     (1 << 1)
>>>>>>>>    #define OVS_UFID_F_OMIT_ACTIONS  (1 << 2)
>>>>>>>>
>>>>>>>> +#define OVS_PSAMPLE_COOKIE_MAX_SIZE 16
>>>>>>>>    /**
>>>>>>>>     * enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE 
>>>>>>>> action.
>>>>>>>>     * @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to 
>>>>>>>> sample with
>>>>>>>> @@ -703,15 +704,27 @@ enum ovs_flow_attr {
>>>>>>>>     * %UINT32_MAX samples all packets and intermediate values sample 
>>>>>>>> intermediate
>>>>>>>>     * fractions of packets.
>>>>>>>>     * @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to execute in sampling 
>>>>>>>> event.
>>>>>>>> - * Actions are passed as nested attributes.
>>>>>>>> + * Actions are passed as nested attributes. Optional if
>>>>>>>> + * OVS_SAMPLE_ATTR_PSAMPLE_GROUP is set.
>>>>>>>> + * @OVS_SAMPLE_ATTR_PSAMPLE_GROUP: A 32-bit number to be used as 
>>>>>>>> psample group.
>>>>>>>> + * Optional if OVS_SAMPLE_ATTR_ACTIONS is set.
>>>>>>>> + * @OVS_SAMPLE_ATTR_PSAMPLE_COOKIE: A variable-length binary cookie 
>>>>>>>> that, if
>>>>>>>> + * provided, will be copied to the psample cookie.
>>>>>>>
>>>>>>> Should we mention any limit on the actual length of the cookie?
>>>>>>>
>>>>>>> Any reason we explicitly call this psample? From an OVS perspective, 
>>>>>>> this could just be 
>>>>>>> SAMPLE_ATTR_FORWARD/OFFLOAD/DESTINATION/ENDPOINT/COLLECTOR/TARGET_COOKIE
>>>>>>>  and _GROUP. Other datapaths, do not have PSAMPLE.
>>>>>>>
>>>>>>
>>>>>> See my response to your comment on the cover-letter for possible name 
>>>>>> alternatives.
>>>>>
>>>>> ACK, we can continue the discussion there.
>>>>>
>>>>>>> Thinking about it more, from an OVS perspective we should probably not 
>>>>>>> even send down a COOKIE, but we should send down an obs_domain_id and 
>>>>>>> obs_point_id, and then the kernel can move this into a cookie.
>>>>>>>
>>>>>>
>>>>>> I did consider this. However, the opaque cookie fits well with the tc 
>>>>>> API which does not have two 32-bit values but an opaque 128-bit cookie. 
>>>>>> So if the action is offloaded OVS needs to "encode" the two 32-bit 
>>>>>> values into the cookie anyways.
>>>>>
>>>>> Which is fine to me, the OVS API should be clear that we have two u32 
>>>>> entries. The cookie is implementation-specific, and we use the netlink 
>>>>> format as our API for all DPs.
>>>>
>>>>
>>>> I'm not sure about this.  It is a kernel interface and we can't deliver
>>>> two separate values from the psample.  So, passing two separate values
>>>> to the kernel doesn't make a lot of sense.  They are going to be mangled
>>>> into a single cookie anyway and we'll have to document that somehow.
>>>> We may as well always mangle the data from the beginning, document once
>>>> at the top level and save ourselves from documenting a million differences
>>>> between different implementations.  While USDT could report them 
>>>> separately,
>>>> I'm not sure there is a ton of value in that.
>>>
>>> Our OVS action API is not tight to psample at all, so passing in a psample 
>>> cookie
>>> does not make sense. We should not pass in any psample references to the 
>>> sample
>>> action API. If it looks like the below, the API is clean and we can mangle 
>>> it before
>>> passing it to the psample function. I see no need to document this in the 
>>> kernel, as
>>> all the kernel does is provide the TC action cookie (unrelated to the OVS 
>>> actions API).
>>
>> We're passing this data directly to psample, not TC.  And some documentation
>> is needed.  How users supposed to know where to find these observation
>> domain and point?  It should be specified how they are going to be seen on
>> the output from psample.  If kernel is doning the mangling, this should be
>> documented in the kernel uAPI.  If kernel receives opaque cookie and passes
>> it directly to psample, then we can get away with only documenting the
>> mangling process in OVS' docuemntation.
>>
>
> Besides, passing an opaque cookie allows future versions of OVS to add more 
> data (in addition to obs_{domain,point}) without changing uAPI.

I See pros/and cons here, but if we prefer the cookie, it needs to be specific 
to the target type, i.e. if we go with system, OVS_SAMPLE_ATTR_SYSTEM_COOKIE.

>>>
>>> +   OVS_SAMPLE_ATTR_OBS_DOMAIN,        /* Observation domain id, u32 
>>> number. */
>>> +   OVS_SAMPLE_ATTR_OBS_POINT,         /* Observation point id, u32 number. 
>>> */
>>> +   OVS_SAMPLE_ATTR_SYSTEM_TARGET, /* Flag to additionally sample to system 
>>> target. */
>>> +   OVS_SAMPLE_ATTR_SYSTEM_GROUP,  /* System target group id, u32 number. */
>>>
>>
>> <snip>
>>

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to