DPDK usage discussions
 help / color / mirror / Atom feed
From: "Wiles, Keith" <keith.wiles@intel.com>
To: David Aldrich <David.Aldrich@EMEA.NEC.COM>
Cc: "Pavey, Nicholas" <npavey@akamai.com>, "users@dpdk.org" <users@dpdk.org>
Subject: Re: [dpdk-users] Is DPDK compatible with C++11 threads?
Date: Wed, 9 Nov 2016 21:00:04 +0000	[thread overview]
Message-ID: <E228A101-F432-41AA-B750-9F1160B7284F@intel.com> (raw)
In-Reply-To: <04379c033c964c889dddd2b9918a500b@EUX13SRV1.EU.NEC.COM>


> On Nov 9, 2016, at 2:40 AM, David Aldrich <David.Aldrich@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@akamai.com] 
> Sent: 08 November 2016 17:23
> To: Wiles, Keith <keith.wiles@intel.com>; David Aldrich <David.Aldrich@EMEA.NEC.COM>
> Cc: users@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@intel.com>
> Date: Tuesday, November 8, 2016 at 12:04 PM
> To: David Aldrich <David.Aldrich@EMEA.NEC.COM>
> Cc: "users@dpdk.org" <users@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@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	other threads:[~2016-11-09 21:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-08 13:12 David Aldrich
2016-11-08 17:04 ` Wiles, Keith
2016-11-08 17:23   ` Pavey, Nicholas
2016-11-09  8:40     ` David Aldrich
2016-11-09 21:00       ` Wiles, Keith [this message]
2016-11-10  4:14         ` Anupam Kapoor
2016-11-10 12:49           ` Pavey, Nicholas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E228A101-F432-41AA-B750-9F1160B7284F@intel.com \
    --to=keith.wiles@intel.com \
    --cc=David.Aldrich@EMEA.NEC.COM \
    --cc=npavey@akamai.com \
    --cc=users@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).