<div dir="ltr">Lcores would be in pinned/isolated threads.<div><br></div><div>At the level data interacts with dpdk it's batched.  There can be multiple batches.   Basically just multiple vectors of data already in structured/aligned for what dpdk wants. </div><div><br></div><div>The SPSC queues are on the Rust side, not dpdk  provided.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 29, 2023 at 2:50 PM Stephen Hemminger <<a href="mailto:stephen@networkplumber.org">stephen@networkplumber.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, 29 Nov 2023 14:21:55 -0800<br>
Chris Ochs <<a href="mailto:chris@ochsnet.com" target="_blank">chris@ochsnet.com</a>> wrote:<br>
<br>
> Trying to get a handle on the best way to integrate with my existing<br>
> architecture.<br>
> <br>
> My main application is in Rust and it's a partitioned/batching flow. It's<br>
> an end server. I basically send type erased streams between partitions<br>
> using SPSC queues. Work scheduling is separate.  Workers basically do work<br>
> stealing of partitions.  The important part is messaging is tied to<br>
> partitions not threads.<br>
> <br>
> So what I think might work best here is I assign a partition per lcore. I<br>
> already have a design where partitions can be designated as network<br>
> partitions, and my regular workers can then ignore these partitions.  With<br>
> dpdk specific workers taking over.  I designed the architecture for use<br>
> with user space networking generally from the start.<br>
> <br>
> A partition in a networking flow consumes streams from other partitions<br>
> like normal. In a dpdk flow what I think this looks like is for each stream<br>
> call into C to transmit.  Streams would be written mbuf aligned so I think<br>
> this is just a single memcpy per stream into dpdk buffers.  And then a<br>
> single call to receive.<br>
> <br>
> Does anything stand out here as problematic?  I read the known issues<br>
> section and nothing there stood out as  problematic.<br>
<br>
Are your lcore's pinned and isolated?<br>
Is your API per packet or batch?<br>
Are these DPDK ring buffers or some other queuing mechanism?<br>
<br>
<br>
</blockquote></div>