diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index f3549a37818ce8d0ec0512a199a55081ec6eb5f2..6f23682c13697a20feeaf6be1d9b3cb839d4fe31 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c @@ -714,8 +714,8 @@ extern int schedule(uint32_t job_limit) #ifdef HAVE_BG char *ionodes = NULL; char tmp_char[256]; - static bool backfill_sched = false; #endif + static bool backfill_sched = false; static time_t sched_update = 0; static bool wiki_sched = false; static bool fifo_sched = false; @@ -730,11 +730,11 @@ extern int schedule(uint32_t job_limit) char *sched_params, *tmp_ptr; char *sched_type = slurm_get_sched_type(); char *prio_type = slurm_get_priority_type(); -#ifdef HAVE_BG + /* On BlueGene, do FIFO only with sched/backfill */ if (strcmp(sched_type, "sched/backfill") == 0) backfill_sched = true; -#endif + if ((strcmp(sched_type, "sched/builtin") == 0) && (strcmp(prio_type, "priority/basic") == 0) && _all_partition_priorities_same()) @@ -764,9 +764,14 @@ extern int schedule(uint32_t job_limit) sched_timeout = slurm_get_msg_timeout() / 2; sched_timeout = MAX(sched_timeout, 1); - sched_timeout = MIN(sched_timeout, 10); + sched_timeout = MIN(sched_timeout, 4); sched_update = slurmctld_conf.last_update; } + /* Rather than periodicallly going to bottom of queue, let the + * backfill scheduler do so since it can periodically relinquish + * locks rather than blocking all RPCs. */ + if ((job_limit == INFINITE) && backfill_sched) + job_limit = def_job_limit; if (job_limit == 0) job_limit = def_job_limit;