scheduler: Move busy thread if its mask do not match current lcore
When using interrupt mode we can have a situation when we create thread (which is always busy) with a particular core mask, but this thread will be scheduled for different core, because core pointed by thread mask is in interrupt mode. This thread will never be moved by scheduler to correct core because currently scheduler do not move busy threads. This change makes scheduler to move busy threads if their mask do not match core on which they are executed currently. Signed-off-by: Maciej Szwed <maciej.szwed@intel.com> Change-Id: I35abdc91b197f1b9d40e491f964d31debad72fa5 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6073 Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
20362e5bc8
commit
af1c51505d
@ -205,8 +205,26 @@ balance(struct spdk_scheduler_core_info *cores_info, int cores_count,
|
||||
main_core_busy += spdk_min(UINT64_MAX - main_core_busy, thread_busy);
|
||||
main_core_idle -= spdk_min(main_core_idle, thread_busy);
|
||||
} else {
|
||||
/* This thread should remain on the same core */
|
||||
/* Move busy thread only if cpumask does not match current core (except main core) */
|
||||
if (i != g_main_lcore) {
|
||||
if (!spdk_cpuset_get_cpu(cpumask, i)) {
|
||||
for (k = 0; k < spdk_env_get_core_count(); k++) {
|
||||
target_lcore = _get_next_target_core();
|
||||
|
||||
if (spdk_cpuset_get_cpu(cpumask, target_lcore)) {
|
||||
lw_thread->new_lcore = target_lcore;
|
||||
cores_info[target_lcore].pending_threads_count++;
|
||||
core->pending_threads_count--;
|
||||
|
||||
if (target_lcore == g_main_lcore) {
|
||||
main_core_busy += spdk_min(UINT64_MAX - main_core_busy, thread_busy);
|
||||
main_core_idle -= spdk_min(main_core_idle, thread_busy);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
busy_threads_present = true;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user