[dpdk-users] Is DPDK compatible with C++11 threads?

Wiles, Keith keith.wiles at intel.com
Wed Nov 9 22:00:04 CET 2016


> 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



More information about the users mailing list