From: Narcisa Vasile <navasile@microsoft.com>
Allow the user to choose the thread priority through an EAL
command line argument.
The user can select the thread priority to be either 'normal'
or 'critical':
--thread-prio normal
--thread-prio realtime
Signed-off-by: Narcisa Vasile <navasile@microsoft.com>
---
lib/librte_eal/common/eal_common_options.c | 28 +++++++++++++++++++++-
lib/librte_eal/common/eal_internal_cfg.h | 2 ++
lib/librte_eal/common/eal_options.h | 2 ++
3 files changed, 31 insertions(+), 1 deletion(-)
@@ -106,6 +106,7 @@ eal_long_options[] = {
{OPT_TELEMETRY, 0, NULL, OPT_TELEMETRY_NUM },
{OPT_NO_TELEMETRY, 0, NULL, OPT_NO_TELEMETRY_NUM },
{OPT_FORCE_MAX_SIMD_BITWIDTH, 1, NULL, OPT_FORCE_MAX_SIMD_BITWIDTH_NUM},
+ {OPT_THREAD_PRIORITY, 1, NULL, OPT_THREAD_PRIORITY_NUM},
/* legacy options that will be removed in future */
{OPT_PCI_BLACKLIST, 1, NULL, OPT_PCI_BLACKLIST_NUM },
@@ -1383,6 +1384,24 @@ eal_parse_simd_bitwidth(const char *arg)
return 0;
}
+static int
+eal_parse_thread_priority(const char *arg)
+{
+ struct internal_config *internal_conf =
+ eal_get_internal_configuration();
+ enum rte_thread_priority priority;
+
+ if (!strncmp("normal", arg, sizeof("normal")))
+ priority = RTE_THREAD_PRIORITY_NORMAL;
+ else if (!strncmp("realtime", arg, sizeof("realtime")))
+ priority = RTE_THREAD_PRIORITY_REALTIME_CRITICAL;
+ else
+ return -1;
+
+ internal_conf->thread_priority = priority;
+ return 0;
+}
+
static int
eal_parse_base_virtaddr(const char *arg)
{
@@ -1796,7 +1815,13 @@ eal_parse_common_option(int opt, const char *optarg,
return -1;
}
break;
-
+ case OPT_THREAD_PRIORITY_NUM:
+ if (eal_parse_thread_priority(optarg) < 0) {
+ RTE_LOG(ERR, EAL, "invalid parameter for --"
+ OPT_THREAD_PRIORITY "\n");
+ return -1;
+ }
+ break;
/* don't know what to do, leave this to caller */
default:
return 1;
@@ -2059,6 +2084,7 @@ eal_common_usage(void)
" (can be used multiple times)\n"
" --"OPT_VMWARE_TSC_MAP" Use VMware TSC map instead of native RDTSC\n"
" --"OPT_PROC_TYPE" Type of this process (primary|secondary|auto)\n"
+ " --"OPT_THREAD_PRIORITY" Set threads priority (normal|realtime)\n"
#ifndef RTE_EXEC_ENV_WINDOWS
" --"OPT_SYSLOG" Set syslog facility\n"
#endif
@@ -93,6 +93,8 @@ struct internal_config {
unsigned int no_telemetry; /**< true to disable Telemetry */
struct simd_bitwidth max_simd_bitwidth;
/**< max simd bitwidth path to use */
+ enum rte_thread_priority thread_priority;
+ /**< thread priority to configure */
};
void eal_reset_internal_config(struct internal_config *internal_cfg);
@@ -93,6 +93,8 @@ enum {
OPT_NO_TELEMETRY_NUM,
#define OPT_FORCE_MAX_SIMD_BITWIDTH "force-max-simd-bitwidth"
OPT_FORCE_MAX_SIMD_BITWIDTH_NUM,
+#define OPT_THREAD_PRIORITY "thread-prio"
+ OPT_THREAD_PRIORITY_NUM,
/* legacy option that will be removed in future */
#define OPT_PCI_BLACKLIST "pci-blacklist"