Scheduler policy & priority config, few minor fixes (VPP-425)
- scheduler-prio -> scheduler-priority - improve formatting of "show threads" output - add description to "startup.conf" - bail out of priority is set without rr or fifo policy Change-Id: Idf897f7603d989d6c2d0093eea89c5d1653eaa8c Signed-off-by: Pavel Kotucek <pkotucek@cisco.com>
This commit is contained in:
Pavel Kotucek
committed by
Damjan Marion
parent
af405f77c7
commit
c08a1ed696
@ -1093,7 +1093,7 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
|
||||
(input, "scheduler-policy %U", unformat_sched_policy,
|
||||
&tm->sched_policy))
|
||||
;
|
||||
else if (unformat (input, "scheduler-prio %u", &tm->sched_priority))
|
||||
else if (unformat (input, "scheduler-priority %u", &tm->sched_priority))
|
||||
;
|
||||
else if (unformat (input, "%s %u", &name, &count))
|
||||
{
|
||||
@ -1111,10 +1111,9 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
|
||||
break;
|
||||
}
|
||||
|
||||
if (tm->sched_policy != ~0)
|
||||
if (tm->sched_priority != ~0)
|
||||
{
|
||||
if (tm->sched_priority != ~0
|
||||
&& (tm->sched_policy == SCHED_FIFO || tm->sched_policy == SCHED_RR))
|
||||
if (tm->sched_policy == SCHED_FIFO || tm->sched_policy == SCHED_RR)
|
||||
{
|
||||
u32 prio_max = sched_get_priority_max (tm->sched_policy);
|
||||
u32 prio_min = sched_get_priority_min (tm->sched_policy);
|
||||
@ -1124,7 +1123,12 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
|
||||
tm->sched_priority = prio_min;
|
||||
}
|
||||
else
|
||||
tm->sched_priority = 0;
|
||||
{
|
||||
return clib_error_return
|
||||
(0,
|
||||
"scheduling priority (%d) is not allowed for `normal` scheduling policy",
|
||||
tm->sched_priority);
|
||||
}
|
||||
}
|
||||
tr = tm->next;
|
||||
|
||||
|
@ -19,20 +19,23 @@
|
||||
#include <vlib/threads.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
u8 *
|
||||
format_sched_policy (u8 * s, va_list * args)
|
||||
static u8 *
|
||||
format_sched_policy_and_priority (u8 * s, va_list * args)
|
||||
{
|
||||
u32 i = va_arg (*args, u32);
|
||||
long i = va_arg (*args, long);
|
||||
struct sched_param sched_param;
|
||||
u8 *t = 0;
|
||||
|
||||
switch (i)
|
||||
switch (sched_getscheduler (i))
|
||||
{
|
||||
#define _(v,f,str) case SCHED_POLICY_##f: t = (u8 *) str; break;
|
||||
foreach_sched_policy
|
||||
#undef _
|
||||
}
|
||||
s = format (s, "%-6s ", t);
|
||||
return s;
|
||||
if (sched_getparam (i, &sched_param) == 0)
|
||||
return format (s, "%s (%d)", t, sched_param.sched_priority);
|
||||
else
|
||||
return format (s, "%s (n/a)", t);
|
||||
}
|
||||
|
||||
static clib_error_t *
|
||||
@ -42,8 +45,8 @@ show_threads_fn (vlib_main_t * vm,
|
||||
vlib_worker_thread_t *w;
|
||||
int i;
|
||||
|
||||
vlib_cli_output (vm, "%-7s%-20s%-12s%-8s%-7s%-9s%-7s%-7s%-7s%-10s",
|
||||
"ID", "Name", "Type", "LWP", "Policy", "Priority",
|
||||
vlib_cli_output (vm, "%-7s%-20s%-12s%-8s%-25s%-7s%-7s%-7s%-10s",
|
||||
"ID", "Name", "Type", "LWP", "Sched Policy (Priority)",
|
||||
"lcore", "Core", "Socket", "State");
|
||||
|
||||
#if !defined(__powerpc64__)
|
||||
@ -57,13 +60,7 @@ show_threads_fn (vlib_main_t * vm,
|
||||
w->name ? w->name : (u8 *) "",
|
||||
w->registration ? w->registration->name : "", w->lwp);
|
||||
|
||||
line =
|
||||
format (line, "%U", format_sched_policy, sched_getscheduler (w->lwp));
|
||||
|
||||
struct sched_param sched_param;
|
||||
line = format (line, "%8d ",
|
||||
(!sched_getparam (w->lwp, &sched_param)) ?
|
||||
sched_param.sched_priority : -1);
|
||||
line = format (line, "%-25U", format_sched_policy_and_priority, w->lwp);
|
||||
|
||||
#if DPDK==1
|
||||
int lcore = w->dpdk_lcore_id;
|
||||
|
@ -20,6 +20,16 @@ cpu {
|
||||
## Set logical CPU core(s) where worker threads are running
|
||||
## by default there is no worker threads started
|
||||
# corelist-workers 2-3,18-19
|
||||
|
||||
## Set scheduling policy and priority of main and worker threads
|
||||
|
||||
## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH)
|
||||
## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR)
|
||||
# scheduler-policy fifo
|
||||
|
||||
## Scheduling priority is used only for "real-time policies (fifo and rr),
|
||||
## and has to be in the range of priorities supported for a particular policy
|
||||
# scheduler-priority 50
|
||||
}
|
||||
|
||||
dpdk {
|
||||
|
Reference in New Issue
Block a user