On 10/9/2023 8:57 AM, Christian Koue Muf wrote: > On 9/29/2023 12:24 PM, Thomas Monjalon wrote: >> 29/09/2023 11:46, Ferruh Yigit: >>> On 9/29/2023 10:21 AM, Christian Koue Muf wrote: >>>> On 9/21/2023 4:05 PM, Ferruh Yigit wrote: >>>>> 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,N >>>>>>>> poJejuuvPdOPfcFJYtsmkQF6PVrDjGsZ8x_gi5xDrTyZokK_nM11u4ZpzHgM10J9 >>>>>>>> bOLl nhoR6fFAzWtCzOhRCzVruYj520zZORv6-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://linkprotect.cudasvc.com/url?a=https%3a%2f%2fpatchwork.dpdk. >>>>> org%2fproject%2fdpdk%2flist%2f%3fseries%3d17449%26state%3d%252A%26a >>>>> rchive%3dboth&c=E,1,DmXU0iHwXoSaZ4bKn-yhX9J8XmFBispd2ut7pxLNBkK3Q4L >>>>> VpG_zmOf1jnWSS-Y0Fx-TNbPnQDHyBZkDj23Gu7zjPZ5nsA7pid5CsE2vxNk,&typo= >>>>> 1 >>>>> >>>>> >>>>> Solarflare sfc (before patchwork series support): >>>>> https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fpatchwork.dpdk. >>>>> org%2fproject%2fdpdk%2fpatch%2f1480436367-20749-2-git-send-email-ar >>>>> ybchenko%40solarflare.com%2f&c=E,1,E9oUT_1WuNC2JA8x7an3rC_Pm5g1L5cx >>>>> JKQ6pTwSbCWSJpiLH2GnmgfFkUqViOOwkpS2df8kgBvHjmulKaWhyr4BBizUT-sL5LJ >>>>> v21Hx4RtHtK3vjhcKpg,,&typo=1 >>>>> to >>>>> https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fpatchwork.dpdk. >>>>> org%2fproject%2fdpdk%2fpatch%2f1480436367-20749-56-git-send-email-a >>>>> rybchenko%40solarflare.com%2f&c=E,1,GByF_TiC_q11iVPpiPgpCMlSge-J0Xf >>>>> T0zHkriK0rde1Qt1RG7uf6mETQkTSQ-1V86Z7EtRcxlvSsed1sqn8RWfN8KFSbd7NaA >>>>> kfbDiehn_vSRzja45rQgv53Q,,&typo=1 >>>>> >>>>> >>>>> Intel ice: >>>>> https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fpatchwork.dpdk. >>>>> org%2fproject%2fdpdk%2flist%2f%3fseries%3d2842%26state%3d%252A%26ar >>>>> chive%3dboth&c=E,1,zQwvAIR3ToLIhT09bVxm_HEF-dp8eyTqhsKB3eOYgIJdd2WS >>>>> _0ZlTbQKfr9KLyTA3A2A2HzBbjIlz21D_hWVgS_INmmC5eew1J0QBH-PoRNd&typo=1 >>>>> >>>> >>>> Thank you for the links, they have been very helpful. >>>> >>>> After a lot of internal discussion, Napatech has decided to implement some >>>> architectural changes to our PMD that will allow us to easier split up the >>>> code into smaller features. The work will require some time, which means >>>> that we will not be ready for the 23.11 release. The current goal is to >>>> attempt to upstream a quite basic PMD in time for 24.7, and a fully >>>> featured PMD for 24.11. >>>> >>>> >>> >>> Hi Christiam, >>> >>> Good to see there is a solid plan for upstreaming but also not that >>> good that it is postponed, >>> >>> I am aware it is all tied to your internal planning/resourcing etc, >>> but since the effort already started, can it be possible to squeeze >>> very basic driver in this release, which just does link up and most basic >>> Rx/Tx? >>> It gives opportunity to experiment on device to users. >>> >>> We can accept it up to -rc3, which is end of October, so there is >>> still some time? >>> >>> This is just a suggestion though, no pressure intended. >> >> I agree with Ferruh, better to start early and small. >> It shouldn't be too hard to introduce the skeleton of the driver. > > Hi Ferruh and Thomas, > > My apologies for the late response, I have been sick the last week. > > We can try to create a small PMD in time. The reason I'm cautious is because > Napatech plan to make quite large changes to the PMD, to achieve a more > stable and modular code-base. This means that future updates will have quite > large diffs, until these changes are in place. > >
Hi Christian, Mykola, What is the status of the 'ntnic'? Will there be some upstreaming effort for v24.07?