From: Tyler Retzlaff <roretzla@linux.microsoft.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net, dmitry.kozliuk@gmail.com,
anatoly.burakov@intel.com,
Tyler Retzlaff <roretzla@linux.microsoft.com>,
Narcisa Vasile <navasile@microsoft.com>
Subject: [PATCH v3 1/6] eal: add thread attributes
Date: Wed, 22 Jun 2022 13:26:16 -0700 [thread overview]
Message-ID: <1655929581-12366-2-git-send-email-roretzla@linux.microsoft.com> (raw)
In-Reply-To: <1655929581-12366-1-git-send-email-roretzla@linux.microsoft.com>
Implement thread attributes for:
* thread affinity
* thread priority
Implement functions for managing thread attributes.
Priority is represented through an enum that allows for two levels:
* RTE_THREAD_PRIORITY_NORMAL
* RTE_THREAD_PRIORITY_REALTIME_CRITICAL
Affinity is described by the rte_cpuset_t type.
An rte_thread_attr_t object can be set to the default values
by calling rte_thread_attr_init().
Signed-off-by: Narcisa Vasile <navasile@microsoft.com>
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
---
lib/eal/common/meson.build | 1 +
lib/eal/common/rte_thread.c | 60 ++++++++++++++++++++++++++++
lib/eal/include/rte_thread.h | 93 ++++++++++++++++++++++++++++++++++++++++++++
lib/eal/version.map | 4 ++
4 files changed, 158 insertions(+)
create mode 100644 lib/eal/common/rte_thread.c
diff --git a/lib/eal/common/meson.build b/lib/eal/common/meson.build
index 917758c..1e77dba 100644
--- a/lib/eal/common/meson.build
+++ b/lib/eal/common/meson.build
@@ -36,6 +36,7 @@ sources += files(
'rte_random.c',
'rte_reciprocal.c',
'rte_service.c',
+ 'rte_thread.c',
'rte_version.c',
)
if is_linux or is_windows
diff --git a/lib/eal/common/rte_thread.c b/lib/eal/common/rte_thread.c
new file mode 100644
index 0000000..d204cc5
--- /dev/null
+++ b/lib/eal/common/rte_thread.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C) 2022 Microsoft Corporation
+ */
+
+#include <rte_debug.h>
+#include <rte_thread.h>
+
+int
+rte_thread_attr_init(rte_thread_attr_t *attr)
+{
+ if (attr == NULL)
+ return EINVAL;
+
+ CPU_ZERO(&attr->cpuset);
+ attr->priority = RTE_THREAD_PRIORITY_NORMAL;
+
+ return 0;
+}
+
+int
+rte_thread_attr_set_affinity(rte_thread_attr_t *thread_attr,
+ rte_cpuset_t *cpuset)
+{
+ if (thread_attr == NULL)
+ return EINVAL;
+
+ if (cpuset == NULL)
+ return EINVAL;
+
+ thread_attr->cpuset = *cpuset;
+
+ return 0;
+}
+
+int
+rte_thread_attr_get_affinity(rte_thread_attr_t *thread_attr,
+ rte_cpuset_t *cpuset)
+{
+ if (thread_attr == NULL)
+ return EINVAL;
+
+ if (cpuset == NULL)
+ return EINVAL;
+
+ *cpuset = thread_attr->cpuset;
+
+ return 0;
+}
+
+int
+rte_thread_attr_set_priority(rte_thread_attr_t *thread_attr,
+ enum rte_thread_priority priority)
+{
+ if (thread_attr == NULL)
+ return EINVAL;
+
+ thread_attr->priority = priority;
+
+ return 0;
+}
diff --git a/lib/eal/include/rte_thread.h b/lib/eal/include/rte_thread.h
index 9e261bf..062308d 100644
--- a/lib/eal/include/rte_thread.h
+++ b/lib/eal/include/rte_thread.h
@@ -40,6 +40,18 @@ enum rte_thread_priority {
/**< highest thread priority allowed */
};
+#ifdef RTE_HAS_CPUSET
+
+/**
+ * Representation for thread attributes.
+ */
+typedef struct {
+ enum rte_thread_priority priority; /**< thread priority */
+ rte_cpuset_t cpuset; /**< thread affinity */
+} rte_thread_attr_t;
+
+#endif /* RTE_HAS_CPUSET */
+
/**
* TLS key type, an opaque pointer.
*/
@@ -63,6 +75,87 @@ enum rte_thread_priority {
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
+ * Initialize the attributes of a thread.
+ * These attributes can be passed to the rte_thread_create() function
+ * that will create a new thread and set its attributes according to attr.
+ *
+ * @param attr
+ * Thread attributes to initialize.
+ *
+ * @return
+ * On success, return 0.
+ * On failure, return a positive errno-style error number.
+ */
+__rte_experimental
+int rte_thread_attr_init(rte_thread_attr_t *attr);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Set the CPU affinity value in the thread attributes pointed to
+ * by 'thread_attr'.
+ *
+ * @param thread_attr
+ * Points to the thread attributes in which affinity will be updated.
+ *
+ * @param cpuset
+ * Points to the value of the affinity to be set.
+ *
+ * @return
+ * On success, return 0.
+ * On failure, return a positive errno-style error number.
+ */
+__rte_experimental
+int rte_thread_attr_set_affinity(rte_thread_attr_t *thread_attr,
+ rte_cpuset_t *cpuset);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Get the value of CPU affinity that is set in the thread attributes pointed
+ * to by 'thread_attr'.
+ *
+ * @param thread_attr
+ * Points to the thread attributes from which affinity will be retrieved.
+ *
+ * @param cpuset
+ * Pointer to the memory that will store the affinity.
+ *
+ * @return
+ * On success, return 0.
+ * On failure, return a positive errno-style error number.
+ */
+__rte_experimental
+int rte_thread_attr_get_affinity(rte_thread_attr_t *thread_attr,
+ rte_cpuset_t *cpuset);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Set the thread priority value in the thread attributes pointed to
+ * by 'thread_attr'.
+ *
+ * @param thread_attr
+ * Points to the thread attributes in which priority will be updated.
+ *
+ * @param priority
+ * Points to the value of the priority to be set.
+ *
+ * @return
+ * On success, return 0.
+ * On failure, return a positive errno-style error number.
+ */
+__rte_experimental
+int rte_thread_attr_set_priority(rte_thread_attr_t *thread_attr,
+ enum rte_thread_priority priority);
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
* Set the affinity of thread 'thread_id' to the cpu set
* specified by 'cpuset'.
*
diff --git a/lib/eal/version.map b/lib/eal/version.map
index 5e6d851..ba03528 100644
--- a/lib/eal/version.map
+++ b/lib/eal/version.map
@@ -423,6 +423,10 @@ EXPERIMENTAL {
# added in 22.07
rte_drand;
+ rte_thread_attr_get_affinity;
+ rte_thread_attr_init;
+ rte_thread_attr_set_affinity;
+ rte_thread_attr_set_priority;
rte_thread_get_affinity_by_id;
rte_thread_get_priority;
rte_thread_self;
--
1.8.3.1
next prev parent reply other threads:[~2022-06-22 20:26 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-09 13:58 [PATCH 0/6] add thread lifetime and attributes API Tyler Retzlaff
2022-06-09 13:58 ` [PATCH 1/6] eal: add thread attributes Tyler Retzlaff
2022-06-09 13:58 ` [PATCH 2/6] eal: add thread lifetime management Tyler Retzlaff
2022-06-09 13:58 ` [PATCH 3/6] eal: add basic rte thread ID equal API Tyler Retzlaff
2022-06-09 22:24 ` Konstantin Ananyev
2022-06-10 22:48 ` Tyler Retzlaff
2022-06-11 12:25 ` Konstantin Ananyev
2022-06-13 13:39 ` Tyler Retzlaff
2022-06-10 0:40 ` fengchengwen
2022-06-09 13:58 ` [PATCH 4/6] test/threads: add tests for thread lifetime API Tyler Retzlaff
2022-06-09 13:58 ` [PATCH 5/6] test/threads: add tests for thread attributes API Tyler Retzlaff
2022-06-09 13:58 ` [PATCH 6/6] test/threads: remove unit test use of pthread Tyler Retzlaff
2022-06-14 23:47 ` [PATCH v2 0/6] add thread lifetime and attributes API Tyler Retzlaff
2022-06-14 23:47 ` [PATCH v2 1/6] eal: add thread attributes Tyler Retzlaff
2022-06-14 23:47 ` [PATCH v2 2/6] eal: add thread lifetime management Tyler Retzlaff
2022-06-18 12:59 ` Dmitry Kozlyuk
2022-06-20 17:39 ` Tyler Retzlaff
2022-06-21 16:24 ` Tyler Retzlaff
2022-06-21 18:51 ` Tyler Retzlaff
2022-06-21 19:44 ` Dmitry Kozlyuk
2022-06-21 21:28 ` Tyler Retzlaff
2022-06-21 22:24 ` Dmitry Kozlyuk
2022-06-22 18:21 ` Tyler Retzlaff
2022-06-14 23:47 ` [PATCH v2 3/6] eal: add basic rte thread ID equal API Tyler Retzlaff
2022-06-20 8:34 ` Konstantin Ananyev
2022-06-14 23:47 ` [PATCH v2 4/6] test/threads: add tests for thread lifetime API Tyler Retzlaff
2022-06-14 23:47 ` [PATCH v2 5/6] test/threads: add tests for thread attributes API Tyler Retzlaff
2022-06-14 23:47 ` [PATCH v2 6/6] test/threads: remove unit test use of pthread Tyler Retzlaff
2022-06-22 20:26 ` [PATCH v3 0/6] add thread lifetime and attributes API Tyler Retzlaff
2022-06-22 20:26 ` Tyler Retzlaff [this message]
2022-06-22 20:26 ` [PATCH v3 2/6] eal: add thread lifetime management Tyler Retzlaff
2022-06-22 20:26 ` [PATCH v3 3/6] eal: add basic rte thread ID equal API Tyler Retzlaff
2022-06-22 20:26 ` [PATCH v3 4/6] test/threads: add tests for thread lifetime API Tyler Retzlaff
2022-06-22 20:26 ` [PATCH v3 5/6] test/threads: add tests for thread attributes API Tyler Retzlaff
2022-06-22 20:26 ` [PATCH v3 6/6] test/threads: remove unit test use of pthread Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 0/6] add thread lifetime and attributes API Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 1/6] eal: add thread attributes Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 2/6] eal: add thread lifetime management Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 3/6] eal: add basic rte thread ID equal API Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 4/6] test/threads: add tests for thread lifetime API Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 5/6] test/threads: add tests for thread attributes API Tyler Retzlaff
2022-06-27 16:56 ` [PATCH v4 6/6] test/threads: remove unit test use of pthread Tyler Retzlaff
2022-07-31 21:16 ` [PATCH v4 0/6] add thread lifetime and attributes API Dmitry Kozlyuk
2022-09-21 8:15 ` David Marchand
2022-09-29 7:02 ` David Marchand
2022-10-05 16:11 ` Tyler Retzlaff
2022-10-05 16:34 ` Tyler Retzlaff
2022-10-06 6:52 ` David Marchand
2022-10-06 15:14 ` Tyler Retzlaff
2022-10-06 13:36 ` Thomas Monjalon
2022-10-06 15:10 ` Tyler Retzlaff
2022-10-06 15:14 ` Thomas Monjalon
2022-10-06 15:20 ` Tyler Retzlaff
2022-10-06 15:26 ` David Marchand
2022-10-06 15:27 ` Tyler Retzlaff
2022-10-05 17:07 ` [PATCH v5 " Tyler Retzlaff
2022-10-05 17:07 ` [PATCH v5 1/6] eal: add thread attributes Tyler Retzlaff
2022-10-06 8:32 ` David Marchand
2022-10-05 17:07 ` [PATCH v5 2/6] eal: add thread lifetime management Tyler Retzlaff
2023-03-01 8:11 ` David Marchand
2023-03-01 20:34 ` Tyler Retzlaff
2022-10-05 17:07 ` [PATCH v5 3/6] eal: add basic rte thread ID equal API Tyler Retzlaff
2022-10-05 17:07 ` [PATCH v5 4/6] test/threads: add tests for thread lifetime API Tyler Retzlaff
2022-10-06 8:32 ` David Marchand
2022-10-06 15:19 ` Tyler Retzlaff
2022-10-05 17:07 ` [PATCH v5 5/6] test/threads: add tests for thread attributes API Tyler Retzlaff
2022-10-05 17:07 ` [PATCH v5 6/6] test/threads: remove unit test use of pthread Tyler Retzlaff
2022-10-06 19:25 ` [PATCH v5 0/6] add thread lifetime and attributes API David Marchand
2022-10-07 19:20 ` Tyler Retzlaff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1655929581-12366-2-git-send-email-roretzla@linux.microsoft.com \
--to=roretzla@linux.microsoft.com \
--cc=anatoly.burakov@intel.com \
--cc=dev@dpdk.org \
--cc=dmitry.kozliuk@gmail.com \
--cc=navasile@microsoft.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.