Support auto-configuration of build-max-jobs
"build-max-jobs" and the "-j" option can now be set to "auto" to use the number of CPUs in the system. (Unlike build-cores, it doesn't use 0 to imply auto-configuration, because a) magic values are a bad idea in general; b) 0 is a legitimate value used to disable local building.) Fixes #1198.
This commit is contained in:
parent
3fab1f04a7
commit
7251d048fa
4 changed files with 18 additions and 7 deletions
|
@ -101,9 +101,9 @@ flag, e.g. <literal>--option gc-keep-outputs false</literal>.</para>
|
||||||
|
|
||||||
<listitem><para>This option defines the maximum number of jobs
|
<listitem><para>This option defines the maximum number of jobs
|
||||||
that Nix will try to build in parallel. The default is
|
that Nix will try to build in parallel. The default is
|
||||||
<literal>1</literal>. You should generally set it to the number
|
<literal>1</literal>. The special value <literal>auto</literal>
|
||||||
of CPUs in your system (e.g., <literal>2</literal> on an Athlon 64
|
causes Nix to use the number of CPUs in your system. It can be
|
||||||
X2). It can be overridden using the <option
|
overridden using the <option
|
||||||
linkend='opt-max-jobs'>--max-jobs</option> (<option>-j</option>)
|
linkend='opt-max-jobs'>--max-jobs</option> (<option>-j</option>)
|
||||||
command line switch.</para></listitem>
|
command line switch.</para></listitem>
|
||||||
|
|
||||||
|
|
|
@ -93,8 +93,9 @@
|
||||||
<term><option>-j</option></term>
|
<term><option>-j</option></term>
|
||||||
|
|
||||||
<listitem><para>Sets the maximum number of build jobs that Nix will
|
<listitem><para>Sets the maximum number of build jobs that Nix will
|
||||||
perform in parallel to the specified number. The default is
|
perform in parallel to the specified number. Specify
|
||||||
specified by the <link
|
<literal>auto</literal> to use the number of CPUs in the system.
|
||||||
|
The default is specified by the <link
|
||||||
linkend='conf-build-max-jobs'><literal>build-max-jobs</literal></link>
|
linkend='conf-build-max-jobs'><literal>build-max-jobs</literal></link>
|
||||||
configuration setting, which itself defaults to
|
configuration setting, which itself defaults to
|
||||||
<literal>1</literal>. A higher value is useful on SMP systems or to
|
<literal>1</literal>. A higher value is useful on SMP systems or to
|
||||||
|
|
|
@ -167,6 +167,10 @@ struct LegacyArgs : public MixCommonArgs
|
||||||
settings.set("build-fallback", "true");
|
settings.set("build-fallback", "true");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mkFlag1('j', "max-jobs", "jobs", "maximum number of parallel builds", [=](std::string s) {
|
||||||
|
settings.set("build-max-jobs", s);
|
||||||
|
});
|
||||||
|
|
||||||
auto intSettingAlias = [&](char shortName, const std::string & longName,
|
auto intSettingAlias = [&](char shortName, const std::string & longName,
|
||||||
const std::string & description, const std::string & dest) {
|
const std::string & description, const std::string & dest) {
|
||||||
mkFlag<unsigned int>(shortName, longName, description, [=](unsigned int n) {
|
mkFlag<unsigned int>(shortName, longName, description, [=](unsigned int n) {
|
||||||
|
@ -174,7 +178,6 @@ struct LegacyArgs : public MixCommonArgs
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
intSettingAlias('j', "max-jobs", "maximum number of parallel builds", "build-max-jobs");
|
|
||||||
intSettingAlias(0, "cores", "maximum number of CPU cores to use inside a build", "build-cores");
|
intSettingAlias(0, "cores", "maximum number of CPU cores to use inside a build", "build-cores");
|
||||||
intSettingAlias(0, "max-silent-time", "number of seconds of silence before a build is killed", "build-max-silent-time");
|
intSettingAlias(0, "max-silent-time", "number of seconds of silence before a build is killed", "build-max-silent-time");
|
||||||
intSettingAlias(0, "timeout", "number of seconds before a build is killed", "build-timeout");
|
intSettingAlias(0, "timeout", "number of seconds before a build is killed", "build-timeout");
|
||||||
|
|
|
@ -147,7 +147,14 @@ int Settings::get(const string & name, int def)
|
||||||
void Settings::update()
|
void Settings::update()
|
||||||
{
|
{
|
||||||
_get(tryFallback, "build-fallback");
|
_get(tryFallback, "build-fallback");
|
||||||
_get(maxBuildJobs, "build-max-jobs");
|
|
||||||
|
auto s = get("build-max-jobs", std::string("1"));
|
||||||
|
if (s == "auto")
|
||||||
|
maxBuildJobs = std::max(1U, std::thread::hardware_concurrency());
|
||||||
|
else
|
||||||
|
if (!string2Int(s, maxBuildJobs))
|
||||||
|
throw Error("configuration setting ‘build-max-jobs’ should be ‘auto’ or an integer");
|
||||||
|
|
||||||
_get(buildCores, "build-cores");
|
_get(buildCores, "build-cores");
|
||||||
_get(thisSystem, "system");
|
_get(thisSystem, "system");
|
||||||
_get(maxSilentTime, "build-max-silent-time");
|
_get(maxSilentTime, "build-max-silent-time");
|
||||||
|
|
Loading…
Reference in a new issue