> On Nov 9, 2016, at 2:40 AM, David Aldrich <David.Aldrich at EMEA.NEC.COM> 
> wrote:
> 
> Hi Nick and Keith
>  
> Thank you both for your replies, they were very helpful.
>  
> Referring again to the helloworld example, we see that multiple threads are 
> launched:
>  
>  RTE_LCORE_FOREACH_SLAVE(lcore_id)
>  {
>     rte_eal_remote_launch(lcore_hello, NULL, lcore_id);
>  }
>  
> In our case, where our application is running C++11 threads, would I launch 
> one dpdk thread for the dpdk process and launch my other threads as C++11 
> threads as before?
>  
> One of those C++11 threads will process my network data.  Will the dpdk?s 
> locks and shared memory mechanisms allow this?

Each of the lcores will get one pthread and that pthread expects to be the main 
one for data polling, but it does not need to be. I assume you can use the 
launch command in DPDK and then your C++11 application can create its own 
threads. The spinlocks in DPDK should work without any issues as long as you 
use the same locks everywhere.

I have before launched a pthread to a given core using the DPDK APIs then 
created more pthreads on that same core for other purposes. Remember the 
standard way DPDK works is the pthread launched expects to poll the port(s) and 
never stop from your application. This means you would need to yield() the main 
polling loop to allow the other threads to run unless you are using priority 
and some type of interrupt or signal.

Also look at one of the DPDK examples as it uses a lthread on top of pthreads 
and it may give you some ideas as to how multiple threads can work. I am trying 
to remember which example and my dev machine is down at this time, but just 
search for lthread.

>  
> I realise that I am demonstrating a lack of understanding of the basics of 
> how dpdk works, but I am just starting to understand it.
>  
> With best regards
>  
> David
>  
> From: Pavey, Nicholas [mailto:npavey at akamai.com] 
> Sent: 08 November 2016 17:23
> To: Wiles, Keith <keith.wiles at intel.com>; David Aldrich <David.Aldrich at 
> EMEA.NEC.COM>
> Cc: users at dpdk.org
> Subject: Re: [dpdk-users] Is DPDK compatible with C++11 threads?
>  
> I?ve built the DPDK along with code in both C and C++. It works fine as long 
> as you get the linkage between the languages correct and make sure that you 
> don?t pass C++ headers into files compiled with the C compiler.
>  
> I did try building the DPDK itself with the ?g++? compiler (v4.8.4, Ubuntu 
> 14.04, 64bit), and I wasn?t able to get that working out of the box. I got 
> hundreds of warnings, but I didn?t take the time to debug it ? it?s possible 
> that a few point fixes in the build system / DPDK code might yield a clean 
> compile.
>  
> Thanks,
>  
>  
> Nick
>  
> From: "Wiles, Keith" <keith.wiles at intel.com>
> Date: Tuesday, November 8, 2016 at 12:04 PM
> To: David Aldrich <David.Aldrich at EMEA.NEC.COM>
> Cc: "users at dpdk.org" <users at dpdk.org>
> Subject: Re: [dpdk-users] Is DPDK compatible with C++11 threads?
>  
>  
> On Nov 8, 2016, at 5:12 AM, David Aldrich <David.Aldrich at EMEA.NEC.COM> 
> wrote:
> Hi
> As a beginner with DPDK, I want to consider how we can convert an existing 
> Linux application from using the kernel network stack to using DPDK.
> This existing app is multi-threaded, using the C++11 thread, mutex etc. 
> classes.  We assign threads to cores by calling pthread_setaffinity_np().
> I have looked at the DPDK helloworld application and see that it launches 
> threads using the DPDK API:
>                /* call lcore_hello() on every slave lcore */
>                RTE_LCORE_FOREACH_SLAVE(lcore_id) {
>                               rte_eal_remote_launch(lcore_hello, NULL, 
> lcore_id);
>                }
> If we use DPDK, can we retain our existing C++11 threads or are we obliged to 
> use the DPDK threading APIs exclusively?
>  
> You should be able to use the standard C++11 threads I believe, in DPDK we 
> are just using pthreads and set affinity to lock a thread to a core. You can 
> still use pthreads in your application.
>  
> Perhaps a more basic question is applicable: is DPDK compatible with C++?
>  
> I believe building DPDK with C++ code does work,  but I have not tried it 
> myself.
>  
> Best regards
> David
> Best regards
> David
>  
> Regards,
> Keith
>  
>  
>  
> 
> Click here to report this email as spam.
> 

Regards,
Keith

Reply via email to