如何在 dpdk 18.11 中设置线程名称

How to set thread name in dpdk 18.11

在dpdk 17.05 struct lcore_config是public和pthread_t可以通过lcore_config[lcore_id].thread_id得到 在 18.11 中,struct lcore_config 是私有的,如何为 lcore_id 获取 pthread_t?

问题 - 我无法使用 pthread_setname_np(, "my_thread_name");

设置线程名称

rte_gettid() returns int 但我需要 pthread_t

在 DPDK rte_lcore.h 中 API rte_thread_setname 负责设置备用名称而不是 DPDK 分配的名称。在 Linux DPDK 内部调用 pthread_setname_np.

DPDK 版本:dpdk-stable-18.11.10 [edit-1] 如果您有 glbc > 2.12,则根据 DPDK 代码库设置名 glibc 版本:Ubuntu GLIBC 2.30-0ubuntu2.2

C文件中修改的代码:

        printf("hello from core %u\n", lcore_id);
        snprintf(name, 100, "hello-%d", lcore_id);
                if (rte_thread_setname( pthread_self(), name) == 0)
                                printf(" thread name %s\n", name);

CFLAGS 添加到 Makefile:

CFLAGS += -DALLOW_EXPERIMENTAL_API

或使用 EXTRA_CFLAGS=-DALLOW_EXPERIMENTAL_API make

构建
36986 root      20   0  227916   6996   6024 R 93.8  0.0   0:40.60 helloworld
37004 root      20   0  227916   6996   6024 R 93.8  0.0   0:40.61 lcore-slave-1
37005 root      20   0  227916   6996   6024 R 93.8  0.0   0:40.61 lcore-slave-2
37006 root      20   0  227916   6996   6024 R 93.8  0.0   0:40.61 lcore-slave-3

调用后

15326 root      20   0  153312   7728   5976 T   0.0   0.2   0:03.32 hello-0
15327 root      20   0  153312   7728   5976 T   0.0   0.2   0:00.00 eal-intr-thread
15328 root      20   0  153312   7728   5976 T   0.0   0.2   0:00.00 rte_mp_handle
15329 root      20   0  153312   7728   5976 T   0.0   0.2   0:03.32 hello-1
15330 root      20   0  153312   7728   5976 T   0.0   0.2   0:03.32 hello-2
15331 root      20   0  153312   7728   5976 T   0.0   0.2   0:03.32 hello-3