Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to run dpdk pktgen using virtio pmd driver #267

Open
ekatamil opened this issue Jun 26, 2024 · 3 comments
Open

Unable to run dpdk pktgen using virtio pmd driver #267

ekatamil opened this issue Jun 26, 2024 · 3 comments

Comments

@ekatamil
Copy link

ekatamil commented Jun 26, 2024

Hi Team,

We are trying to run dpdk pktgen as packet generator for my packet reordering application.
We are using vhost and virtio dpdk pmd driver on our packet_ordering application and dpdk pktgen application respectively.
Although our packet_ordering application runs successfully with vhost driver, dpdk pktgen is not able to recognize virtio pmd driver and it fails with following error

================== Pktgen =========================
#./usr/local/bin/pktgen -l 9-11 -n 4 --log-level 8 --no-pci --socket-mem 1024 --proc-type auto --file-prefix pktgen --vdev 'net_virtio_user0,mac=00:00:00:00:00:01,path=/tmp/vhost-user1.sock' -- -m "[10:11].0"
*** Copyright(c) <2010-2023>, Intel Corporation. All rights reserved.
*** Pktgen created by: Keith Wiles -- >>> Powered by DPDK <<<

EAL: Detected CPU lcores: 12
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: failed to parse device "net_virtio_user0"
EAL: Unable to parse device 'net_virtio_user0,mac=00:00:00:00:00:01,path=/tmp/vhost-user1.sock'

=================Packet Ordering ==========================
[root@lpt-C0JZ314 packet_ordering]# ./build/packet_ordering -l 6-8 -n 4 --socket-mem 1024 --proc-type auto --file-prefix po --vdev 'net_vhost0,iface=/tmp/vhost-user1.sock' -- -p 0x1
EAL: Detected CPU lcores: 12
EAL: Detected NUMA nodes: 1
EAL: Auto-detected process type: PRIMARY
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/po/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
Initializing port 0... done
VHOST_CONFIG: (/tmp/vhost-user1.sock) vhost-user server: socket created, fd: 23
VHOST_CONFIG: (/tmp/vhost-user1.sock) Setting max queue pairs to 1
VHOST_CONFIG: (/tmp/vhost-user1.sock) binding succeeded
Port 0 MAC: 56 48 4f 53 54 00
REORDERAPP: worker_thread() started on lcore 7
REORDERAPP: rx_thread() started on lcore 6
REORDERAPP: send_thread() started on lcore 8

[root@lpt-C0JZ314 Pktgen-DPDK]# ls /tmp/vhost-user1.sock -lh
srwxr-xr-x 1 root root 0 Jun 26 13:07 /tmp/vhost-user1.sock

Why is dpdk pktgen is built with shared libraries while in meson.build file we have set default_library as static ?
[root@lpt-C0JZ314 Pktgen-DPDK]# ldd usr/local/bin/pktgen
linux-vdso.so.1 (0x00007ffecd5eb000)
librte_timer.so.24 => /root/dpdk_libs/lib64/librte_timer.so.24 (0x00007fd52194e000)
librte_ethdev.so.24 => /root/dpdk_libs/lib64/librte_ethdev.so.24 (0x00007fd52162c000)
librte_net.so.24 => /root/dpdk_libs/lib64/librte_net.so.24 (0x00007fd521424000)
librte_mbuf.so.24 => /root/dpdk_libs/lib64/librte_mbuf.so.24 (0x00007fd521218000)
librte_mempool.so.24 => /root/dpdk_libs/lib64/librte_mempool.so.24 (0x00007fd52100d000)
librte_eal.so.24 => /root/dpdk_libs/lib64/librte_eal.so.24 (0x00007fd520cff000)
librte_log.so.24 => /root/dpdk_libs/lib64/librte_log.so.24 (0x00007fd520afa000)
libbsd.so.0 => /lib64/libbsd.so.0 (0x00007fd5208e6000)
libpcap.so.1 => /lib64/libpcap.so.1 (0x00007fd52069b000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd520497000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd520115000)
librte_net_bond.so.24 => /root/dpdk_libs/lib64/librte_net_bond.so.24 (0x00007fd51fef5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd51fcd5000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd51f8ff000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd521b53000)
libnuma.so.1 => /lib64/libnuma.so.1 (0x00007fd51f6f3000)
librte_kvargs.so.24 => /root/dpdk_libs/lib64/librte_kvargs.so.24 (0x00007fd51f4f0000)
librte_telemetry.so.24 => /root/dpdk_libs/lib64/librte_telemetry.so.24 (0x00007fd51f2e6000)
librte_ring.so.24 => /root/dpdk_libs/lib64/librte_ring.so.24 (0x00007fd51f0e2000)
librte_meter.so.24 => /root/dpdk_libs/lib64/librte_meter.so.24 (0x00007fd51eedf000)
libmd.so.0 => /lib64/libmd.so.0 (0x00007fd51ecd0000)
libibverbs.so.1 => /lib64/libibverbs.so.1 (0x00007fd51eab0000)
librte_bus_pci.so.24 => /root/dpdk_libs/lib64/librte_bus_pci.so.24 (0x00007fd51e8a2000)
librte_pci.so.24 => /root/dpdk_libs/lib64/librte_pci.so.24 (0x00007fd51e6a0000)
librte_bus_vdev.so.24 => /root/dpdk_libs/lib64/librte_bus_vdev.so.24 (0x00007fd51e49b000)
librte_sched.so.24 => /root/dpdk_libs/lib64/librte_sched.so.24 (0x00007fd51e288000)
librte_ip_frag.so.24 => /root/dpdk_libs/lib64/librte_ip_frag.so.24 (0x00007fd51e07e000)
librte_hash.so.24 => /root/dpdk_libs/lib64/librte_hash.so.24 (0x00007fd51de62000)
librte_rcu.so.24 => /root/dpdk_libs/lib64/librte_rcu.so.24 (0x00007fd51dc5d000)
libnl-route-3.so.200 => /lib64/libnl-route-3.so.200 (0x00007fd51d9cb000)
libnl-3.so.200 => /lib64/libnl-3.so.200 (0x00007fd51d7a8000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd51d590000)

Expectation
Pktgen application to come up using virtio dpdk pmd driver and should be able to generate traffic.

DPDK Version : v23.11
PKTGEN Version: pktgen-24.03.0

Thanks,
Ekambaram A

@KeithWiles
Copy link
Collaborator

KeithWiles commented Jun 26, 2024

It appears DPDK is not able to parse the --vdev line
EAL: Unable to parse device 'net_virtio_user0,mac=00:00:00:00:00:01,path=/tmp/vhost-user1.sock'

This is not a pktgen problem and I have not use --vdev option a lot. Maybe mac address setting is not correct??

As for pktgen linking to DPDK using dynamic libs I do not know.

@ekatamil
Copy link
Author

ekatamil commented Jul 10, 2024

Hi @KeithWiles,

Thanks for your reply.
I still could not figure out why I was having an issue with pktgen not recognizing vdev command line option when it links to dpdk libraries dynamically.

However I was able to link dpdk libraries statically on ubuntu 22.04(Could not get it working on rocky 8.10 though) by making the following changes in meson.build file at the top directory.

dpdk = dependency('libdpdk', required: true, method: 'pkg-config', static: true)

Will update if there is any further information on this thread.

Thanks,
Ekambaram A

@KeithWiles
Copy link
Collaborator

Some DPDK libs are not directly referenced, which causes the library to be linked into the program. Normally it is because the PMDs are not directly referenced and the app/meson.build file needs to have the PMD included to force it to be linked into the image.

In the app/meson.build look for lines deps += [cc.find_library('rte_net_i40e', dirs: [dpdk_libs_path], required: false)] which force that PMD to be included. Adding a couple lines to force including rte_net_vhost and rte_net_virtio should fix the problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants