From patchwork Sat Jun 19 01:57:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Narcisa Ana Maria Vasile X-Patchwork-Id: 94539 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 16110A0A0C; Sat, 19 Jun 2021 03:58:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 550F04114A; Sat, 19 Jun 2021 03:58:18 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 0982040E32 for ; Sat, 19 Jun 2021 03:58:12 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1059) id 8C8BA20B83F5; Fri, 18 Jun 2021 18:58:10 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 8C8BA20B83F5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1624067890; bh=jiP6l1SzmaXDuo0DdRnsRsF4a47L1DXivNLEdGes664=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mHfFQjULWZLTf/lcT5m8KVUdeAup6m3e4djSAtHNkOpmpwoOzE5ln5rrEb7B7H+cN 2rk5aCoZfnvJVbwXYyhKBTShABJsfiR9w+RdToSbrjrTqLLibTGgT3H2OxghIrbZmf OLcLQq8u5d5BH7HLqtimJXopXYgHiHq4uypgiVJk= From: Narcisa Ana Maria Vasile To: dev@dpdk.org, thomas@monjalon.net, dmitry.kozliuk@gmail.com, khot@microsoft.com, navasile@microsoft.com, dmitrym@microsoft.com, roretzla@microsoft.com, talshn@nvidia.com, ocardona@microsoft.com Cc: bruce.richardson@intel.com, david.marchand@redhat.com, pallavi.kadam@intel.com Date: Fri, 18 Jun 2021 18:57:57 -0700 Message-Id: <1624067878-2130-6-git-send-email-navasile@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1624067878-2130-1-git-send-email-navasile@linux.microsoft.com> References: <1624053294-31255-1-git-send-email-navasile@linux.microsoft.com> <1624067878-2130-1-git-send-email-navasile@linux.microsoft.com> Subject: [dpdk-dev] [PATCH v2 5/6] eal: set affinity and priority attributes X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Narcisa Vasile If the user doesn't specify the priority through the command line arguments, initialize the thread priority to 'normal'. Set thread priority for eal threads. Depends-on: series-17402 ("eal: Add EAL API for threading") Signed-off-by: Narcisa Vasile --- lib/eal/common/eal_common_thread.c | 11 ++++++++ lib/eal/common/eal_thread.h | 6 ++++ lib/eal/freebsd/eal.c | 41 +++++++++++++++++++++++----- lib/eal/linux/eal.c | 39 +++++++++++++++++++++----- lib/eal/windows/eal.c | 44 ++++++++++++++++++++++++++++-- 5 files changed, 125 insertions(+), 16 deletions(-) diff --git a/lib/eal/common/eal_common_thread.c b/lib/eal/common/eal_common_thread.c index 62d28e7b28..fa537db7ac 100644 --- a/lib/eal/common/eal_common_thread.c +++ b/lib/eal/common/eal_common_thread.c @@ -388,3 +388,14 @@ rte_thread_unregister(void) RTE_LOG(DEBUG, EAL, "Unregistered non-EAL thread (was lcore %u).\n", lcore_id); } + +void rte_thread_priority_init(void) +{ + struct internal_config *internal_conf = + eal_get_internal_configuration(); + + /* If the user doesn't specify the priority through the command + * line arguments, the default 'normal' value will be used. + */ + internal_conf->thread_priority = RTE_THREAD_PRIORITY_NORMAL; +} diff --git a/lib/eal/common/eal_thread.h b/lib/eal/common/eal_thread.h index 4a49117be8..7b3b884463 100644 --- a/lib/eal/common/eal_thread.h +++ b/lib/eal/common/eal_thread.h @@ -58,4 +58,10 @@ eal_thread_dump_affinity(rte_cpuset_t *cpuset, char *str, unsigned int size); int eal_thread_dump_current_affinity(char *str, unsigned int size); +/** + * Set the initial thread priority in the internal configuration + * to the default value of RTE_THREAD_PRIORITY_NORMAL. + */ +void rte_thread_priority_init(void); + #endif /* EAL_THREAD_H */ diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c index b5cf050697..7303d62afb 100644 --- a/lib/eal/freebsd/eal.c +++ b/lib/eal/freebsd/eal.c @@ -676,6 +676,8 @@ rte_eal_init(int argc, char **argv) struct internal_config *internal_conf = eal_get_internal_configuration(); + rte_thread_priority_init(); + /* checks if the machine is adequate */ if (!rte_cpu_is_supported()) { rte_eal_init_alert("unsupported cpu type."); @@ -854,6 +856,14 @@ rte_eal_init(int argc, char **argv) eal_check_mem_on_local_socket(); + ret = rte_thread_set_priority(rte_thread_self(), + internal_conf->thread_priority); + if (ret != 0) { + rte_eal_init_alert("Cannot set thread priority"); + rte_errno = ret; + return -1; + } + if (rte_thread_set_affinity_by_id(rte_thread_self(), &lcore_config[config->main_lcore].cpuset) != 0) { rte_eal_init_alert("Cannot set affinity"); @@ -869,6 +879,22 @@ rte_eal_init(int argc, char **argv) config->main_lcore, (void *)thread_id.opaque_id, cpuset, ret == 0 ? "" : "..."); + rte_thread_attr_t thread_attr; + ret = rte_thread_attr_init(&thread_attr); + if (ret != 0) { + rte_eal_init_alert("Cannot initialize thread attributes"); + rte_errno = ret; + return -1; + } + + ret = rte_thread_attr_set_priority(&thread_attr, + internal_conf->thread_priority); + if (ret != 0) { + rte_eal_init_alert("Cannot set thread priority attribute"); + rte_errno = ret; + return -1; + } + RTE_LCORE_FOREACH_WORKER(i) { /* @@ -882,9 +908,15 @@ rte_eal_init(int argc, char **argv) lcore_config[i].state = WAIT; + ret = rte_thread_attr_set_affinity(&thread_attr, + &lcore_config[i].cpuset); + + if (ret != 0) + rte_panic("Cannot set affinity\n"); + /* create a thread for each lcore */ - ret = rte_thread_create(&lcore_config[i].thread_id, NULL, - eal_thread_loop, NULL); + ret = rte_thread_create(&lcore_config[i].thread_id, + &thread_attr, eal_thread_loop, NULL); if (ret != 0) rte_panic("Cannot create thread\n"); @@ -892,11 +924,6 @@ rte_eal_init(int argc, char **argv) snprintf(thread_name, sizeof(thread_name), "lcore-worker-%d", i); rte_thread_name_set(lcore_config[i].thread_id, thread_name); - - ret = rte_thread_set_affinity_by_id(lcore_config[i].thread_id, - &lcore_config[i].cpuset); - if (ret != 0) - rte_panic("Cannot set affinity\n"); } /* diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c index 7060856d84..7f3d491560 100644 --- a/lib/eal/linux/eal.c +++ b/lib/eal/linux/eal.c @@ -975,6 +975,8 @@ rte_eal_init(int argc, char **argv) struct internal_config *internal_conf = eal_get_internal_configuration(); + rte_thread_priority_init(); + /* checks if the machine is adequate */ if (!rte_cpu_is_supported()) { rte_eal_init_alert("unsupported cpu type."); @@ -1219,6 +1221,14 @@ rte_eal_init(int argc, char **argv) eal_check_mem_on_local_socket(); + ret = rte_thread_set_priority(rte_thread_self(), + internal_conf->thread_priority); + if (ret != 0) { + rte_eal_init_alert("Cannot set thread priority"); + rte_errno = ret; + return -1; + } + if (rte_thread_set_affinity_by_id(rte_thread_self(), &lcore_config[config->main_lcore].cpuset) != 0) { rte_eal_init_alert("Cannot set affinity"); @@ -1233,6 +1243,23 @@ rte_eal_init(int argc, char **argv) config->main_lcore, (void *)thread_id.opaque_id, cpuset, ret == 0 ? "" : "..."); + rte_thread_attr_t thread_attr; + ret = rte_thread_attr_init(&thread_attr); + if (ret != 0) { + RTE_LOG(DEBUG, EAL, "Cannot initialize thread attributes," + "ret = %d\n", ret); + rte_errno = ret; + return -1; + } + ret = rte_thread_attr_set_priority(&thread_attr, + internal_conf->thread_priority); + if (ret != 0) { + RTE_LOG(DEBUG, EAL, "Cannot set thread priority attribute," + "ret = %d\n", ret); + rte_errno = ret; + return -1; + } + RTE_LCORE_FOREACH_WORKER(i) { /* @@ -1246,9 +1273,12 @@ rte_eal_init(int argc, char **argv) lcore_config[i].state = WAIT; + rte_thread_attr_set_affinity(&thread_attr, + &lcore_config[i].cpuset); + /* create a thread for each lcore */ - ret = rte_thread_create(&lcore_config[i].thread_id, NULL, - eal_thread_loop, NULL); + ret = rte_thread_create(&lcore_config[i].thread_id, + &thread_attr, eal_thread_loop, NULL); if (ret != 0) rte_panic("Cannot create thread\n"); @@ -1260,11 +1290,6 @@ rte_eal_init(int argc, char **argv) if (ret != 0) RTE_LOG(DEBUG, EAL, "Cannot set name for lcore thread\n"); - - ret = rte_thread_set_affinity_by_id(lcore_config[i].thread_id, - &lcore_config[i].cpuset); - if (ret != 0) - rte_panic("Cannot set affinity\n"); } /* diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c index 65be582b99..bb9053df84 100644 --- a/lib/eal/windows/eal.c +++ b/lib/eal/windows/eal.c @@ -274,6 +274,8 @@ rte_eal_init(int argc, char **argv) eal_get_internal_configuration(); int ret; + rte_thread_priority_init(); + eal_log_init(NULL, 0); eal_log_level_parse(argc, argv); @@ -375,6 +377,36 @@ rte_eal_init(int argc, char **argv) return -1; } + if (rte_thread_set_affinity_by_id(rte_thread_self(), + &lcore_config[config->main_lcore].cpuset) != 0) { + rte_eal_init_alert("Cannot set affinity"); + rte_errno = EINVAL; + return -1; + } + + ret = rte_thread_set_priority(rte_thread_self(), + internal_conf->thread_priority); + if (ret != 0) { + rte_eal_init_alert("Cannot set thread priority"); + rte_errno = ret; + return -1; + } + + rte_thread_attr_t thread_attr; + ret = rte_thread_attr_init(&thread_attr); + if (ret != 0) { + rte_eal_init_alert("Cannot initialize thread attributes"); + rte_errno = ret; + return -1; + } + ret = rte_thread_attr_set_priority(&thread_attr, + internal_conf->thread_priority); + if (ret != 0) { + rte_eal_init_alert("Cannot set thread priority attribute"); + rte_errno = ret; + return -1; + } + RTE_LCORE_FOREACH_WORKER(i) { /* @@ -390,9 +422,17 @@ rte_eal_init(int argc, char **argv) lcore_config[i].state = WAIT; + ret = rte_thread_attr_set_affinity(&thread_attr, + &lcore_config[i].cpuset); + if (ret != 0) { + rte_eal_init_alert("Cannot set thread affinity attribute"); + rte_errno = ret; + return -1; + } + /* create a thread for each lcore */ - ret = rte_thread_create(&lcore_config[i].thread_id, NULL, - eal_thread_loop, NULL); + ret = rte_thread_create(&lcore_config[i].thread_id, + &thread_attr, eal_thread_loop, NULL); if (ret != 0) rte_panic("Cannot create thread\n"); }