vlib: improvement to automatic core pinning
Type: feature If 'main-core' is not specified, the main thread is pinned by default to the cpu it is running on during initialization. This change does not impact manual core-pinning, which requires the 'main-core' argument e.g. 'cpu {main-core x corelist-workers n}. Change-Id: I874034591bf0acf4d71b231dfbbb0f6de8fe6060 Signed-off-by: hsandid <halsandi@cisco.com>
This commit is contained in:
@ -205,6 +205,10 @@ vlib_thread_init (vlib_main_t * vm)
|
||||
avail_cpu = clib_bitmap_set (avail_cpu, c, 0);
|
||||
}
|
||||
|
||||
/* if main thread affinity is unspecified, set to current running cpu */
|
||||
if (tm->main_lcore == ~0)
|
||||
tm->main_lcore = sched_getcpu ();
|
||||
|
||||
/* grab cpu for main thread */
|
||||
if (tm->main_lcore != ~0)
|
||||
{
|
||||
@ -1134,6 +1138,7 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
|
||||
u8 *name;
|
||||
uword *bitmap;
|
||||
u32 count;
|
||||
int use_corelist = 0;
|
||||
|
||||
tm->thread_registrations_by_name = hash_create_string (0, sizeof (uword));
|
||||
|
||||
@ -1185,6 +1190,7 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
|
||||
|
||||
tr->coremask = bitmap;
|
||||
tr->count = clib_bitmap_count_set_bits (tr->coremask);
|
||||
use_corelist = 1;
|
||||
}
|
||||
else
|
||||
if (unformat
|
||||
@ -1214,6 +1220,9 @@ cpu_config (vlib_main_t * vm, unformat_input_t * input)
|
||||
break;
|
||||
}
|
||||
|
||||
if (use_corelist && tm->main_lcore == ~0)
|
||||
return clib_error_return (0, "main-core must be specified when using "
|
||||
"corelist-* or coremask-* attribute");
|
||||
if (tm->sched_priority != ~0)
|
||||
{
|
||||
if (tm->sched_policy == SCHED_FIFO || tm->sched_policy == SCHED_RR)
|
||||
|
@ -329,6 +329,10 @@ defaulted:
|
||||
|
||||
unformat_free (&input);
|
||||
|
||||
/* if main thread affinity is unspecified, set to current running cpu */
|
||||
if (main_core == ~0)
|
||||
main_core = sched_getcpu ();
|
||||
|
||||
/* set process affinity for main thread */
|
||||
if (main_core != ~0)
|
||||
{
|
||||
|
Reference in New Issue
Block a user