2
0
mirror of https://gitlab.com/apparmor/apparmor synced 2025-09-05 08:45:22 +00:00

parser: fix --jobs so job scaling is applied correctly

job scaling allows the parser to resample the number of cpus available
and increase the number of jobs that can be launched if cpu available
increases.

Unfortunately job scaling was being applied even when a fixed number
of jobs was specified. So
  --jobs=2

doesn't actually clamp the compile at 2 jobs.

Instead job scaling should only be applied when --jobs=auto or when
jobs are set to a multiple of the cpus.

MR: https://gitlab.com/apparmor/apparmor/-/merge_requests/703
Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Steve Beattie <steve.beattie@canonical.com>
(cherry picked from commit 65ba20b955)
This commit is contained in:
John Johansen
2021-02-03 05:03:42 -08:00
parent ad0a6ac6bf
commit de784f55d3
2 changed files with 11 additions and 4 deletions

View File

@@ -638,6 +638,8 @@ static int process_arg(int c, char *optarg)
break;
case 'j':
jobs = process_jobs_arg("-j", optarg);
if (jobs != JOBS_AUTO && jobs < LONG_MAX)
jobs_max = jobs;
break;
case 136:
jobs_max = process_jobs_arg("max-jobs", optarg);
@@ -1183,6 +1185,8 @@ static void setup_parallel_compile(void)
if (maxn == -1)
/* unable to determine number of processors, default to 1 */
maxn = 1;
if (jobs < 0 || jobs == JOBS_AUTO)
jobs_scale = 1;
jobs = compute_jobs(n, jobs);
jobs_max = compute_jobs(maxn, jobs_max);
@@ -1190,7 +1194,7 @@ static void setup_parallel_compile(void)
pwarn("%s: Warning capping number of jobs to %ld * # of cpus == '%ld'",
progname, jobs_max, jobs);
jobs = jobs_max;
} else if (jobs < jobs_max)
} else if (jobs_scale && jobs < jobs_max)
/* the bigger the difference the more sample chances given */
jobs_scale = jobs_max + 1 - n;