From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EBAA2A0C55; Wed, 18 Aug 2021 23:20:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9318C41223; Wed, 18 Aug 2021 23:19:53 +0200 (CEST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mails.dpdk.org (Postfix) with ESMTP id 268E940140 for ; Wed, 18 Aug 2021 23:19:46 +0200 (CEST) Received: by linux.microsoft.com (Postfix, from userid 1059) id B472320C3384; Wed, 18 Aug 2021 14:19:44 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com B472320C3384 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1629321584; bh=qP4aecO1oe/EmTahtZBqyK46HxsCvOpCa4j/g5NOjaQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ifOYT59Mud6LnC1NcIA2Qhwxx9/7YZflavEhqY8+h1oFxD/ogA9UXlHk5WSqSpuTp qTlF8k4HOAVcknrQpetCo7Va450R8ebp49c1h6z3UW7jTQwqkWaKS7FPpnJc7moXRP Sh727hgOubuoCfZUcPoHkE1WVtCwx2SCgTJs6QQ4= 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: Wed, 18 Aug 2021 14:19:38 -0700 Message-Id: <1629321579-10788-6-git-send-email-navasile@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1629321579-10788-1-git-send-email-navasile@linux.microsoft.com> References: <1629294247-5207-7-git-send-email-navasile@linux.microsoft.com> <1629321579-10788-1-git-send-email-navasile@linux.microsoft.com> Subject: [dpdk-dev] [PATCH v4 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. 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 c92fdaa598..1570da2a36 100644 --- a/lib/eal/freebsd/eal.c +++ b/lib/eal/freebsd/eal.c @@ -678,6 +678,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."); @@ -856,6 +858,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"); @@ -871,6 +881,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) { /* @@ -884,9 +910,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"); @@ -894,11 +926,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 cd5e9953d0..c02390ed58 100644 --- a/lib/eal/linux/eal.c +++ b/lib/eal/linux/eal.c @@ -977,6 +977,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."); @@ -1221,6 +1223,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"); @@ -1235,6 +1245,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) { /* @@ -1248,9 +1275,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"); @@ -1262,11 +1292,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 d90c635ddc..4eca6a3ab6 100644 --- a/lib/eal/windows/eal.c +++ b/lib/eal/windows/eal.c @@ -278,6 +278,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); @@ -379,6 +381,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) { /* @@ -394,9 +426,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"); } -- 2.31.0.vfs.0.1