DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Alipour, Mehrdad" <malipour@ciena.com>
To: David Marchand <david.marchand@redhat.com>,
	Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: RE: [**EXTERNAL**] Re: rte_mempool_create fails with --no-huge
Date: Thu, 5 Dec 2024 21:28:21 +0000	[thread overview]
Message-ID: <DM6PR04MB6761C3B323654A7414D8ED49C4302@DM6PR04MB6761.namprd04.prod.outlook.com> (raw)
In-Reply-To: <CAJFAV8zMLJodYvLW+GLkUfLOG4e1uCciHjP3bVMV9FDPdfWHpA@mail.gmail.com>

Hello David/Dmitry,

After adding -d <path_of_drivers>, I can now see all the pmd shared libs loading fine and rte_mempool_create works with --no-huge.

Thanks a lot for your support!

Regards,
Mehrdad

-----Original Message-----
From: David Marchand <david.marchand@redhat.com> 
Sent: December 5, 2024 3:30 AM
To: Alipour, Mehrdad <malipour@ciena.com>
Cc: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>; dev@dpdk.org
Subject: Re: [**EXTERNAL**] Re: rte_mempool_create fails with --no-huge

Hello,

On Thu, Dec 5, 2024 at 12:05 AM Alipour, Mehrdad <malipour@ciena.com> wrote:
>
> Hi Dmitry,
>
> Your observation is good!
> But I have the /usr/lib/dpdk/pmds-24.0 in the LD_LIBRARY_PATH but since the host does not have a match glibc, I have to run it with ld-linux-x86-64.so.2 specifying LD_LIBRARY_PATH with equivalent --library-path.

"the host does not have a match glibc"
Could you clarify?

>
> Here is the entire cmd I use to run testpmd:
>
> sudo /lib/ld-linux-x86-64.so.2 --library-path 
> /lib:/usr/lib:/usr/lib/dpdk:/usr/lib/dpdk/pmds-24.0:/ciena/lib 
> /usr/bin/dpdk-testpmd -c 000F -n 2 --log-level=eal,8 --no-huge -m 4095 
> --no-pci -- -i --nb-cores=2 --total-num-mbufs=2048
>
> Despite the /lib/dpdk/pmds-24.0 libs being visible, the rte_eal_init does not load any of these shared libs while it does when I run it inside the VM.

/lib ? or /usr/lib ?
Do you have a symlink between those directories?
Please make sure those paths you listed above do contain DPDK drivers.

> Would appreciate if you can think of any reasons rte_eal_init does not trigger loading those shared libs in the host run instance.

About the drivers discovery mechanism: by default, dpdk looks for drivers in the RTE_EAL_PMD_PATH directory (this path is constructed in config/meson.build).
You can find the value in your build env:
$ grep RTE_EAL_PMD_PATH build-mini/rte_build_config.h #define RTE_EAL_PMD_PATH "/usr/local/lib64/dpdk/pmds-25.1"

This driver "discovery" is done regardless of the value of LD_LIBRARY_PATH.

But still, (and this could be a bit confusing), loading a driver requires that the LD_LIBRARY_PATH gives access to other DPDK shared libraries.

A quick check for you, you can try to strace the dpdk process (with strace -f -e trace=file).
This is a bit verbose, but here is an example with a mini build of mine.
In my case, DPDK is not installed, so I had to set a -d option, but if you installed DPDK on the host, no need for this option.

$ LD_LIBRARY_PATH=build-mini/lib strace -f -e trace=file build-mini/app/dpdk-testpmd -c 3 --no-huge -m 40 -d build-mini/drivers -a 0:0.0 --vdev net_null1 --vdev net_null2 --log-level=lib.eal:debug
-- --no-mlockall --total-num-mbufs=2048 -ia ...
EAL: Detected shared linkage of DPDK
newfstatat(AT_FDCWD, "/usr/local/lib64/dpdk/pmds-25.1",
0x7fff01e70590, 0) = -1 ENOENT (No such file or directory) ^^ DPDK tries the default path, first.

newfstatat(AT_FDCWD, "build-mini/drivers", {st_mode=S_IFDIR|0755, st_size=8192, ...}, 0) = 0 ^^ Then it tries the path I passed via the -d option.

openat(AT_FDCWD, "build-mini/drivers",
O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3 newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=8192, ...}, AT_EMPTY_PATH) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_pci.so",
{st_mode=S_IFREG|0755, st_size=227744, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_vdev.so",
{st_mode=S_IFREG|0755, st_size=62728, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_net_vhost.so",
{st_mode=S_IFREG|0755, st_size=217048, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_pci.so.25.1",
{st_mode=S_IFREG|0755, st_size=227744, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_net_null.so.25.1",
{st_mode=S_IFREG|0755, st_size=378448, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_platform.so.25.1",
{st_mode=S_IFREG|0755, st_size=60888, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_platform.so",
{st_mode=S_IFREG|0755, st_size=60888, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_net_null.so",
{st_mode=S_IFREG|0755, st_size=378448, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_net_virtio.so",
{st_mode=S_IFREG|0755, st_size=1268888, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_mempool_ring.so",
{st_mode=S_IFREG|0755, st_size=75880, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_vdev.so.25.1",
{st_mode=S_IFREG|0755, st_size=62728, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_mempool_ring.so.25.1",
{st_mode=S_IFREG|0755, st_size=75880, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_net_vhost.so.25.1",
{st_mode=S_IFREG|0755, st_size=217048, ...}, 0) = 0 newfstatat(AT_FDCWD, "build-mini/drivers/librte_net_virtio.so.25.1",
{st_mode=S_IFREG|0755, st_size=1268888, ...}, 0) = 0 ^^ And it listed all those drivers accordingly.
...

Now that the driver listing is done, DPDK loads each driver, example with the first .so:
...
newfstatat(AT_FDCWD, "build-mini/drivers/librte_bus_pci.so",
{st_mode=S_IFREG|0755, st_size=227744, ...}, 0) = 0
EAL: open shared lib build-mini/drivers/librte_bus_pci.so
getcwd("/home/dmarchan/git/pub/dpdk.org/main", 1024) = 37 readlink("/home/dmarchan/git/pub/dpdk.org/main/build-mini",
0x7fff01e70140, 1023) = -1 EINVAL (Invalid argument) readlink("/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers",
0x7fff01e70140, 1023) = -1 EINVAL (Invalid argument) readlink("/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers/librte_bus_pci.so",
"librte_bus_pci.so.25", 1023) = 20
readlink("/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers/librte_bus_pci.so.25",
"librte_bus_pci.so.25.1", 1023) = 22
readlink("/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers/librte_bus_pci.so.25.1",
0x7fff01e70140, 1023) = -1 EINVAL (Invalid argument) newfstatat(AT_FDCWD, "/", {st_mode=S_IFDIR|0555, st_size=235, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home", {st_mode=S_IFDIR|0755, st_size=59, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan", {st_mode=S_IFDIR|0711, st_size=12288, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git", {st_mode=S_IFDIR|0775, st_size=27, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git/pub", {st_mode=S_IFDIR|0775, st_size=4096, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git/pub/dpdk.org",
{st_mode=S_IFDIR|0775, st_size=4096, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git/pub/dpdk.org/main",
{st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git/pub/dpdk.org/main/build-mini",
{st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers",
{st_mode=S_IFDIR|0755, st_size=8192, ...}, 0) = 0 newfstatat(AT_FDCWD, "/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers/librte_bus_pci.so.25.1",
{st_mode=S_IFREG|0755, st_size=227744, ...}, 0) = 0 openat(AT_FDCWD, "/home/dmarchan/git/pub/dpdk.org/main/build-mini/drivers/librte_bus_pci.so.25.1",
O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0755, st_size=227744, ...},
AT_EMPTY_PATH) = 0
openat(AT_FDCWD,
"build-mini/lib/glibc-hwcaps/x86-64-v4/librte_pci.so.25",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "build-mini/lib/glibc-hwcaps/x86-64-v3/librte_pci.so.25",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "build-mini/lib/glibc-hwcaps/x86-64-v2/librte_pci.so.25",
O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "build-mini/lib/librte_pci.so.25", O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, "", {st_mode=S_IFREG|0755, st_size=23224, ...}, AT_EMPTY_PATH) = 0 getcwd("/home/dmarchan/git/pub/dpdk.org/main", 128) = 37
EAL: Registered [pci] bus.
EAL: bus.pci log level changed from disabled to notice ...

Hope it helps.


--
David Marchand


  reply	other threads:[~2024-12-05 21:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-03 19:54 Alipour, Mehrdad
2024-12-04 20:51 ` Dmitry Kozlyuk
2024-12-04 23:05   ` [**EXTERNAL**] " Alipour, Mehrdad
2024-12-05  8:30     ` David Marchand
2024-12-05 21:28       ` Alipour, Mehrdad [this message]
2024-12-06  7:38         ` David Marchand

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=DM6PR04MB6761C3B323654A7414D8ED49C4302@DM6PR04MB6761.namprd04.prod.outlook.com \
    --to=malipour@ciena.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    /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).