I can share a data-point with respect to constructing a reasonably functional 
network stack. Original work on the project which eventually became fd.io vpp 
started in 2002. I've worked on the vpp code base full-time for 18 years.

In terms of lines of code: the vpp graph subsystem is a minuscule fraction of 
the project as a whole. We've rewritten performance-critical bits of the vpp 
netstack multiple times.

FWIW... Dave  

-----Original Message-----
From: Mattias Rönnblom <[email protected]> 
Sent: Friday, February 21, 2020 10:39 AM
To: Thomas Monjalon <[email protected]>; Jerin Jacob <[email protected]>
Cc: Jerin Jacob <[email protected]>; Ray Kinsella <[email protected]>; dpdk-dev 
<[email protected]>; Prasun Kapoor <[email protected]>; Nithin Dabilpuram 
<[email protected]>; Kiran Kumar K <[email protected]>; Pavan 
Nikhilesh <[email protected]>; Narayana Prasad <[email protected]>; 
[email protected]; [email protected]; Honnappa Nagarahalli 
<[email protected]>; David Marchand <[email protected]>; 
Ferruh Yigit <[email protected]>; Andrew Rybchenko 
<[email protected]>; Ajit Khaparde <[email protected]>; Ye, 
Xiaolong <[email protected]>; Raslan Darawsheh <[email protected]>; 
Maxime Coquelin <[email protected]>; Akhil Goyal 
<[email protected]>; Cristian Dumitrescu <[email protected]>; 
John McNamara <[email protected]>; Richardson, Bruce 
<[email protected]>; Anatoly Burakov <[email protected]>; 
Gavin Hu <[email protected]>; David Christensen <[email protected]>; 
Ananyev, Konstantin <[email protected]>; Pallavi Kadam 
<[email protected]>; Olivier Matz <[email protected]>; Gage Eads 
<[email protected]>; Rao, Nikhil <[email protected]>; Erik Gabriel 
Carrillo <[email protected]>; Hemant Agrawal <[email protected]>; 
Artem V. Andreev <[email protected]>; Stephen Hemminger 
<[email protected]>; Shahaf Shuler <[email protected]>; Wiles, Keith 
<[email protected]>; Jasvinder Singh <[email protected]>; Vladimir 
Medvedkin <[email protected]>; [email protected]; Stephen Hemminger 
<[email protected]>; [email protected]
Subject: Re: [dpdk-dev] [RFC PATCH 0/5] graph: introduce graph subsystem

On 2020-02-21 12:10, Thomas Monjalon wrote:
> 21/02/2020 11:30, Jerin Jacob:
>> On Mon, Feb 17, 2020 at 4:28 PM Jerin Jacob <[email protected]> wrote:
>>> On Mon, Feb 17, 2020 at 2:08 PM Thomas Monjalon <[email protected]> wrote:
>>> Thanks for starting this discussion now. It is an interesting 
>>> discussion.  Some thoughts below.
>>> We can decide based on community consensus and follow a single rule 
>>> across the components.
>> Thomas,
>>
>> No feedback yet on the below questions.
> Indeed. I was waiting for opininons from others.
>
>> If there no consensus in the email, I would like to propose this 
>> topic to the 26th Feb TB meeting.
> I gave my opinion below.
> If a consensus cannot be reached, I agree with the request to the techboard.
>
>
>>>> 17/02/2020 08:19, Jerin Jacob:
>>>>> I got initial comments from Ray and Stephen on this RFC[1]. Thanks 
>>>>> for the comments.
>>>>>
>>>>> Is anyone else planning to have an architecture level or API usage 
>>>>> level review or any review of other top-level aspects?
>>>> If we add rte_graph to DPDK, we will have 2 similar libraries.
>>>>
>>>> I already proposed several times to move rte_pipeline in a separate 
>>>> repository for two reasons:
>>>>          1/ it is acting at a higher API layer level
>>> We need to define what is the higher layer API. Is it processing beyond L2?
> My opinion is that any API which is implemented differently for 
> different hardware should be in DPDK.
> Hardware devices can offload protocol processing higher than L2, so L2 
> does not look to be a good limit from my point of view.
>
If you assume the capability of networking hardware will grow, and you want to 
unify different networking hardware with varying capabilities (and also include 
software-only implementations) under one API, then you might well end up 
growing DPDK into the software stack you mention below. Soft implementations of 
complex protocols will require operating system-like support services like 
timers, RCU, various lock-less data structures, deferred work mechanism, 
counter handling frameworks, control plane interfaces, etc. Coupling should 
always be avoided of course, but DPDK would inevitably no longer be a 
pick-and-choose smörgåsbord library - at least as long as the consumer wants to 
utilize this higher-layer functionality.

This would make DPDK more of a packet processing run-time or a special-purpose, 
networking operating system than the "a bunch of Ethernet drivers in user 
space" as it started out as.

I'm not saying that's a bad thing. In fact, I think it sounds like an 
interesting option, although also a very challenging one. From what I can see, 
DPDK has already set out along this route already. If this is a conscious 
decision or not, I don't know. Add to this, if Linux expands further with 
AF_XDP-like features, beyond simply packet I/O, it might not only try to take 
over DPDK's original concerns, but also more of the current ones.

>>> In the context of Graph library, it is a framework, not using any of 
>>> the substem API other than EAL and it is under lib/librte_graph.
>>> Nodes library using graph and other subsystem components such as 
>>> ethdev and it is under lib/lib_node/
>>>
>>>
>>> Another interesting question would what would be an issue in DPDK 
>>> supporting beyond L2. Or higher level protocols?
> Definitely higher than L2 is OK in DPDK as long as it is related to 
> hardware capabilities, not software stack (which can be a DPDK application).
>
>
>>>>          2/ there can be different solutions in this layer
>>> Is there any issue with that?
>>> There is overlap with the distributor library and eventdev as well.
>>> ethdev and SW traffic manager libraries as well. That list goes on.
> I don't know how much it is an issue.
> But I think it shows that at least one implementation is not generic enough.
>
>
>>>> I think 1/ was commonly agreed in the community.
>>>> Now we see one more proof of the reason 2/.
>>>>
>>>> I believe it is time to move rte_pipeline (Packet Framework) in a 
>>>> separate repository, and welcome rte_graph as well in another 
>>>> separate repository.
>>> What would be gain out of this?
> The gain is to be clear about what should be the focus for 
> contributors working on the main DPDK repository.
> What is expected to be maintained, tested, etc.
>
>
>>> My concerns are:
>>> # Like packet-gen, The new code will be filled with unnecessary DPDK 
>>> version checks and unnecessary compatibility issues.
>>> # Anything is not in main dpdk repo, it is a second class citizen.
>>> # Customer has the pain to use two repos and two releases. 
>>> Internally, it can be two different repo but release needs to go 
>>> through one repo.
>>>
>>> If we are focusing ONLY on the driver API then how can DPDK grow 
>>> further? If linux kernel would be thought only have just the kernel 
>>> and networking/storage as different repo it would not have grown up?
> Linux kernel is selecting what can enter in the focus or not.
> And I wonder what is the desire of extending/growing the scope of a library?
>
>
>>> What is the real concern? Maintenance?
>>>
>>>> I think the original DPDK repository should focus on low-level 
>>>> features which offer hardware offloads and optimizations.
>>> The nodes can be vendor-specific to optimize the specific use cases.
>>> As I mentioned in the cover letter,
>>>
>>> "
>>> 2) Based on our experience, NPU HW accelerates are so different than 
>>> one vendor to another vendor. Going forward, We believe, API 
>>> abstraction may not be enough abstract the difference in HW. The 
>>> Vendor-specific nodes can abstract the HW differences and reuse generic the 
>>> nodes as needed.
>>> This would help both the silicon vendors and DPDK end users.
>>> "
>>>
>>> Thoughts from other folks?
>>>
>>>
>>>> Consuming the low-level API in different abstractions, and building 
>>>> applications, should be done on top of dpdk.git.
>
>


Reply via email to