On 9/20/2023 2:17 PM, Thomas Monjalon wrote:
> Hello,
> 
> 19/09/2023 11:06, Christian Koue Muf:
>> On 9/18/23 10:34 AM, Ferruh Yigit wrote:
>>> On 9/15/2023 7:37 PM, Morten Brørup wrote:
>>>>> From: Ferruh Yigit [mailto:ferruh.yi...@amd.com]
>>>>> Sent: Friday, 15 September 2023 17.55
>>>>>
>>>>> On 9/8/2023 5:07 PM, Mykola Kostenok wrote:
>>>>>> From: Christian Koue Muf <c...@napatech.com>
>>>>>>
>>>>>> The NTNIC PMD does not rely on a kernel space Napatech driver, thus 
>>>>>> all defines related to the register layout is part of the PMD code, 
>>>>>> which will be added in later commits.
>>>>>>
>>>>>> Signed-off-by: Christian Koue Muf <c...@napatech.com>
>>>>>> Reviewed-by: Mykola Kostenok <mko-...@napatech.com>
>>>>>>
>>>>>
>>>>> Hi Mykola, Christiam,
>>>>>
>>>>> This PMD scares me, overall it is a big drop:
>>>>> "249 files changed, 87128 insertions(+)"
>>>>>
>>>>> I think it is not possible to review all in one release cycle, and it 
>>>>> is not even possible to say if all code used or not.
>>>>>
>>>>> I can see code is already developed, and it is difficult to 
>>>>> restructure developed code, but restructure it into small pieces 
>>>>> really helps for reviews.
>>>>>
>>>>>
>>>>> Driver supports good list of features, can it be possible to 
>>>>> distribute upstream effort into multiple release.
>>>>> Starting from basic functionality and add features gradually.
>>>>> Target for this release can be providing datapath, and add more if we 
>>>>> have time in the release, what do you think?
> 
> I was expecting to get only Rx/Tx in this release, not really more.
> 
> I agree it may be interesting to discuss some design
> and check whether we need more features in ethdev
> as part of the driver upstreaming process.
> 
> 
>>>>> Also there are large amount of base code (HAL / FPGA code), instead 
>>>>> of adding them as a bulk, relevant ones with a feature can be added 
>>>>> with the feature patch, this eliminates dead code in the base code 
>>>>> layer, also helps user/review to understand the link between driver 
>>>>> code and base code.
> 
> Yes it would be interesting to see what is really needed for the basic 
> initialization
> and what is linked to a specific offload or configuration feature.
> 
> As a maintainer, I have to do some changes across all drivers sometimes,
> and I use git blame a lot to understand why something was added.
> 
> 
>>>> Jumping in here with an opinion about welcoming new NIC vendors to the 
>>>> community:
>>>>
>>>> Generally, if a NIC vendor supplies a PMD for their NIC, I expect the 
>>>> vendor to take responsibility for the quality of the PMD, including 
>>>> providing a maintainer and support backporting of fixes to the PMD in LTS 
>>>> releases. This should align with the vendor's business case for 
>>>> upstreaming their driver.
>>>>
>>>> If the vendor provides one big patch series, which may be difficult to 
>>>> understand/review, the fallout mainly hits the vendor's customers (and 
>>>> thus the vendor's support organization), not the community as a whole.
>>>>
>>>
>>> Hi Morten,
>>>
>>> I was thinking same before making my above comment, what happens if vendors 
>>> submit as one big patch and when a problem occurs we can ask owner to fix. 
>>> Probably this makes vendor happy and makes my life (or any other 
>>> maintainer's life) easier, it is always easier to say yes.
>>>
>>>
>>> But I come up with two main reasons to ask for a rework:
>>>
>>> 1- Technically any vendor can deliver their software to their customers via 
>>> a public git repository, they don't have to upstream to 
>>> https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fdpdk.org&c=E,1,NpoJejuuvPdOPfcFJYtsmkQF6PVrDjGsZ8x_gi5xDrTyZokK_nM11u4ZpzHgM10J9bOLlnhoR6fFAzWtCzOhRCzVruYj520zZORv6-MjJeSC5TrGnIFL&typo=1,
>>> but upstreaming has many benefits.
>>>
>>> One of those benefits is upstreaming provides a quality assurance for 
>>> vendor's customers (that is why customer can be asking for this, as we are 
>>> having in many cases), and this quality assurance comes from additional 
>>> eyes reviewing the code and guiding vendors for the DPDK quality standards 
>>> (some vendors already doing pretty good, but new ones sometimes requires 
>>> hand-holding).
>>>
>>> If driver is one big patch series, it is practically not possible to review 
>>> it, I can catch a few bits here or there, you may some others, but 
>>> practically it will be merged without review, and we will fail on our 
>>> quality assurance task.
>>>
>>> 2- Make code more accessible to the rest of the world.
>>>
>>> When it is a big patch, code can be functional but lots of details, 
>>> reasoning, relation between components gets lost, which makes it even 
>>> harder for an external developer, like me, to understand it (I am a mere 
>>> guinea pig here :).
>>>
>>> If a customer would like to add a feature themselves, or fix something, 
>>> even after vendor no more working on that product anymore, customer needs 
>>> to understand the code or some reasoning in the code.
>>> Or if someone wants to backport the driver to rust, or a DPDK developer 
>>> wants to do a rework that requires updating all drivers, or a tester would 
>>> like to analyze the code to figure out behavior difference of the devices. 
>>> I think I have witness all above cases in real life.
>>>
>>> If driver is split into more patches, it makes patch easier to understand 
>>> which makes code practically more accessible to other developers that are 
>>> not expert in driver.
> 
> I fully agree about the 2 reasons for upstreaming piece by piece.
> 
> 
>>> Overall, yes splitting patch takes time and effort, and yes this is an 
>>> overhead for a code that is already developed, but I think benefit is big 
>>> so it worth doing the task.
> 
> In the meantime, if some features are not yet upstreamed in a release,
> a user can apply the missing patches from the mailing list to get the 
> features.
> 
> 
>>>> We, the community, should not make it too difficult for vendors trying to 
>>>> upstream their drivers. I certainly consider it unreasonable to ask a 
>>>> vendor to postpone the release of some existing features by effectively an 
>>>> entire year (considering that only LTS releases are relevant for most of 
>>>> us) because we want the vendor to refactor the patch series to match our 
>>>> preferences within an unrealistic timeframe.
> 
> You're right Morten, we try to be as welcoming as possible,
> but as Ferruh said, we want to be able to understand how a driver is built,
> even if not understanding all details.
> 
> In Open Source, I think not only the code should be available,
> we must also take care of explanations and documentation.
> 
> 
>>> Agree to not make upstreaming difficult for new vendors, and indeed we are 
>>> encouraging more vendors to be upstream their code, this is in best 
>>> interest of both sides.
>>>
>>> Distributing upstreaming effort to a year was just a suggestion, it can go 
>>> in earlier as it is becomes ready but I can see it will take time to split 
>>> driver into features and upstream them.
> 
> Driver features can be added until -rc2 (in one month).
> 
> 
>>> As I am from a vendor too, I can understand the product/customer pressure, 
>>> but I hope this approach can encourage vendors start upstreaming early or 
>>> even better upstream as they develop the code.
>>
>> Hi Ferruh,
>>
>> First of all, thank you for starting the work to review our code.
>>
>> As Morten said Napatech plans to take all responsibility for the
>> quality of the PMD source code. We expect to provide all fixes
>> needed in the future. If for some reason Napatech stops maintaining
>> the code, then we have been informed that the DPDK community
>> might delete the PMD from the repository, and we understand that.
>>
>> In regards to splitting the code, I don't see this a good option. While
>> I of cause agree it would be easier to review and understand, the
>> code should also result in a meaningful product. Of the 87k lines
>> of code, 53k lines is needed to start-up the FPGA to a state the it is ready
>> to receive traffic. But at this point all packets would simply be discarded,
>> and to be honest, there are better and cheaper options out there,
>> if nothing more than basic functionality is needed. 34k lines are
>> used to setup filters based on rte_flow. The thing is, that you need
>> to initialize all modules in the FPGA TX- and RX-pipelines with valid
>> data, even if you don't need the features those modules provide.
>> As a result, if you split up the 34k lines, then the product would not
>> be functional. Of cause some of the top level logic could be split out,
>> but at this point we are talking about splitting 87k lines into 80k and 7k,
>> which I don't think is worth it.
> 
> Actually I think it is worth.
> There is a benefit in isolating the small basic init part
> from the more complex features.
> 
> 
>>>>> As far as I understand last patch opens a socket interface and an 
>>>>> external application can sent control commands via this interface.
>>>>> I am not sure about this side control channel, what is missing in the 
>>>>> DPDK API? Can we try to address them in the DPDK layer instead of a 
>>>>> driver specific solution?
>>>>
>>>> That would be great.
>>>>
>>>> AFAIK, other vendors also has a bunch of out-of-band communication, 
>>>> e.g. magical EAL parameters to the MLX drivers. So let's not be too 
>>>> hard on the newcomers. ;-)
>>>>
>>>
>>> I did some thinking for this one too,
>>>
>>> As we are in userspace, it is easy to have side control channel, and this 
>>> can make users life easy, so this is a practical thing to do.
>>> (Indeed there are already some ways to do this, without PMD exposing a 
>>> socket interface.)
>>>
>>> But this also reduces effort developers putting on DPDK layer solution, 
>>> because it is always easier to add more support to the driver only.
>>> And overall this reduces portability of the DPDK application, each 
>>> application becomes unique to a device (This is a bad thing, but I also 
>>> need some feedback how bad it is in real life.)
>>>
>>> To balance this, we said if a feature is too specific to a device, it can 
>>> add device specific API and this is better than device specific features 
>>> pollute the common, most used code. And push back to introduce more new PMD 
>>> specific APIs unless it is really needed.
>>>
>>> But creating a socket interface directly from the driver is more than PMD 
>>> specific API. Technically application control interface can rely completely 
>>> to this. Even we assume this is not for control, but just for debug, I can 
>>> see it can be useful for debug and again practical thing to do, I am still 
>>> not sure how much it hurts if each driver has a custom socket interface for 
>>> their debug needs.
>>>
>>> Overall it makes more sense to me to have a unified/common interface from 
>>> drivers to DPDK applications, which is through the ethdev layer.
>>> And improve and extend the ethdev layer to satisfy driver needs.
>>>
>>> In this specific example, I am for rejecting the socket interface patch, 
>>> but I would like to get more feedback from @techboard.
>>>
>>
>> The reason we have the addition control channel is not provide
>> additional functionality. We have customers with use-cases that
>> require multiple processes. Since Napatech adapters do not support
>> configuration through VFs, then secondary applications must send
>> their rte_flow to a main application, which will then setup the flow
>> through it's PF. This control channel "hides" these details, and
>> make the product easier for users to adapt to their existing solutions.
> 
> I think you need to explore VF representors.
> This is what is done with other drivers, and it make them compatible.
> 
>> If you stand firm on rejecting the control channel, then we have
>> to go back to the drawing board on this issue. We did look at
>> DPDK's multi-process support, and actually had some support
>> for this, but we determined that for our use-case it was better
>> to have a communication channel, and no shared memory.
> 
> I'm not sure your need is about secondary process.
> Let's discuss this need in a meeting if needed.
> Anyway, the message is that we want to be part of such design decision.
> 
> 
>>> And related to not being too hard on the newcomers, unrelated to being a 
>>> newcomer or not, if a process/feature/approach approved once, some others 
>>> will point to it and will ask to do the same which is fair in their 
>>> perspective. I had multiple instance of this in the past.
>>>
>>> Of course we are being easy to newcomers but not in a way to allow code 
>>> that we believe is not good thing to do, but going easy on process may be :)
>>>
>>
>> We are grateful for any leniency you may show us ;-)
>>
>> Thanks again,
>> Christian
>>
>>>
>>>>>
>>>>>
>>>>> Thanks,
>>>>> ferruh
>>>>
>>>> Thank you, Ferruh, for taking good care of the community by providing 
>>>> constructive feedback like this to new NIC vendors!
>>>>
>>>> Please note that my feedback is entirely process related. I didn’t review 
>>>> the driver, so I have no technical comments to the patch series.
>>>>
>>>> -Morten
> 
> 
> We are going to discuss the process in the technical board today.
> 
> 

Hi Mykola, Christiam,

As discussed, following are a few good examples from the DPDK history,
there is no "fits all, fixed guidelines", but they can serve as samples:

Marvell cnxk:
https://patchwork.dpdk.org/project/dpdk/list/?series=17449&state=%2A&archive=both


Solarflare sfc (before patchwork series support):
https://patchwork.dpdk.org/project/dpdk/patch/1480436367-20749-2-git-send-email-arybche...@solarflare.com/
to
https://patchwork.dpdk.org/project/dpdk/patch/1480436367-20749-56-git-send-email-arybche...@solarflare.com/


Intel ice:
https://patchwork.dpdk.org/project/dpdk/list/?series=2842&state=%2A&archive=both


Reply via email to