aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2016-06-21 14:18:40 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2016-06-21 14:47:56 +0000
commitc20091450f48b34c909716452767312cfb8f2fc4 (patch)
tree30870ddac16afadac22ec2c1eb80570ebd692043 /src/main/java/com/google/devtools/build/lib/rules
parent24ec1bfa0b9ed78ce5ce7b7e90612f24a60d2a54 (diff)
When running Java-based tools, use -XX:+TieredCompilation -XX:TieredStopAtLevel=1 instead of -client, as the latter is ignored on 64-bit JVMs since at least JDK 6.
The new flags have been shown to cut down CPU time by 50% due to reduced time spent in JIT and improving overall run time for short running actions, some times also cutting them in half. Here's a benchmark of Bazel building itself, giving a nice 2-4x speedup: ./output/bazel clean && ./output/bazel build //src:bazel Bazel before this change: INFO: Elapsed time: 197.783s, Critical Path: 194.10s INFO: Elapsed time: 198.928s, Critical Path: 195.65s INFO: Elapsed time: 194.913s, Critical Path: 191.56s Bazel before this change with --strategy=Javac=worker: INFO: Elapsed time: 130.436s, Critical Path: 124.27s INFO: Elapsed time: 116.114s, Critical Path: 112.30s INFO: Elapsed time: 116.852s, Critical Path: 84.45s Bazel with this change: INFO: Elapsed time: 121.625s, Critical Path: 119.08s INFO: Elapsed time: 119.401s, Critical Path: 115.80s INFO: Elapsed time: 121.198s, Critical Path: 119.03s Bazel with this change and --strategy=Javac=worker: INFO: Elapsed time: 54.456s, Critical Path: 51.28s INFO: Elapsed time: 53.272s, Critical Path: 51.09s INFO: Elapsed time: 52.966s, Critical Path: 49.86s Bazel with this change and --strategy=Javac=worker and stripping -XX:TieredStopAtLevel=1 from JVM flags when using workers: INFO: Elapsed time: 61.599s, Critical Path: 58.93s INFO: Elapsed time: 48.695s, Critical Path: 45.02s INFO: Elapsed time: 46.874s, Critical Path: 43.91s INFO: Elapsed time: 46.174s, Critical Path: 43.32s (The latter is a possible optimization for workers and it's also nice to know that the limited tiered compilation does not hurt their performance.) -- MOS_MIGRATED_REVID=125448089
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java47
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java28
5 files changed, 51 insertions, 37 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
index 3e2b13ae58..425fb0eac5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
@@ -27,7 +27,6 @@ import com.google.devtools.build.lib.collect.IterablesChain;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
@@ -233,7 +232,8 @@ public class DeployArchiveBuilder {
outputJar, javaStartClass, deployManifestLines, buildInfoArtifacts, classpathResources,
runtimeClasspath, includeBuildData, compression, launcher);
- List<String> jvmArgs = ImmutableList.of("-client", SINGLEJAR_MAX_MEMORY);
+ ImmutableList<String> jvmArgs =
+ ImmutableList.of("-XX:+TieredCompilation", "-XX:TieredStopAtLevel=1", SINGLEJAR_MAX_MEMORY);
ResourceSet resourceSet =
ResourceSet.createWithRamCpuIo(/*memoryMb = */200.0, /*cpuUsage = */.2, /*ioUsage=*/.2);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
index d0da0c420a..6e90bae2cd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
@@ -340,25 +340,34 @@ public final class JavaCompilationHelper extends BaseJavaCompilationHelper {
*/
public void createGenJarAction(Artifact classJar, Artifact manifestProto,
Artifact genClassJar) {
- getRuleContext().registerAction(new SpawnAction.Builder()
- .addInput(manifestProto)
- .addInput(classJar)
- .addOutput(genClassJar)
- .addTransitiveInputs(getHostJavabaseInputsNonStatic(getRuleContext()))
- .setJarExecutable(
- getRuleContext().getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(),
- getGenClassJar(ruleContext),
- ImmutableList.of("-client", GENCLASS_MAX_MEMORY))
- .setCommandLine(CustomCommandLine.builder()
- .addExecPath("--manifest_proto", manifestProto)
- .addExecPath("--class_jar", classJar)
- .addExecPath("--output_jar", genClassJar)
- .add("--temp_dir").addPath(tempDir(genClassJar))
- .build())
- .useParameterFile(ParameterFileType.SHELL_QUOTED)
- .setProgressMessage("Building genclass jar " + genClassJar.prettyPrint())
- .setMnemonic("JavaSourceJar")
- .build(getRuleContext()));
+ ImmutableList<String> jvmOpts =
+ ImmutableList.of("-XX:+TieredCompilation", "-XX:TieredStopAtLevel=1", GENCLASS_MAX_MEMORY);
+ getRuleContext()
+ .registerAction(
+ new SpawnAction.Builder()
+ .addInput(manifestProto)
+ .addInput(classJar)
+ .addOutput(genClassJar)
+ .addTransitiveInputs(getHostJavabaseInputsNonStatic(getRuleContext()))
+ .setJarExecutable(
+ getRuleContext()
+ .getHostConfiguration()
+ .getFragment(Jvm.class)
+ .getJavaExecutable(),
+ getGenClassJar(ruleContext),
+ jvmOpts)
+ .setCommandLine(
+ CustomCommandLine.builder()
+ .addExecPath("--manifest_proto", manifestProto)
+ .addExecPath("--class_jar", classJar)
+ .addExecPath("--output_jar", genClassJar)
+ .add("--temp_dir")
+ .addPath(tempDir(genClassJar))
+ .build())
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building genclass jar " + genClassJar.prettyPrint())
+ .setMnemonic("JavaSourceJar")
+ .build(getRuleContext()));
}
/** Returns the GenClass deploy jar Artifact. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index 642ec850a2..5dafe2a6e6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -357,7 +357,9 @@ public class JavaOptions extends FragmentOptions {
JavaOptions host = (JavaOptions) getDefault();
host.javaBase = hostJavaBase;
- host.jvmOpts = ImmutableList.of("-client", "-XX:ErrorFile=/dev/stderr");
+ host.jvmOpts =
+ ImmutableList.of(
+ "-XX:+TieredCompilation", "-XX:TieredStopAtLevel=1", "-XX:ErrorFile=/dev/stderr");
host.javacOpts = javacOpts;
host.javaToolchain = hostJavaToolchain;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
index db588621f1..4d20691236 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
@@ -83,7 +83,10 @@ public final class JavaToolchainRule implements RuleDefinition {
The list of arguments for the JVM when invoking the Java compiler. Please refer to the Java
virtual machine documentation for the extensive list of possible flags for this option.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
- .add(attr("jvm_opts", STRING_LIST).value(ImmutableList.<String>of("-client")))
+ .add(
+ attr("jvm_opts", STRING_LIST)
+ .value(
+ ImmutableList.<String>of("-XX:+TieredCompilation", "-XX:TieredStopAtLevel=1")))
/* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(javac) -->
Label of the javac jar.
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
index 00b24779a5..59e41c04a7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
@@ -61,20 +61,20 @@ public final class SingleJarActionBuilder {
ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable();
NestedSet<Artifact> hostJavabaseInputs = JavaHelper.getHostJavabaseInputs(ruleContext);
Artifact singleJar = getSingleJar(ruleContext);
- ruleContext.registerAction(new SpawnAction.Builder()
- .addOutput(outputJar)
- .addInputs(resources.values())
- .addInputs(resourceJars)
- .addTransitiveInputs(hostJavabaseInputs)
- .setJarExecutable(
- javaPath,
- singleJar,
- ImmutableList.of("-client", SINGLEJAR_MAX_MEMORY))
- .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
- .useParameterFile(ParameterFileType.SHELL_QUOTED)
- .setProgressMessage("Building source jar " + outputJar.prettyPrint())
- .setMnemonic("JavaSourceJar")
- .build(ruleContext));
+ ImmutableList<String> jvmOpts =
+ ImmutableList.of("-XX:+TieredCompilation", "-XX:TieredStopAtLevel=1", SINGLEJAR_MAX_MEMORY);
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .addOutput(outputJar)
+ .addInputs(resources.values())
+ .addInputs(resourceJars)
+ .addTransitiveInputs(hostJavabaseInputs)
+ .setJarExecutable(javaPath, singleJar, jvmOpts)
+ .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building source jar " + outputJar.prettyPrint())
+ .setMnemonic("JavaSourceJar")
+ .build(ruleContext));
}
/** Returns the SingleJar deploy jar Artifact. */