Hi Ferruh,

>-----Original Message-----
>From: Ferruh Yigit <ferruh.yi...@intel.com>
>Sent: Monday, October 21, 2019 8:37 PM
>To: Andrew Rybchenko <arybche...@solarflare.com>; Pavan Nikhilesh
>Bhagavatula <pbhagavat...@marvell.com>; Jerin Jacob Kollanukkaran
><jer...@marvell.com>
>Cc: dev@dpdk.org; Adrien Mazarguil <adrien.mazarg...@6wind.com>;
>Thomas Monjalon <tho...@monjalon.net>; Xiaolong Ye
><xiaolong...@intel.com>; Bruce Richardson
><bruce.richard...@intel.com>
>Subject: Re: [dpdk-dev] [PATCH v12 0/7] ethdev: add new Rx
>offload flags
>On 10/18/2019 11:31 AM, Andrew Rybchenko wrote:
>> On 10/18/19 12:42 PM, Ferruh Yigit wrote:
>>> On 10/18/2019 8:32 AM, Andrew Rybchenko wrote:
>>>> Hi Ferruh,
>>>>
>>>> since I've reviewed I'll reply as I understand it.
>>>>
>>>> On 10/17/19 8:43 PM, Ferruh Yigit wrote:
>>>>> On 10/17/2019 1:02 PM, pbhagavat...@marvell.com wrote:
>>>>>> From: Pavan Nikhilesh <pbhagavat...@marvell.com>
>>>>>>
>>>>>>    Add new Rx offload flags `DEV_RX_OFFLOAD_RSS_HASH` and
>>>>>>    `DEV_RX_OFFLOAD_FLOW_MARK`. These flags can be used to
>>>>>>    enable/disable PMD writes to rte_mbuf fields `hash.rss` and
>`hash.fdir.hi`
>>>>>>    and also `ol_flags:PKT_RX_RSS` and `ol_flags:PKT_RX_FDIR`.
>>>>> Hi Pavan,
>>>>>
>>>>> Initially sorry for involving late,
>>>>>
>>>>> When we expose an interface to the applications, they will expect
>those will be
>>>>> respected by underlying PMDs.
>>>>> As far as I can see drivers are updated to report new added Rx
>offload flags as
>>>>> supported capabilities but drivers are not using those flags at all,
>so
>>>>> application providing that flag won't really enable/disable
>anything, I think
>>>>> this is a problem and it is wrong to lie even for the PMDs J
>>>> It is required to let applications know that the offload is supported.
>>>> There are a number of cases when an offload cannot be disabled,
>>>> but it does not mean that the offload must not be advertised.
>>> Can't disable is something else, although I believe that is rare case, in
>this
>>> case driver can enable/disable the RSS and representing this as an
>offload
>>> capability.
>>
>> It is not enabling/disabling the RSS. It is enabling/disabling RSS hash
>> delivery
>> together with an mbuf.
>
>
>Got it, it is related to the RSS hash delivery.
>
>>
>>> But when user want to configure this offload by setting or unsetting
>in offload
>>> config, driver just ignores it.
>>
>> When application enables offload, it says that it needs it and going to
>use
>> (required). When the offload is not enabled, application simply don't
>care.
>> So, if the information is still provided it does not harm.
>
>
>Not sure if there is no harm, a config option not respected by
>underlying PMDs
>silently is a problem I think.
>
>>
>>>> If driver see benefits from disabling the offload (e.g. avoid delivery
>>>> of RSS hash from NIC to host), it can do it after the patchset.
>>> Yes but I think this patchset shouldn't ignore that disabling the
>feature is not
>>> implemented yet. If those PMDs that has been updated to report
>the HASH
>>> capability has RSS enabled by default, I suggest adding a check for
>this offload
>>> in PMD,
>>> if it is requested to disable (which means not requested for enable),
>print a
>>> log saying disabling HASH is not supported and set this flag in the
>offload
>>> configuration to say PMD is configured to calculate the HASH.
>>> Later PMD maintainers may prefer to replace that error log with
>actual disable code.
>>
>> It is possible to do. Of course, it is better to provide real offload
>> values on get, but
>> eth_conf is const in rte_eth_dev_configure(), so, we can't change it
>and
>> it is good.
>> So, the only way is rte_eth_rx_queue_info_get().
>> I guess there is a lot of space for the same improvement for other Rx
>> offloads
>> in various PMDs.
>
>
>We don't need the update 'eth_conf' parameter of the
>'rte_eth_dev_configure()',
>that is what user requested, but config stored in 'dev->data->dev_conf'
>which
>can be updated.
>
>> Also I worry that it could be not that trivial to do in all effected PMDs.
>
>
>Yes it can be some work, and if this patchset doesn't do it, who will do
>the work?
>
>>
>>>>> Specific to `DEV_RX_OFFLOAD_RSS_HASH`, we have already
>some RSS config
>>>>> structures and it is part of the 'rte_eth_dev_configure()' API,
>won't it create
>>>>> multiple way to do same thing?
>>>> No, a new offload is responsible for RSS hash delivery from NIC to
>host
>>>> and fill in in mbuf returned to application on Rx.
>>> What you have described is already happening without the new
>offload flag and
>>> this is my concern that we are duplicating it.
>>>
>>>
>>> There is a 'struct rte_eth_rxmode' (under 'struct rte_eth_conf')
>>> which has 'enum rte_eth_rx_mq_mode mq_mode;'
>>>
>>> If "mq_mode == ETH_MQ_RX_NONE" hash calculation is disabled,
>and
>>> 'mbuf::hash::rss' is not updated.
>>
>> No-no. It binds RSS distribution and hash delivery. What the new
>> offload allows to achieve: I want Rx to spread traffic over many Rx
>> queues, but I don't need RSS hash.
>
>
>I see, so RSS configuration will stay same, but driver needs to take care
>the
>new flags to decide to update or not the mbuf::rss::hash field.
>
>I don't know if disabling RSS but calculating hash is supported, if not
>supported that case also should be checked by driver.
>
>>
>>> (Thanks Bruce to helping finding it out)
>>>
>>>
>>>>> And for the `ol_flags:PKT_RX_RSS` flag, it was already used to
>mark that
>>>>> 'mbuf::hash::rss' is valid, right? Is there anything new related that
>in the set?
>>>> As I understand you mean, ol_flags::PKT_RX_RSS_HASH.
>>>> Yes, the new offload allows say if application needs it or now.
>>>> Basically it decouples RSS distribution and hash delivery.
>>> Setting 'ol_flags::PKT_RX_RSS_HASH' and 'mbuf::hash::rss' already
>there and not
>>> changing. I just want to clarify since this is not clear in the commit log.
>>>
>>> Only addition is to add a new flag to control PMD to enable/disable
>hash
>>> calculation (which PMDs ignore in the patch ???)
>>
>> It is not calculation, but delivery of the value from HW to applications.
>
>
>OK
>
>> Yes, commit log may/should be improved.>
>>>>> Specific to the `DEV_RX_OFFLOAD_FLOW_MARK` and
>`RTE_FLOW_ACTION_FLAG`, they are
>>>>> rte_flow actions, application can verify and later request these
>actions via
>>>>> rte_flow APIs. Why we are adding an additional RX_OFFLOAD flag
>for them?
>>>> The reason is basically the same as above. HW needs to know in
>advance,
>>>> if application is going to use flow marks and configure Rx queue to
>enable
>>>> the information delivery.
>>> What you described is done via 'rte_flow_create()' API, application
>will request
>>> those actions via API and Rx queue will be configured accordingly,
>this is more
>>> dynamic approach. Why application need to set this additional
>configuration flag?
>>
>> More dynamic approach is definitely better, but it is not always
>possible.
>> Some PMDs can't even change MTU dynamically or MTU changing
>requires
>> restart which is hardly really a dynamic change. Of course, it is
>> unlikely that
>> MTU is changed when traffic is running etc, but still possible.
>> The information about necessity to support flow marks delivery may
>> be required on Rx queue setup and cannot be changed dynamically
>when
>> Rx queue is running and application would like to add flow rule with
>mark
>> action.
>
>It doesn't need to be changed dynamically, application can call
>'rte_flow_validate()' and learn if it can set this action or not. Perhaps I
>am
>missing something, when it is required to have this as configuration
>option?
>
>>
>>> And as above the new RX offload flags ignored by PMDs, hard to
>understand what
>>> is the intention here.
>>>
>>>
>>> Above usage of flags feels like the intention is adding some capability
>>> information for the PMDs more that adding new offload
>configuration.
>>> If so this is bigger/older problem, and instead of abusing the offload
>flags we
>>> can think of an API to present device capabilities, and move
>features.ini
>>> content to the API in long term.
>>
>> What I really like with these new offload flags for Rx hash and flow
>mark is
>> that it makes features which provide information in mbuf on Rx
>consistent:
>>   - want timestamp? => DEV_RX_OFFLOAD_TIMESTAMP
>>   - want Rx checksum flags => DEV_RX_OFFLOAD_CHECKSUM
>>   - want to strip VLAN? => DEV_RX_OFFLOAD_VLAN_STRIP
>>   - want RSS hash? => DEV_RX_OFFLOAD_RSS_HASH
>>   - want flow mark support? => DEV_RX_OFFLOAD_FLOW_MARK
>>
>> Also it perfectly fits dynamic mbuf fields and allows to make RSS hash
>> and flow mark fields dynamic with the new offloads as controls
>
>Agree RSS_HASH fits well, my main concern with the patchset is driver
>implementations are missing and just ignored.
>

Ignoring driver implementation is intentional as it involves adding a branch
in Rx fastpath function for all drivers and might have -ve effects on 
performance.

>I am not so sure about FLOW_MARK one, it looks like it is duplicating the
>rte_flow API.
>
>>
>>>>>>    Add new packet type set function
>`rte_eth_dev_set_supported_ptypes`,
>>>>>>    allows application to inform PMDs about the packet types it is
>interested
>>>>>>    in. Based on ptypes requested by application PMDs can
>optimize the Rx path.
>>>>> OK to the API, but why "Packet type parsing" feature updated to
>say it should
>>>>> implement this API?
>>>>> Is this API really required to say "Packet type parsing" supported
>by PMD?
>>>> As I understand it is not strictly required, but related to the feature.
>>> I am OK with "related", but it is documented as "implements", so doc
>says it is
>>> required.
>>
>> Agreed.
>>
>>>>>>    For example, if a given PMD doesn't support any packet types
>that the
>>>>>>    application is interested in then the application can disable[1]
>writes to
>>>>>>    `mbuf.packet_type` done by the PMD and use a software
>ptype parser.
>>>>>>         [1] rte_eth_dev_set_supported_ptypes(*port_id*,
>RTE_PTYPE_UNKNOWN,
>>>>>>                                    NULL, 0);
>>>>> And for the 7/7 patch, why we are updating all examples, is the
>API something do
>>>>> we really need to call for any DPDK application? I am for leaving
>the default
>>>>> behavior unless there is a very specific case for set or disable
>packet typing.
>>>>> Instead implement a command in testpmd to test this feature.
>>>> If an application does not use packet types provided in mbuf, it is
>>>> better to inform PMD that the information is not required to allow
>PMD
>>>> to do optimizations.
>>>>
>>> I can see disabling packet type detection may increase the
>performance but
>>> sample applications are to demonstrate a specific feature, adding
>these kind of
>>> APIs will pollute them.
>>> 'skeleton' app that shows the most basic code for forwarding
>sample, why it is
>>> now having "experimental" 'set_supported_ptypes()' API? Same for
>other. As said
>>> before I think a testpmd command suits better here.
>>
>> May be you're right and we should reconsider which applications
>> are updated and which are ignored. I guess before the criteria
>> was simple: don't use packet type information, say so to take
>> benefits from all possible optimizations.
>>
>>>> Yes, may be it would be better to have it as the
>>>> default behaviour, but it would be behaviour change in comparison
>>>> to previous DPDK releases and it is better to avoid it.
>>> Sorry I missed why not calling this function cause behavior change? I
>think it
>>> is other way around, no?
>>
>> Just misunderstanding. What I was trying to say is that it could
>> be more logical to have packet type parsing and delivery
>> disabled by default  (as we have for all other offloads), but
>> it would be behaviour change from application point of view.
>> That's why it is necessary to disable explicitly.
>>
>> Thanks,
>> Andrew.
>>
>>>> Thanks,
>>>> Andrew.
>>>>
>>>>>> v12 Changes:
>>>>>> -----------
>>>>>> - Rebase onto next-net.
>>>>>>
>>>>>> v11 Changes:
>>>>>> -----------
>>>>>> - Use RTE_DIM to get array size.
>>>>>> - Since we are using a list of MASKs to validate ptype_mask
>return -EINVAL
>>>>>>     if any unknown mask is set.
>>>>>> - Rebase to TOT.
>>>>>>
>>>>>> v10 Changes:
>>>>>> -----------
>>>>>> - Modify ptype_mask validation in
>set_supported_ptypes.(Andrew)
>>>>>>
>>>>>> v9 Changes:
>>>>>> ----------
>>>>>> - Add ptype_mask validation in set_supported_ptypes.(Andrew)
>>>>>> - Make description more verbose.
>>>>>>
>>>>>> v8 Changes:
>>>>>> ----------
>>>>>> - Make description more verbose.
>>>>>> - Set RTE_PTYPE_UNKNOWN in set_ptypes array when either
>get ot set ptypes
>>>>>>     is not supported by ethernet device.
>>>>>>
>>>>>> v7 Changes:
>>>>>> ----------
>>>>>> - Fix unused variable in net/octeontx2
>>>>>>
>>>>>> v6 Changes:
>>>>>> ----------
>>>>>> - Add additional checks for set supported ptypes.(Andrew)
>>>>>> - Clarify `rte_eth_dev_set_supported_ptypes` documentation.
>>>>>> - Remove DEV_RX_OFFLOAD_FLOW_MARK emulation from
>net/octeontx2.
>>>>>>
>>>>>> v5 Changes:
>>>>>> ----------
>>>>>> - Fix typos.
>>>>>>
>>>>>> v4 Changes:
>>>>>> ----------
>>>>>> - Set the last element in set_ptype array as
>RTE_PTYPE_UNKNOWN to mark the end
>>>>>>     of array.
>>>>>> - Fix invalid set ptype function call in examples.
>>>>>> - Remove setting rte_eth_dev_set_supported_ptypes to
>UNKNOWN in l3fwd-power.
>>>>>>
>>>>>> v3 Changes:
>>>>>> ----------
>>>>>> - Add missing release notes. (Andrew)
>>>>>> - Re-word various descriptions.
>>>>>> - Fix ptype set logic.
>>>>>>
>>>>>> v2 Changes:
>>>>>> ----------
>>>>>> - Update release notes. (Andrew)
>>>>>> - Redo commit logs. (Andrew)
>>>>>> - Disable ptype parsing for unsupported examples. (Jerin)
>>>>>> - Disable RSS write only in generic mode eventdev_pipeline.
>(Jerin)
>>>>>> - Modify set_supported_ptypes function to return successfuly
>set mask
>>>>>>     instead of failure.
>>>>>> - Dropped set_supported_ptypes to drivers by handling in library
>>>>>>     layer, interested PMD can add it in.
>>>>>>
>>>>>> Pavan Nikhilesh (7):
>>>>>>     ethdev: add set ptype function
>>>>>>     ethdev: add mbuf RSS update as an offload
>>>>>>     ethdev: add flow action type update as an offload
>>>>>>     drivers/net: update Rx RSS hash offload capabilities
>>>>>>     drivers/net: update Rx flow flag and mark capabilities
>>>>>>     examples/eventdev_pipeline: add new Rx RSS hash offload
>>>>>>     examples: disable Rx packet type parsing
>>>>> <...>
>>

Reply via email to