运行 一个 DPDK 应用程序二进制文件,所有依赖库(在不同机器上编译)在另一台机器上

Running a DPDK application binary with all dependent library (compiled in different machine) on another machine

 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 
    #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

更新:

[基于使用 Sumesh 的实时调试]。

申请背景:

  1. 该应用程序依赖于 DPDK 库、第 3 方库和 GNU 库。
  2. 实际开源项目,构建 DPDK 20.11。
  3. Docker 实例以 docker run 启动,共享 root 权限,并将这些复制到本地文件夹(同一台机器)。
  4. 将 LD_LIBRARY_PATH 设置为所需的文件夹 DPDK 库依赖性已更正。

导致问题的原因:

  1. Machine-A 用于构建 DPDK 20.11 库。
  2. 而不是 运行 docker Machine-A 上的实例,Machine-B 被选为目标机器。
  3. DPDK 库从 Machine-A 复制到 Machine-B。
  4. Docker-run用于在Machine-B
  5. 中启动应用

如何解决问题:

  1. 构建时的 DPDK 库具有许多其他库和版本依赖性
  2. 在目标 (MACHINE-B) 上构建并安装 DPDK,请勿复制。
  3. docker-run 中共享访问 /usr/lib/lib64 的权限,其中包含 DPDK、第 3 方和 GNU 库。
  4. 更新 LD_LIBRARY_PATH 以访问正确的文件夹以解决依赖关系。

注:

  1. 在主机和 Docker 上进行了测试和验证,hello-world 的完整性
  2. Sumesh 正在更新脚本以反映自定义应用程序的文件夹权限。