This is an automated email from the ASF dual-hosted git repository.
smgoller pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git
The following commit(s) were added to refs/heads/develop by this push:
new eb753a0 GEODE-6458: add profiler argument support (#65)
eb753a0 is described below
commit eb753a09b12ee583113f9d0ccb7a66f04e5e9075
Author: Helena Bales <[email protected]>
AuthorDate: Tue Mar 12 10:18:53 2019 -0700
GEODE-6458: add profiler argument support (#65)
* Added profiler argument support.
* take profile snapshot on jvm close and copy snapshot with benchmark
results
Signed-off-by: Jacob Barrett <[email protected]>
* More string replacements.
* remove dependency on StringUtil since Geode may not have that
Signed-off-by: Helena A. Bales <[email protected]>
* GEODE-6458: add options for profiler
add options to run with a profiler, attached to all members.
Signed-off-by: Sean Goller <[email protected]>
---
geode-benchmarks/build.gradle | 1 +
.../geode/benchmark/topology/ClientServerTopology.java | 17 ++++++++++++++---
gradle/dependency-versions.properties | 2 +-
.../org/apache/geode/perftest/jvms/JVMLauncher.java | 17 ++++++++++++++++-
.../java/org/apache/geode/perftest/jvms/RemoteJVMs.java | 9 +++++++++
.../apache/geode/perftest/runner/DefaultTestRunner.java | 9 +++++++--
6 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/geode-benchmarks/build.gradle b/geode-benchmarks/build.gradle
index 8858295..bc6f097 100644
--- a/geode-benchmarks/build.gradle
+++ b/geode-benchmarks/build.gradle
@@ -69,6 +69,7 @@ task benchmark(type: Test) {
systemProperty 'TEST_HOSTS', project.findProperty('hosts')
systemProperty 'TEST_METADATA', project.findProperty('metadata')
systemProperty 'OUTPUT_DIR', outputDir
+ systemProperty 'benchmark.profiler.argument',
project.findProperty('benchmark.profiler.argument')
doFirst {
if(!project.hasProperty('hosts')) {
diff --git
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
index 4471dbf..3a30106 100644
---
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
+++
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
@@ -19,6 +19,8 @@ import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLI
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
import static
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import org.bouncycastle.util.Arrays;
+
import org.apache.geode.benchmark.tasks.StartClient;
import org.apache.geode.benchmark.tasks.StartLocator;
import org.apache.geode.benchmark.tasks.StartServer;
@@ -49,12 +51,21 @@ public class ClientServerTopology {
testConfig.role(SERVER, NUM_SERVERS);
testConfig.role(CLIENT, NUM_CLIENTS);
- testConfig.jvmArgs(CLIENT, JVM_ARGS);
- testConfig.jvmArgs(LOCATOR, JVM_ARGS);
- testConfig.jvmArgs(SERVER, JVM_ARGS);
+ String profilerArgument =
System.getProperty("benchmark.profiler.argument");
+ testConfig.jvmArgs(CLIENT, appendIfNotEmpty(JVM_ARGS, profilerArgument));
+ testConfig.jvmArgs(LOCATOR, appendIfNotEmpty(JVM_ARGS, profilerArgument));
+ testConfig.jvmArgs(SERVER, appendIfNotEmpty(JVM_ARGS, profilerArgument));
testConfig.before(new StartLocator(LOCATOR_PORT), LOCATOR);
testConfig.before(new StartServer(LOCATOR_PORT), SERVER);
testConfig.before(new StartClient(LOCATOR_PORT), CLIENT);
}
+
+ private static final String[] appendIfNotEmpty(String[] a, String b) {
+ if (null == b || b.length() == 0) {
+ return a;
+ }
+
+ return Arrays.append(a, b);
+ }
}
diff --git a/gradle/dependency-versions.properties
b/gradle/dependency-versions.properties
index e906204..c0fe3d2 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -17,7 +17,7 @@
junit-jupiter-api.version = 5.3.2
junit-jupiter-engine.version = 5.3.2
junit-pioneer.version = 0.3.0
-geode-core.version = 1.7.0
+geode-core.version = 1.8.0
slf4j-simple.version = 1.7.25
sshj.version = 0.26.0
commons-io.version = 2.6
diff --git
a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
index 077c2e4..286f495 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
@@ -86,9 +86,24 @@ class JVMLauncher {
command.add("-D" + RemoteJVMFactory.JVM_ID + "=" + jvmConfig.getId());
command.add("-D" + RemoteJVMFactory.OUTPUT_DIR + "=" +
jvmConfig.getOutputDir());
command.add("-Xloggc:" + jvmConfig.getOutputDir() + "/gc.log");
- command.addAll(jvmConfig.getJvmArgs());
+ command.addAll(replaceTokens(jvmConfig.getJvmArgs(), jvmConfig));
command.add(ChildJVM.class.getName());
return command.toArray(new String[0]);
}
+
+ private static final List<String> replaceTokens(List<String> args,
JVMMapping jvmConfig) {
+ List<String> replaced = new ArrayList<>(args.size());
+ for (String arg : args) {
+ replaced.add(replaceTokens(arg, jvmConfig));
+ }
+ return replaced;
+ }
+
+ private static String replaceTokens(String arg, JVMMapping jvmConfig) {
+ arg = arg.replace("OUTPUT_DIR", jvmConfig.getOutputDir());
+ arg = arg.replace("JVM_ROLE", jvmConfig.getRole());
+ arg = arg.replace("JVM_ID", Integer.toString(jvmConfig.getId()));
+ return arg;
+ }
}
diff --git
a/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
b/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
index 337e6ed..d464ed9 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/RemoteJVMs.java
@@ -69,6 +69,15 @@ public class RemoteJVMs implements AutoCloseable {
infra.close();
}
+ public void closeController() throws IOException, ExecutionException,
InterruptedException {
+ controller.close();
+ exited.get();
+ }
+
+ public void closeInfra() throws IOException, InterruptedException {
+ infra.close();
+ }
+
/**
* Copy results to the provided output directory
*/
diff --git
a/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestRunner.java
b/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestRunner.java
index 04e324b..c231caf 100644
---
a/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestRunner.java
+++
b/harness/src/main/java/org/apache/geode/perftest/runner/DefaultTestRunner.java
@@ -123,8 +123,8 @@ public class DefaultTestRunner implements TestRunner {
logger.info("Lauching JVMs...");
// launch JVMs in parallel, hook them up
- try (RemoteJVMs remoteJVMs = remoteJvmFactory.launch(roles, jvmArgs)) {
-
+ RemoteJVMs remoteJVMs = remoteJvmFactory.launch(roles, jvmArgs);
+ try {
logger.info("Starting before tasks...");
runTasks(config.getBefore(), remoteJVMs);
@@ -133,11 +133,16 @@ public class DefaultTestRunner implements TestRunner {
logger.info("Starting after tasks...");
runTasks(config.getAfter(), remoteJVMs);
+ } finally {
+ // Close before copy otherwise logs, stats, and profiles are incomplete
or missing.
+ remoteJVMs.closeController();
logger.info("Copying results...");
remoteJVMs.copyResults(benchmarkOutput);
+ remoteJVMs.closeInfra();
}
+
}
private void runTasks(List<TestConfig.TestStep> steps,