Commit 9d0562db authored by Vagrant Cascadian's avatar Vagrant Cascadian
Browse files

draft attempt at enabling specific number of CPUs.

parent f2c04a3f
Loading
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -333,12 +333,19 @@ def aslr(ctx, build, vary):

def num_cpus(ctx, build, vary):
    _ = build
    if ctx.num_cpus.cpus:
        _ = _.append_setup_exec_raw('CPU_MAX=$(nproc)')
    else:
        _ = _.append_setup_exec_raw('CPU_MAX=%s' % ctx.num_cpus.cpus)
    _ = _.append_setup_exec_raw('CPU_MIN=$({ echo $CPU_MAX; echo %s; } | sort -n | head -n1)' % ctx.min_cpus)
    if ctx.min_cpus <= 0:
        raise ValueError("--min-cpus must be a positive integer: " % ctx.min_cpus)
    if not vary:
        _ = _.append_setup_exec_raw('CPU_NUM=$CPU_MIN')
    if ctx.num_cpus.cpus:
        _ = _.append_setup_exec_raw('CPU_NUM=$(if [ $CPU_MIN = $CPU_MAX ]; \
            then echo $CPU_MIN; echo >&2 "only 1 CPU is available; num_cpus is ineffective"; \
            else echo %s; fi)' % ctx.num_cpus.cpus)
    else:
        # random number between min_cpus and $(nproc)
        _ = _.append_setup_exec_raw('CPU_NUM=$(if [ $CPU_MIN = $CPU_MAX ]; \
@@ -582,6 +589,11 @@ class LocalesVariation(collections.namedtuple('_LocaleVariation', 'locale')):
    def default(cls):
        return cls(mdiffconf.strlist_set(";"))

class NumCpusVariation(collections.namedtuple('_LocaleVariation', 'cpus')):
    @classmethod
    def default(cls):
        return None

class VariationSpec(mdiffconf.ImmutableNamespace):
    @classmethod
    def default(cls, variations=VARIATIONS):
@@ -591,6 +603,7 @@ class VariationSpec(mdiffconf.ImmutableNamespace):
            "time": TimeVariation.default(),
            "domain_host": DomainHostVariation.default(),
            "locales": LocalesVariation.default(),
            "num_cpus": NumCpusVariation.default(),
        }
        return cls(**{k: default_overrides.get(k, True) for k in variations})