dpdk version: 18.11 Ovs-dpdk runs as openvswitch account on the openstack environment. Use the root account to run another --proc-type=secondary program, such as dpdk-pdump or helloword with parameter --proc-type=secondary , and it will report an Err: Cannot open '/var/run/dpdk/rte/config' for rte_mem_config.
Check the source code eal.c: int eal_create_runtime_dir(void) { const char *directory = default_runtime_dir; const char *xdg_runtime_dir = getenv("XDG_RUNTIME_DIR"); const char *fallback = "/tmp"; char tmp[PATH_MAX]; int ret; if (getuid() != 0) { /* try XDG path first, fall back to /tmp */ if (xdg_runtime_dir != NULL) directory = xdg_runtime_dir; else directory = fallback; } /* create DPDK subdirectory under runtime dir */ ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory); if (ret < 0 || ret == sizeof(tmp)) { RTE_LOG(ERR, EAL, "Error creating DPDK runtime path name\n"); return -1; } /* create prefix-specific subdirectory under DPDK runtime dir */ ret = snprintf(runtime_dir, sizeof(runtime_dir), "%s/%s", tmp, eal_get_hugefile_prefix()); if (ret < 0 || ret == sizeof(runtime_dir)) { RTE_LOG(ERR, EAL, "Error creating prefix-specific runtime path name\n"); return -1; } The root account is corresponds to the directory /var/run/DPDK/rte, but openvswitch account is directory /var/run/openvswitch DPDK/rte. Then, I changed to the openvswitch account and run the process again, errors below were reported: EAL: Detected 40 lcore(s) EAL: Detected 2 NUMA nodes EAL: Multi-process socket /var/run/openvswitch/dpdk/rte/mp_socket_306857_7e76690dafe702 EAL: Probing VFIO support... EAL: VFIO support initialized EAL: Could not map memory from primary process EAL: FATAL: Cannot init memory EAL: Cannot init memory There seems to be insufficient permissions. So, I change the code blow and all the things get to be OK: int eal_create_runtime_dir(void) { const char *directory = default_runtime_dir; const char *xdg_runtime_dir = getenv("XDG_RUNTIME_DIR"); const char *fallback = "/tmp"; char tmp[PATH_MAX]; int ret; if (getuid() != 0) { /* try XDG path first, fall back to /tmp */ if (xdg_runtime_dir != NULL) directory = xdg_runtime_dir; else directory = fallback; } directory = "/var/run/openvswitch"; // added by my for test......... /* create DPDK subdirectory under runtime dir */ ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory); if (ret < 0 || ret == sizeof(tmp)) { RTE_LOG(ERR, EAL, "Error creating DPDK runtime path name\n"); return -1; } This is supposed to be a DPDK BUG. Considering that the primary and secondary processes may not be the same account, process with parameter --proc-type=secondary should get the runtime directory from the primary process instead of generating a directory as it does now.