DPDK usage discussions
 help / color / mirror / Atom feed
* [dpdk-users] DPDK application as a library
@ 2018-09-11 10:49 Amedeo Sapio
  2018-09-11 14:07 ` Wiles, Keith
  0 siblings, 1 reply; 5+ messages in thread
From: Amedeo Sapio @ 2018-09-11 10:49 UTC (permalink / raw)
  To: users

Dear all,
I am writing a program that uses dpdk. I wrote the program based on the
dpdk examples, in particular using the Makefile provided in the examples.
If i compile the program as an APP (as describe here
<https://doc.dpdk.org/guides-18.02/prog_guide/build_app.html>), all goes
well.
However, my code is part of a larger project, for which the use of a
separate makefile causes a lot of troubles.
So I compiled my code as a library, as described in the same page.
Now, the program that calls the functions in the library (to initialize the
EAL) is getting this error:

MBUF: error setting mempool handler
Cannot init mbuf pool

I also made an experiment with the l2fwd example. The example compiled as
an app works correctly. But if I compile it as a library and then I call
the functions in this library from another program, I get:

EAL: Error - exiting with code: 1
  Cause: No Ethernet ports - bye

I have one ethernet port using the igb_uio driver (seen from
dpdk-devbind.py). When I compile my program, I link the following
libraries: dpdk, pthread, dl, numa. DPDK is compiled from source as
described here <https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>.

Thanks for your help,

---
Amedeo

-- 

This message and its contents, including attachments are intended solely 
for the original recipient. If you are not the intended recipient or have 
received this message in error, please notify me immediately and delete 
this message from your computer system. Any unauthorized use or 
distribution is prohibited. Please consider the environment before printing 
this email.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-users] DPDK application as a library
  2018-09-11 10:49 [dpdk-users] DPDK application as a library Amedeo Sapio
@ 2018-09-11 14:07 ` Wiles, Keith
  2018-09-11 14:56   ` Amedeo Sapio
  0 siblings, 1 reply; 5+ messages in thread
From: Wiles, Keith @ 2018-09-11 14:07 UTC (permalink / raw)
  To: Amedeo Sapio; +Cc: users



> On Sep 11, 2018, at 5:49 AM, Amedeo Sapio <amedeo.sapio@kaust.edu.sa> wrote:
> 
> Dear all,
> I am writing a program that uses dpdk. I wrote the program based on the
> dpdk examples, in particular using the Makefile provided in the examples.
> If i compile the program as an APP (as describe here
> <https://doc.dpdk.org/guides-18.02/prog_guide/build_app.html>), all goes
> well.

Sounds like you and this person need to get together here :-)
https://mails.dpdk.org/archives/users/2018-September/003439.html

> However, my code is part of a larger project, for which the use of a
> separate makefile causes a lot of troubles.
> So I compiled my code as a library, as described in the same page.
> Now, the program that calls the functions in the library (to initialize the
> EAL) is getting this error:
> 

Did you call rte_eal_init() first as most of the routines depend on calling this function before you call the other one.

As I explained the other thread, is that DPDK is not libc and you can not just pick the functions you want to use for the most part. Some functions are fairly independent, but not really as work is needed to make sure it has all of the other inits called.

If you want to use DPDK today, the best method is to make sure you initialize DPDK correctly and then you can use parts of it for your needs.

As for the code that interacts with your application it is best to have a directory with just the functions you need to build with DPDK and use these functions as a bridge to/from your code. Using your header files and DPDK header files in the same directory or file can cause a number of build problems, which is why I use this type of method. Some routines in DPDK you can call without any real problems, but sometimes it makes it easier to write inline functions or functions that build most independent of DPDK and your routines. Not sure explained it clearly, but I hope it helps.

BTW, please remove any disclaimers in your email as they do not apply to a public email list.

> MBUF: error setting mempool handler
> Cannot init mbuf pool
> 
> I also made an experiment with the l2fwd example. The example compiled as
> an app works correctly. But if I compile it as a library and then I call
> the functions in this library from another program, I get:
> 
> EAL: Error - exiting with code: 1
>  Cause: No Ethernet ports - bye
> 
> I have one ethernet port using the igb_uio driver (seen from
> dpdk-devbind.py). When I compile my program, I link the following
> libraries: dpdk, pthread, dl, numa. DPDK is compiled from source as
> described here <https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>.
> 
> Thanks for your help,
> 
> ---
> Amedeo
> 
> -- 
> 
> This message and its contents, including attachments are intended solely 
> for the original recipient. If you are not the intended recipient or have 
> received this message in error, please notify me immediately and delete 
> this message from your computer system. Any unauthorized use or 
> distribution is prohibited. Please consider the environment before printing 
> this email.

Regards,
Keith

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-users] DPDK application as a library
  2018-09-11 14:07 ` Wiles, Keith
@ 2018-09-11 14:56   ` Amedeo Sapio
  2018-09-13 15:18     ` Amedeo Sapio
  0 siblings, 1 reply; 5+ messages in thread
From: Amedeo Sapio @ 2018-09-11 14:56 UTC (permalink / raw)
  To: keith.wiles; +Cc: users

Thanks Keith for your answer.
If I understand it correctly, you are suggesting to wrap the code that
needs DPDK in a library and then call the functions in this library from my
code. That is exactly what I did.
I called rte_eal_init() before any other dpdk function. The dpdk code was
tested and worked when compiled as an APP, but the same code did not work
when used as library.

The example with l2fwd is representative of what I am trying to do.
I took the exact same code of the l2fwd example, then:
- renamed the "main" function as "start"
- I added an header file with the signature of the "start" function
- compiled as a libf2wd.a file.
- created a new file with the new main function. This simply calls the
"start" function passing the argc,argv params.
- compiled this new file with "gcc  -l l2fwd -l dpdk -pthread  -l dl -l
numa ..."

When I run it I get:
EAL: Error - exiting with code: 1
Cause: No Ethernet ports - bye

PS: I am sorry about the disclaimer, it is not under my control, it is
inserted automatically by my university mail system.

Amedeo

On Tue, Sep 11, 2018 at 5:07 PM Wiles, Keith <keith.wiles@intel.com> wrote:

>
>
> > On Sep 11, 2018, at 5:49 AM, Amedeo Sapio <amedeo.sapio@kaust.edu.sa>
> wrote:
> >
> > Dear all,
> > I am writing a program that uses dpdk. I wrote the program based on the
> > dpdk examples, in particular using the Makefile provided in the examples.
> > If i compile the program as an APP (as describe here
> > <https://doc.dpdk.org/guides-18.02/prog_guide/build_app.html>), all goes
> > well.
>
> Sounds like you and this person need to get together here :-)
> https://mails.dpdk.org/archives/users/2018-September/003439.html
>
> > However, my code is part of a larger project, for which the use of a
> > separate makefile causes a lot of troubles.
> > So I compiled my code as a library, as described in the same page.
> > Now, the program that calls the functions in the library (to initialize
> the
> > EAL) is getting this error:
> >
>
> Did you call rte_eal_init() first as most of the routines depend on
> calling this function before you call the other one.
>
> As I explained the other thread, is that DPDK is not libc and you can not
> just pick the functions you want to use for the most part. Some functions
> are fairly independent, but not really as work is needed to make sure it
> has all of the other inits called.
>
> If you want to use DPDK today, the best method is to make sure you
> initialize DPDK correctly and then you can use parts of it for your needs.
>
> As for the code that interacts with your application it is best to have a
> directory with just the functions you need to build with DPDK and use these
> functions as a bridge to/from your code. Using your header files and DPDK
> header files in the same directory or file can cause a number of build
> problems, which is why I use this type of method. Some routines in DPDK you
> can call without any real problems, but sometimes it makes it easier to
> write inline functions or functions that build most independent of DPDK and
> your routines. Not sure explained it clearly, but I hope it helps.
>
> BTW, please remove any disclaimers in your email as they do not apply to a
> public email list.
>
> > MBUF: error setting mempool handler
> > Cannot init mbuf pool
> >
> > I also made an experiment with the l2fwd example. The example compiled as
> > an app works correctly. But if I compile it as a library and then I call
> > the functions in this library from another program, I get:
> >
> > EAL: Error - exiting with code: 1
> >  Cause: No Ethernet ports - bye
> >
> > I have one ethernet port using the igb_uio driver (seen from
> > dpdk-devbind.py). When I compile my program, I link the following
> > libraries: dpdk, pthread, dl, numa. DPDK is compiled from source as
> > described here <https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>.
> >
> > Thanks for your help,
> >
> > ---
> > Amedeo
> >
> > --
> >
> > This message and its contents, including attachments are intended solely
> > for the original recipient. If you are not the intended recipient or
> have
> > received this message in error, please notify me immediately and delete
> > this message from your computer system. Any unauthorized use or
> > distribution is prohibited. Please consider the environment before
> printing
> > this email.
>
> Regards,
> Keith
>
>
> --
>
> This message and its contents, including attachments are intended solely
> for the original recipient. If you are not the intended recipient or have
> received this message in error, please notify me immediately and delete
> this message from your computer system. Any unauthorized use or
> distribution is prohibited. Please consider the environment before
> printing
> this email.
>

-- 

This message and its contents, including attachments are intended solely 
for the original recipient. If you are not the intended recipient or have 
received this message in error, please notify me immediately and delete 
this message from your computer system. Any unauthorized use or 
distribution is prohibited. Please consider the environment before printing 
this email.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-users] DPDK application as a library
  2018-09-11 14:56   ` Amedeo Sapio
@ 2018-09-13 15:18     ` Amedeo Sapio
  2018-09-13 15:22       ` Wiles, Keith
  0 siblings, 1 reply; 5+ messages in thread
From: Amedeo Sapio @ 2018-09-13 15:18 UTC (permalink / raw)
  To: keith.wiles; +Cc: users

The problem here was that DPDK libraries should be linked with the
'--whole-archive' option. All the credit goes to the guy that answered on stack
overflow
<https://stackoverflow.com/questions/52293444/how-to-compile-a-dpdk-application-as-a-library>
.
I did not find this information in the documentation. Maybe it should be
added on this page <https://doc.dpdk.org/guides/prog_guide/build_app.html>.

---
Amedeo


On Tue, Sep 11, 2018 at 5:56 PM Amedeo Sapio <amedeo.sapio@kaust.edu.sa>
wrote:

> Thanks Keith for your answer.
> If I understand it correctly, you are suggesting to wrap the code that
> needs DPDK in a library and then call the functions in this library from my
> code. That is exactly what I did.
> I called rte_eal_init() before any other dpdk function. The dpdk code was
> tested and worked when compiled as an APP, but the same code did not work
> when used as library.
>
> The example with l2fwd is representative of what I am trying to do.
> I took the exact same code of the l2fwd example, then:
> - renamed the "main" function as "start"
> - I added an header file with the signature of the "start" function
> - compiled as a libf2wd.a file.
> - created a new file with the new main function. This simply calls the
> "start" function passing the argc,argv params.
> - compiled this new file with "gcc  -l l2fwd -l dpdk -pthread  -l dl -l
> numa ..."
>
> When I run it I get:
> EAL: Error - exiting with code: 1
> Cause: No Ethernet ports - bye
>
> PS: I am sorry about the disclaimer, it is not under my control, it is
> inserted automatically by my university mail system.
>
> Amedeo
>
> On Tue, Sep 11, 2018 at 5:07 PM Wiles, Keith <keith.wiles@intel.com>
> wrote:
>
>>
>>
>> > On Sep 11, 2018, at 5:49 AM, Amedeo Sapio <amedeo.sapio@kaust.edu.sa>
>> wrote:
>> >
>> > Dear all,
>> > I am writing a program that uses dpdk. I wrote the program based on the
>> > dpdk examples, in particular using the Makefile provided in the
>> examples.
>> > If i compile the program as an APP (as describe here
>> > <https://doc.dpdk.org/guides-18.02/prog_guide/build_app.html>), all
>> goes
>> > well.
>>
>> Sounds like you and this person need to get together here :-)
>> https://mails.dpdk.org/archives/users/2018-September/003439.html
>>
>> > However, my code is part of a larger project, for which the use of a
>> > separate makefile causes a lot of troubles.
>> > So I compiled my code as a library, as described in the same page.
>> > Now, the program that calls the functions in the library (to initialize
>> the
>> > EAL) is getting this error:
>> >
>>
>> Did you call rte_eal_init() first as most of the routines depend on
>> calling this function before you call the other one.
>>
>> As I explained the other thread, is that DPDK is not libc and you can not
>> just pick the functions you want to use for the most part. Some functions
>> are fairly independent, but not really as work is needed to make sure it
>> has all of the other inits called.
>>
>> If you want to use DPDK today, the best method is to make sure you
>> initialize DPDK correctly and then you can use parts of it for your needs.
>>
>> As for the code that interacts with your application it is best to have a
>> directory with just the functions you need to build with DPDK and use these
>> functions as a bridge to/from your code. Using your header files and DPDK
>> header files in the same directory or file can cause a number of build
>> problems, which is why I use this type of method. Some routines in DPDK you
>> can call without any real problems, but sometimes it makes it easier to
>> write inline functions or functions that build most independent of DPDK and
>> your routines. Not sure explained it clearly, but I hope it helps.
>>
>> BTW, please remove any disclaimers in your email as they do not apply to
>> a public email list.
>>
>> > MBUF: error setting mempool handler
>> > Cannot init mbuf pool
>> >
>> > I also made an experiment with the l2fwd example. The example compiled
>> as
>> > an app works correctly. But if I compile it as a library and then I call
>> > the functions in this library from another program, I get:
>> >
>> > EAL: Error - exiting with code: 1
>> >  Cause: No Ethernet ports - bye
>> >
>> > I have one ethernet port using the igb_uio driver (seen from
>> > dpdk-devbind.py). When I compile my program, I link the following
>> > libraries: dpdk, pthread, dl, numa. DPDK is compiled from source as
>> > described here <https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>.
>> >
>> > Thanks for your help,
>> >
>> > ---
>> > Amedeo
>> >
>> > --
>> >
>> > This message and its contents, including attachments are intended
>> solely
>> > for the original recipient. If you are not the intended recipient or
>> have
>> > received this message in error, please notify me immediately and delete
>> > this message from your computer system. Any unauthorized use or
>> > distribution is prohibited. Please consider the environment before
>> printing
>> > this email.
>>
>> Regards,
>> Keith
>>
>>
>> --
>>
>> This message and its contents, including attachments are intended solely
>> for the original recipient. If you are not the intended recipient or have
>> received this message in error, please notify me immediately and delete
>> this message from your computer system. Any unauthorized use or
>> distribution is prohibited. Please consider the environment before
>> printing
>> this email.
>>
>

-- 

This message and its contents, including attachments are intended solely 
for the original recipient. If you are not the intended recipient or have 
received this message in error, please notify me immediately and delete 
this message from your computer system. Any unauthorized use or 
distribution is prohibited. Please consider the environment before printing 
this email.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-users] DPDK application as a library
  2018-09-13 15:18     ` Amedeo Sapio
@ 2018-09-13 15:22       ` Wiles, Keith
  0 siblings, 0 replies; 5+ messages in thread
From: Wiles, Keith @ 2018-09-13 15:22 UTC (permalink / raw)
  To: Amedeo Sapio; +Cc: users



> On Sep 13, 2018, at 10:18 AM, Amedeo Sapio <amedeo.sapio@kaust.edu.sa> wrote:
> 
> The problem here was that DPDK libraries should be linked with the '--whole-archive' option. All the credit goes to the guy that answered on stack overflow. 
> I did not find this information in the documentation. Maybe it should be added on this page.

Not sure it is covered in other parts of the Doc, but here would be a thing too.

We do like patches to the docs and it would be great if you would think about sending one in to fix it.

> 
> ---
> Amedeo
> 
> 
> On Tue, Sep 11, 2018 at 5:56 PM Amedeo Sapio <amedeo.sapio@kaust.edu.sa> wrote:
> Thanks Keith for your answer. 
> If I understand it correctly, you are suggesting to wrap the code that needs DPDK in a library and then call the functions in this library from my code. That is exactly what I did. 
> I called rte_eal_init() before any other dpdk function. The dpdk code was tested and worked when compiled as an APP, but the same code did not work when used as library. 
> 
> The example with l2fwd is representative of what I am trying to do. 
> I took the exact same code of the l2fwd example, then: 
> - renamed the "main" function as "start"
> - I added an header file with the signature of the "start" function 
> - compiled as a libf2wd.a file. 
> - created a new file with the new main function. This simply calls the "start" function passing the argc,argv params. 
> - compiled this new file with "gcc  -l l2fwd -l dpdk -pthread  -l dl -l numa ..."
> 
> When I run it I get:
> EAL: Error - exiting with code: 1
> Cause: No Ethernet ports - bye
> 
> PS: I am sorry about the disclaimer, it is not under my control, it is inserted automatically by my university mail system. 
> 
> Amedeo
> 
> On Tue, Sep 11, 2018 at 5:07 PM Wiles, Keith <keith.wiles@intel.com> wrote:
> 
> 
> > On Sep 11, 2018, at 5:49 AM, Amedeo Sapio <amedeo.sapio@kaust.edu.sa> wrote:
> > 
> > Dear all,
> > I am writing a program that uses dpdk. I wrote the program based on the
> > dpdk examples, in particular using the Makefile provided in the examples.
> > If i compile the program as an APP (as describe here
> > <https://doc.dpdk.org/guides-18.02/prog_guide/build_app.html>), all goes
> > well.
> 
> Sounds like you and this person need to get together here :-)
> https://mails.dpdk.org/archives/users/2018-September/003439.html
> 
> > However, my code is part of a larger project, for which the use of a
> > separate makefile causes a lot of troubles.
> > So I compiled my code as a library, as described in the same page.
> > Now, the program that calls the functions in the library (to initialize the
> > EAL) is getting this error:
> > 
> 
> Did you call rte_eal_init() first as most of the routines depend on calling this function before you call the other one.
> 
> As I explained the other thread, is that DPDK is not libc and you can not just pick the functions you want to use for the most part. Some functions are fairly independent, but not really as work is needed to make sure it has all of the other inits called.
> 
> If you want to use DPDK today, the best method is to make sure you initialize DPDK correctly and then you can use parts of it for your needs.
> 
> As for the code that interacts with your application it is best to have a directory with just the functions you need to build with DPDK and use these functions as a bridge to/from your code. Using your header files and DPDK header files in the same directory or file can cause a number of build problems, which is why I use this type of method. Some routines in DPDK you can call without any real problems, but sometimes it makes it easier to write inline functions or functions that build most independent of DPDK and your routines. Not sure explained it clearly, but I hope it helps.
> 
> BTW, please remove any disclaimers in your email as they do not apply to a public email list.
> 
> > MBUF: error setting mempool handler
> > Cannot init mbuf pool
> > 
> > I also made an experiment with the l2fwd example. The example compiled as
> > an app works correctly. But if I compile it as a library and then I call
> > the functions in this library from another program, I get:
> > 
> > EAL: Error - exiting with code: 1
> >  Cause: No Ethernet ports - bye
> > 
> > I have one ethernet port using the igb_uio driver (seen from
> > dpdk-devbind.py). When I compile my program, I link the following
> > libraries: dpdk, pthread, dl, numa. DPDK is compiled from source as
> > described here <https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html>.
> > 
> > Thanks for your help,
> > 
> > ---
> > Amedeo
> > 
> > -- 
> > 
> > This message and its contents, including attachments are intended solely 
> > for the original recipient. If you are not the intended recipient or have 
> > received this message in error, please notify me immediately and delete 
> > this message from your computer system. Any unauthorized use or 
> > distribution is prohibited. Please consider the environment before printing 
> > this email.
> 
> Regards,
> Keith
> 
> 
> -- 
> 
> This message and its contents, including attachments are intended solely 
> for the original recipient. If you are not the intended recipient or have 
> received this message in error, please notify me immediately and delete 
> this message from your computer system. Any unauthorized use or 
> distribution is prohibited. Please consider the environment before printing 
> this email.
> 
> This message and its contents, including attachments are intended solely for the original recipient. If you are not the intended recipient or have received this message in error, please notify me immediately and delete this message from your computer system. Any unauthorized use or distribution is prohibited. Please consider the environment before printing this email.

Regards,
Keith

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-09-13 15:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-11 10:49 [dpdk-users] DPDK application as a library Amedeo Sapio
2018-09-11 14:07 ` Wiles, Keith
2018-09-11 14:56   ` Amedeo Sapio
2018-09-13 15:18     ` Amedeo Sapio
2018-09-13 15:22       ` Wiles, Keith

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).