Add --local_test_jobs to limit local test concurrency
Users have asked for ways to control the concurrency level of their
local tests. They can do it right now using the --local_resources
option, but that is unintuitive and affects the parallelism of
non-test actions.
This option changes the kind of resources obtained for local tests. If
set, the CPU, RAM, and IO dimensions for local tests will not be used,
and a new localTestCount dimension will be used, where the capacity is
equal to the option's value, and each local test consumes one unit.
--
MOS_MIGRATED_REVID=87177698
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 0c8d404..b248b05 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -42,6 +42,7 @@
import com.google.devtools.build.lib.actions.ExecutorInitException;
import com.google.devtools.build.lib.actions.LocalHostCapacity;
import com.google.devtools.build.lib.actions.ResourceManager;
+import com.google.devtools.build.lib.actions.ResourceSet;
import com.google.devtools.build.lib.actions.SpawnActionContext;
import com.google.devtools.build.lib.actions.TestExecException;
import com.google.devtools.build.lib.actions.cache.ActionCache;
@@ -760,11 +761,12 @@
private void configureResourceManager(BuildRequest request) {
ResourceManager resourceMgr = ResourceManager.instance();
ExecutionOptions options = request.getOptions(ExecutionOptions.class);
+ ResourceSet resources;
if (options.availableResources != null) {
- resourceMgr.setAvailableResources(options.availableResources);
+ resources = options.availableResources;
resourceMgr.setRamUtilizationPercentage(100);
} else {
- resourceMgr.setAvailableResources(LocalHostCapacity.getLocalHostCapacity());
+ resources = LocalHostCapacity.getLocalHostCapacity();
resourceMgr.setRamUtilizationPercentage(options.ramUtilizationPercentage);
if (options.useResourceAutoSense) {
getReporter().handle(
@@ -772,6 +774,14 @@
}
ResourceManager.instance().setAutoSensing(/*autosense=*/false);
}
+
+ resourceMgr.setAvailableResources(ResourceSet.create(
+ resources.getMemoryMb(),
+ resources.getCpuUsage(),
+ resources.getIoUsage(),
+ request.getExecutionOptions().usingLocalTestJobs()
+ ? request.getExecutionOptions().localTestJobs : Integer.MAX_VALUE
+ ));
}
/**