Hi Stephen,
I added the fib library, but I now see there are many more dpdk libraries I 
need to add.  Is this typically the case with the example files working with 
primary DPDK application?

I am using meson and ninja to build the examples, but I don't know how to know 
the library dependencies.

How do I learn ahead of building my Application as to what extra libraries I 
need to include for the DPDK example to work?

I am doing incremental build-test-find_missing_library.

So far, I needed to add these: -lrte_fib -lrte_rib -lrte_stack -lrte_member 
-lrte_efd

Thanks,
Ed

-----Original Message-----
From: Stephen Hemminger <step...@networkplumber.org> 
Sent: Wednesday, March 19, 2025 4:24 PM
To: Lombardo, Ed <ed.lomba...@netscout.com>
Cc: users@dpdk.org
Subject: Re: tailqs issue

External Email: This message originated outside of NETSCOUT. Do not click links 
or open attachments unless you recognize the sender and know the content is 
safe.

On Wed, 19 Mar 2025 17:50:46 +0000
"Lombardo, Ed" <ed.lomba...@netscout.com> wrote:

> Hi,
> My goal is to test DPDK applications running on the same server as a primary 
> process and secondary process.
> When I execute two dpdk-simple-mp processes, one as primary and other as 
> secondary, I see them both startup with no issues.
> 
> # ./dpdk-simple_mp -c 0x2 -n 4 --legacy-mem --proc-type primary -- # 
> ./dpdk-simple_mp -c 0x8 -n 4 --legacy-mem --proc-type secondary --
> 
> 
> Now when I test our DPDK application (as primary) and same dpdk-simple-mp (as 
> secondary) I get error "EAL: Cannot initialize tailq: RTE_FIB).
>          EAL args: MyApp, -l 25,26,27,28 -n 4 -socket-mem=2048, 
> --legacy-mem -no-telemetry -proc_type=primary
> 
>          # ./dpdk-simple_mp -l 24 -n 4 --legacy-mem --proc-type 
> secondary --
> 
> 
> When I use gdb I see that t->head is 0x0 in eal_common_tailqs.c Line 148.
> (gdb) p *t
> $40 = {head = 0x0, next = {tqe_next = 0x1c68c40 <rte_fib6_tailq>, tqe_prev = 
> 0x1c67108 <rte_swx_ctl_pipeline_tailq+8>},
>   name = "RTE_FIB", '\000' <repeats 24 times>}
> 
> I created 2 - 1G hugepages per CPU socket for each test case listed above.
> 
> [root@localhost ~]# /opt/dpdk/dpdk-hugepages.py -s Node Pages Size 
> Total
> 0    2     1Gb    2Gb
> 1    2     1Gb    2Gb
> 
> 
> The dpdk-simple_mp execution output is shown below:
> [root@localhost ~]# ./dpdk-simple_mp -l 24 -n 4 --legacy-mem 
> --huge-dir /dev/mnt/huge --proc-type secondary --
> EAL: Detected CPU lcores: 128
> EAL: Detected NUMA nodes: 2
> EAL: Static memory layout is selected, amount of reserved memory can 
> be adjusted with -m or --socket-mem
> EAL: Detected static linkage of DPDK
> EAL: Multi-process socket 
> /var/run/dpdk/rte/mp_socket_18349_8160ff395b1

> EAL: Selected IOVA mode 'PA'
> EAL: WARNING: Address Space Layout Randomization (ASLR) is enabled in the 
> kernel.
> EAL:    This may cause issues with mapping memory into secondary processes
> EAL: Cannot initialize tailq: RTE_FIB
> Tailq 0: qname:<RTE_DIST_BURST>, tqh_first:(nil), tqh_last:0x100004490 
> Tailq 1: qname:<RTE_DISTRIBUTOR>, tqh_first:(nil), 
> tqh_last:0x1000044c0 Tailq 2: qname:<RTE_REORDER>, tqh_first:(nil), 
> tqh_last:0x1000044f0 Tailq 3: qname:<RTE_IPSEC_SAD>, tqh_first:(nil), 
> tqh_last:0x100004520 Tailq 4: qname:<RTE_SWX_IPSEC>, tqh_first:(nil), 
> tqh_last:0x100004550 Tailq 5: qname:<RTE_SWX_PIPELINE>, 
> tqh_first:(nil), tqh_last:0x100004580 Tailq 6: 
> qname:<RTE_SWX_CTL_PIPELINE>, tqh_first:(nil), tqh_last:0x1000045b0 
> Tailq 7: qname:<RTE_HASH>, tqh_first:0x1bfd9f140, tqh_last:0x1bf6f4240 
> Tailq 8: qname:<RTE_FBK_HASH>, tqh_first:(nil), tqh_last:0x100004610 
> Tailq 9: qname:<RTE_THASH>, tqh_first:(nil), tqh_last:0x100004640 
> Tailq 10: qname:<RTE_LPM>, tqh_first:(nil), tqh_last:0x100004670 Tailq 
> 11: qname:<RTE_LPM6>, tqh_first:(nil), tqh_last:0x1000046a0 Tailq 12: 
> qname:<RTE_ACL>, tqh_first:(nil), tqh_last:0x1000046d0 Tailq 13: 
> qname:<RTE_MEMPOOL>, tqh_first:0x1bf282000, tqh_last:0x1bf282000 Tailq 
> 14: qname:<RTE_RING>, tqh_first:0x1bfdc79c0, tqh_last:0x14f261ac0 
> Tailq 15: qname:<RTE_MBUF_DYNFIELD>, tqh_first:0x14f871680, 
> tqh_last:0x14f870cc0 Tailq 16: qname:<RTE_MBUF_DYNFLAG>, 
> tqh_first:0x14f871080, tqh_last:0x14f871080 Tailq 17: 
> qname:<UIO_RESOURCE_LIST>, tqh_first:0x1bfffce00, tqh_last:0x1bf939e40 
> Tailq 18: qname:<VFIO_RESOURCE_LIST>, tqh_first:(nil), 
> tqh_last:0x1000047f0 Tailq 19: qname:<>, tqh_first:(nil), 
> tqh_last:(nil) Tailq 20: qname:<>, tqh_first:(nil), tqh_last:(nil) 
> Tailq 21: qname:<>, tqh_first:(nil), tqh_last:(nil) Tailq 22: 
> qname:<>, tqh_first:(nil), tqh_last:(nil) Tailq 23: qname:<>, 
> tqh_first:(nil), tqh_last:(nil) Tailq 24: qname:<>, tqh_first:(nil), 
> tqh_last:(nil) Tailq 25: qname:<>, tqh_first:(nil), tqh_last:(nil) 
> Tailq 26: qname:<>, tqh_first:(nil), tqh_last:(nil) Tailq 27: 
> qname:<>, tqh_first:(nil), tqh_last:(nil) Tailq 28: qname:<>, 
> tqh_first:(nil), tqh_last:(nil) Tailq 29: qname:<>, tqh_first:(nil), 
> tqh_last:(nil) Tailq 30: qname:<>, tqh_first:(nil), tqh_last:(nil) 
> Tailq 31: qname:<>, tqh_first:(nil), tqh_last:(nil)
> EAL: Cannot init tail queues for objects
> EAL: Error - exiting with code: 1
> Cannot init EAL
> 
> How do I resolve this issue?
> 
> Thanks,
> Ed

The problem is that the primary process has not linked in the fib library.
The primary process is the only one that can register tailq's at initialization.


Reply via email to