From: Andrew Rybchenko
> Sent: Friday, November 8, 2019 12:12 PM
> To: Matan Azrad <ma...@mellanox.com>; Pavan Nikhilesh Bhagavatula
> <pbhagavat...@marvell.com>; ferruh.yi...@intel.com; Jerin Jacob
> Kollanukkaran <jer...@marvell.com>; Thomas Monjalon
> <tho...@monjalon.net>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v15 3/7] ethdev: add validation to offloads
> set by PMD
> 
> On 11/7/19 9:56 AM, Matan Azrad wrote:
> > Hi
> >
> > From: Andrew Rybchenko
> >> On 11/6/19 9:58 AM, Matan Azrad wrote:
> >>>
> >>>
> >>> From: Andrew Rybchenko
> >>>> On 11/5/19 5:05 PM, Matan Azrad wrote:
> >>>>> From: Andrew Rybchenko
> >>>>>> On 11/3/19 6:16 PM, Matan Azrad wrote
> >>>>>>> From: Andrew Rybchenko
> >>>>>>>> On 11/3/19 9:57 AM, Matan Azrad wrote:
> >>>>>>>>> Hi
> >>>>>>>>>
> >>>>>>>>> From: Andrew Rybchenko
> >>>>>>>>>> On 10/31/19 7:33 PM, Pavan Nikhilesh Bhagavatula
> >>>>>>>>>> wrote:
> >>>>>>>>>>>> From: Pavan Nikhilesh Bhagavatula
> >>>>>>>>>>>>> Hi Matan,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hi Pavan
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> From: Pavan Nikhilesh
> >>>>>>>>>>>>>> <pbhagavat...@marvell.com>
> >>>>>>>>>>>>>>> Some PMDs cannot work when certain offloads are
> >>>>>>>>>>>>>>> enable/disabled, as a workaround PMDs auto
> >>>>>>>>>>>>>>> enable/disable offloads internally and expose it through
> >>>>>>>>>>>>>>> dev->data-dev_conf.rxmode.offloads.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> After device specific dev_configure is called compare
> >>>>>>>>>>>>>>> the requested offloads to the offloads exposed by the
> >>>>>>>>>>>>>>> PMD and, if the PMD failed to enable a given offload
> >>>>>>>>>>>>>>> then log it and return -EINVAL from
> >>>>>>>>>>>>>>> rte_eth_dev_configure, else if the PMD failed to disable
> >>>>>>>>>>>>>>> a given offload log and continue with
> rte_eth_dev_configure.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>> rte_eth_dev_configure can be called more than 1 time in
> >>>>>>>>>>>>>> the device life time, How can you know what is the
> >>>>>>>>>>>>>> minimum offload configurations required by the port after
> >>>>>>>>>>>>>> the first call?
> >>>>>>>>>>>>>> Maybe putting it in dev info is better, what do you think?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>> We only return -EINVAL in the case where we enable an
> >>>>>>>>>>>>> offload advertised by dev_info and the port still fails to
> >>>>>>>>>>>>> enable it.
> >>>>>>>>>>>> Are you sure it is ok that devices may disable\enable
> >>>>>>>>>>>> offloads under the hood without user notification?
> >>>>>>>>>>> Some devices already do it. The above check adds validation
> >>>>>>>>>>> for the same.
> >>>>>>>>>> The problem is that some offloads cannot be disabled.
> >>>>>>>>> Yes, I understand it.
> >>>>>>>>>
> >>>>>>>>>> If application does not request Rx checksum offload since it
> >>>>>>>>>> does use it, it is not a problem to report it.
> >>>>>>>>> Yes, for RX checksum I tend to agree that application doesn't
> >>>>>>>>> care if the
> >>>>>>>> PMD will calculate the checksum in spite of the offload is
> >>>>>>>> disabled.
> >>>>>>>>>
> >>>>>>>>> But what's about other offloads: For example in RX: LRO,
> >>>>>>>>> CRC_KEEP, VLAN_STRIP, JUMBO If the PMD will stay them on
> while
> >>>>>>>>> the app is disabling it, It can cause a problems to the
> >>>>>>>> application (affects the packet length).
> >>>>>>>>
> >>>>>>>> Yes, I agree that some offloads are critical to be disabled,
> >>>>>>>> but RSS_HASH discussed in the changeset is not critical.
> >>>>>>>
> >>>>>>> So, are you agree It should not be checked globally for all the
> >>>>>>> offloads in
> >>>>>> ethdev layer?
> >>>>>>
> >>>>>> If offload is not requested, but enabled (since PMD cannot
> >>>>>> disable it), right not it will not fail configure, but warn about
> >>>>>> it in logs.
> >>>>>>
> >>>>>
> >>>>> In this case warning print is not enough since it can be critical
> >>>>> for the
> >>>> application for some offloads.
> >>>>> It can be very weird for the application to see that some offload
> >>>>> are on
> >>>> while the application doesn't expect them to be on.
> >>>>> it even can cause app crash(at least for the RX offload I wrote
> >>>>> above).
> >>>>
> >>>> The patch improves the situation. Earlier it was silent, now it
> >>>> will be at least visible.
> >>>
> >>> We can do it visible inside the limited PMDs.
> >>
> >> Why?
> >
> > Because this is not according to what application should understand from
> the ethdev API.
> 
> It does not answer why it should be inside the limited PMDs instead of
> ethdev layer.

Why not?
Application doesn't expect to it and it may affect it.

> >>>> I'm afraid that in 19.11 release cycle we cannot change it to fail
> >>>> dev_configure. I think it will be too destructive. Future
> >>>> improvement should be discussed separately.
> >>>
> >>> So we can remove this ethdev patch now and let the PMD to do it
> >>> until we will find better solution later.
> >>
> >> Sorry, but I don't think so.
> >>
> >>>>>>> It even be more problematic if the dynamic offload field in mbuf
> >>>>>>> is not exist at all.
> >>>>>
> >>>>> Any answer here?
> >>>
> >>> A Rx offload requires dynamic mbuf field cannot stay visible while
> >>> the app disabling it. Because the dynamic mbuf field probably is not
> >>> set in the mbuf. May cause problems.
> >>>
> >>>> Please, clarify the question.
> >>>>
> >
> > No answer here.
> 
> Sorry, but I don't understand the problem.
> If there is no dynamic field, it will not be set.
Why not? The offload is enabled for the PMD perspective.

> If there is dynamic field, it is the same as regular fields.
> 
> >>>>>>>>
> >>>>>>>>> For example in TX: TSO, VLAN, MULTI_SEG.....
> >>>>>>>>
> >>>>>>>> Tx is not that critical since application should not request
> >>>>>>>> these offloads per- packet. Tx offloads are mainly required to
> >>>>>>>> ensure that application may request the offload per packet and
> >>>>>>>> it will be done.
> >>>>>>>
> >>>>>>> yes, you right, In TX it looks less critical (for now).
> >>>>>>>
> >>>>>>>>
> >>>>>>>>>> Of course, it could be a problem if the offload is used, but
> >>>>>>>>>> application wants to disable it, for example, for debugging
> >>>>>>>>>> purposes. In this case, the solution is to mask offloads on
> >>>>>>>>>> application level, which is not ideal as well.
> >>>>>>>>> Why not ideal?
> >>>>>>>>
> >>>>>>>> It eats CPU cycles.
> >>>>>>>
> >>>>>>> Sorry, I don't understand your use case here.
> >>>>>>
> >>>>>> If application wants to try code path without, for example, Rx
> >>>>>> checksum offload, it could be insufficient to disable the offload
> >>>>>> right now, but also required to cleanup offload results flags in
> >>>>>> each mbuf (if PMD does not support the offload disabling).
> >>>>>
> >>>>> What is "right now"? Configuration time?
> >>>>
> >>>> Right now is the current state of some drivers in DPDK tree.
> >>>>
> >>>
> >>> OK. I think the offload configuration is in configuration time. No
> >>> data-path.
> >>>
> >>>>> If application will know that PMD cannot disable the rx-checksum
> >>>>> in configuration time, It can plan to not clean this flag in mbuf
> >>>>> for each rx
> >>>> mbuf.
> >>>>
> >>>> Yes and application has a way to know it - take a look at
> >>>> dev->data->dev_conf.rxmode.offloads.
> >>>
> >>> As I understand, before this patch, this field used for ethdev layer
> >>> knowledge to track on the application Rx offload configuration. Am I
> >>> wrong?
> >>
> >> I think it is just Rx offloads configuration.
> >> It is better to have real offloads here since it is used on Rx queue
> >> setup to mask already enabled offloads.
> >
> > And in DPDK or any SW management controls a device, the configuration
> must be set by the user.
> > So, it should reflect the user configuration as is.
> 
> It is ideal world which is unfortunately too far from real life.
> There is always a trade off. It is possible to define too restrictive 
> interface
> which will enforce complicated implementation with bad performance
> characteristics for no real value.
> 
> In any case, the patch simply makes the difference visible.
> It does not enforce any rules except to fail configure if requested offload is
> not enabled which is a strong violation of the interface. If you don't like 
> it, we
> can discuss the point. In the area of not requested but enabled offloads, it
> just adds logs. No changes in behaviour. I'm strongly against making it hard
> failure in 19.11 since it is too late for the decision. We can discuss it 
> later
> separately from the patch.
> 
While I don't agree with the patch and the idea here,  we can continue discuss 
later.
I think we understand the ideas of both of us and we can dig to it later. 


> >>> And If the meaning is the PMD configuration set (which weirdly can
> >>> be different from what application want) I think it should be an
> >>> error - because app doesn't follow the API.
> >>
> >> Which app? Which API?
> >
> > App - the dpdk application which configures an offload that cannot be
> masked.
> > API - The Rx offload field in the ethdev data (which weirdly means what
> was configured by the PMD).
> 
> See above.
> 
> >>>>> It looks me like PMD limitation which can be solved by 2
> >>>>> options: 1. Capability information which say to the app what
> >>>>> offload may not be disabled.
> >>>>> 2. Add limitation in the PMD documentation and print warning\error
> >>>>> massage from the PMD.
> >>>>
> >>>> Yes, right now we are going way (2).
> >>>>
> >>>>>>>>> If application can know the limitation of offloads disabling
> >>>>>>>>> (for example to
> >>>>>>>> read capability on it)
> >>>>>>>>> The application has all information to take decisions.
> >>>>>>>>>
> >>>>>>>>>> Anyway, the patch just tries to highlight difference of
> >>>>>>>>>> applied from requested. So, it is a step forward. Also, the
> >>>>>>>>>> patch will fail configure if an offload is requested, but not
> >>>>>>>> enabled.
> >>>>>>>>>>
> >>>>>>>>>>>> Can't it break applications? Why does the device expose
> >>>>>>>>>>>> unsupported offloads in dev info? Does it update the
> >>>>>>>>>>>> running offload usynchronically? Race?
> >>>>>>>>>>>> Can you explain also your specific use case?
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>>> Matan
> >>>>>>>
> >>>>>
> >>>
> >

Reply via email to