运行 一个 DPDK 应用程序二进制文件,所有依赖库(在不同机器上编译)在另一台机器上
Running a DPDK application binary with all dependent library (compiled in different machine) on another machine
在一台机器上编译一个带有多个运行时依赖库的DPDK应用程序
二进制文件和库从该机器复制到具有相似规格和环境的另一台机器
运行 参数如下的DPDK应用,但是在rte_eal_init()
期间应用崩溃
App-binary -l 1 -a 0000:02:00.0 -a 0000:03:00.0 -d /opt/upf/lib/ --proc-type=primary --file-prefix=.app_0000:02:00.0
- 这是来自 gnu 调试器崩溃核心文件的回溯跟踪
#0 0x00007faaa0ead337 in raise () from /lib64/libc.so.6
#1 0x00007faaa0eaea28 in abort () from /lib64/libc.so.6
#2 0x00007faaa125104f in __rte_panic () from /opt/upf/lib/librte_eal.so.21
#3 0x00007faa9e228e1c in tailqinitfn_rte_ring_tailq () from /opt/upf/lib/librte_ring.so.21.0
#4 0x00007faaa278a973 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#5 0x00007faaa278f54e in dl_open_worker () from /lib64/ld-linux-x86-64.so.2
#6 0x00007faaa278a784 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#7 0x00007faaa278eb3b in _dl_open () from /lib64/ld-linux-x86-64.so.2
#8 0x00007faaa0c73eeb in dlopen_doit () from /lib64/libdl.so.2
#9 0x00007faaa278a784 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#10 0x00007faaa0c744ed in _dlerror_run () from /lib64/libdl.so.2
#11 0x00007faaa0c73f81 in dlopen@@GLIBC_2.2.5 () from /lib64/libdl.so.2
#12 0x00007faaa125bc55 in eal_plugins_init () from /opt/upf/lib/librte_eal.so.21
#13 0x00007faaa126f2ba in rte_eal_init () from /opt/upf/lib/librte_eal.so.21
#14 0x000000000041414a in Dpdk_LibTask (arg=<optimized out>) at /root/5g_upf/core/service/common/dpdk/dpdk.c:1244
#15 0x00007faaa2566e65 in start_thread () from /lib64/libpthread.so.0
#16 0x00007faaa0f7588d in clone () from /lib64/libc.so.6
更新:
- 主机详细信息:
- i3 8100 3.6GHz 4 核
- 8 GB 内存
- CentOS 7
- gcc 版本 4.8.5 20150623(红帽 4.8.5-44)(GCC)
- GNU ld 版本 2.27-44.base.el7
- DPDK 20.11.0
- 3 个网卡绑定到 DPDK
0000:01:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
0000:07:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
0000:08:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
- 目标机器详细信息:
- i3 8100 3.6GHz 4 核
- 8 GB 内存
- CentOS 7
- gcc 版本 4.8.5 20150623(红帽 4.8.5-44)(GCC)
- GNU ld 版本 2.27-44.base.el7
- DPDK 20.11.0
- 3 个网卡绑定到 DPDK
0000:02:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
0000:03:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
0000:04:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
[基于使用 Sumesh 的实时调试]。
申请背景:
- 该应用程序依赖于 DPDK 库、第 3 方库和 GNU 库。
- 实际开源项目,构建 DPDK 20.11。
- Docker 实例以
docker run
启动,共享 root 权限,并将这些复制到本地文件夹(同一台机器)。
- 将 LD_LIBRARY_PATH 设置为所需的文件夹 DPDK 库依赖性已更正。
导致问题的原因:
- Machine-A 用于构建 DPDK 20.11 库。
- 而不是 运行 docker Machine-A 上的实例,Machine-B 被选为目标机器。
- DPDK 库从 Machine-A 复制到 Machine-B。
- Docker-run用于在Machine-B
中启动应用
如何解决问题:
- 构建时的 DPDK 库具有许多其他库和版本依赖性
- 在目标 (MACHINE-B) 上构建并安装 DPDK,请勿复制。
- 在
docker-run
中共享访问 /usr/lib/lib64
的权限,其中包含 DPDK、第 3 方和 GNU 库。
- 更新 LD_LIBRARY_PATH 以访问正确的文件夹以解决依赖关系。
注:
- 在主机和 Docker 上进行了测试和验证,hello-world 的完整性
- Sumesh 正在更新脚本以反映自定义应用程序的文件夹权限。
在一台机器上编译一个带有多个运行时依赖库的DPDK应用程序
二进制文件和库从该机器复制到具有相似规格和环境的另一台机器
运行 参数如下的DPDK应用,但是在
期间应用崩溃rte_eal_init()
App-binary -l 1 -a 0000:02:00.0 -a 0000:03:00.0 -d /opt/upf/lib/ --proc-type=primary --file-prefix=.app_0000:02:00.0
- 这是来自 gnu 调试器崩溃核心文件的回溯跟踪
#0 0x00007faaa0ead337 in raise () from /lib64/libc.so.6
#1 0x00007faaa0eaea28 in abort () from /lib64/libc.so.6
#2 0x00007faaa125104f in __rte_panic () from /opt/upf/lib/librte_eal.so.21
#3 0x00007faa9e228e1c in tailqinitfn_rte_ring_tailq () from /opt/upf/lib/librte_ring.so.21.0
#4 0x00007faaa278a973 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#5 0x00007faaa278f54e in dl_open_worker () from /lib64/ld-linux-x86-64.so.2
#6 0x00007faaa278a784 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#7 0x00007faaa278eb3b in _dl_open () from /lib64/ld-linux-x86-64.so.2
#8 0x00007faaa0c73eeb in dlopen_doit () from /lib64/libdl.so.2
#9 0x00007faaa278a784 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#10 0x00007faaa0c744ed in _dlerror_run () from /lib64/libdl.so.2
#11 0x00007faaa0c73f81 in dlopen@@GLIBC_2.2.5 () from /lib64/libdl.so.2
#12 0x00007faaa125bc55 in eal_plugins_init () from /opt/upf/lib/librte_eal.so.21
#13 0x00007faaa126f2ba in rte_eal_init () from /opt/upf/lib/librte_eal.so.21
#14 0x000000000041414a in Dpdk_LibTask (arg=<optimized out>) at /root/5g_upf/core/service/common/dpdk/dpdk.c:1244
#15 0x00007faaa2566e65 in start_thread () from /lib64/libpthread.so.0
#16 0x00007faaa0f7588d in clone () from /lib64/libc.so.6
更新:
- 主机详细信息:
- i3 8100 3.6GHz 4 核
- 8 GB 内存
- CentOS 7
- gcc 版本 4.8.5 20150623(红帽 4.8.5-44)(GCC)
- GNU ld 版本 2.27-44.base.el7
- DPDK 20.11.0
- 3 个网卡绑定到 DPDK
0000:01:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e 0000:07:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e 0000:08:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
- 目标机器详细信息:
- i3 8100 3.6GHz 4 核
- 8 GB 内存
- CentOS 7
- gcc 版本 4.8.5 20150623(红帽 4.8.5-44)(GCC)
- GNU ld 版本 2.27-44.base.el7
- DPDK 20.11.0
- 3 个网卡绑定到 DPDK
0000:02:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e 0000:03:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e 0000:04:00.0 '82574L Gigabit Network Connection 10d3' drv=uio_pci_generic unused=e1000e
[基于使用 Sumesh 的实时调试]。
申请背景:
- 该应用程序依赖于 DPDK 库、第 3 方库和 GNU 库。
- 实际开源项目,构建 DPDK 20.11。
- Docker 实例以
docker run
启动,共享 root 权限,并将这些复制到本地文件夹(同一台机器)。 - 将 LD_LIBRARY_PATH 设置为所需的文件夹 DPDK 库依赖性已更正。
导致问题的原因:
- Machine-A 用于构建 DPDK 20.11 库。
- 而不是 运行 docker Machine-A 上的实例,Machine-B 被选为目标机器。
- DPDK 库从 Machine-A 复制到 Machine-B。
- Docker-run用于在Machine-B 中启动应用
如何解决问题:
- 构建时的 DPDK 库具有许多其他库和版本依赖性
- 在目标 (MACHINE-B) 上构建并安装 DPDK,请勿复制。
- 在
docker-run
中共享访问/usr/lib/lib64
的权限,其中包含 DPDK、第 3 方和 GNU 库。 - 更新 LD_LIBRARY_PATH 以访问正确的文件夹以解决依赖关系。
注:
- 在主机和 Docker 上进行了测试和验证,hello-world 的完整性
- Sumesh 正在更新脚本以反映自定义应用程序的文件夹权限。