disable sysperf and extra tests

This commit is contained in:
Jonathan Shook 2020-02-25 12:49:29 -06:00
parent 607fdc58c9
commit ecf1fa5afd
4 changed files with 202 additions and 196 deletions

View File

@ -25,8 +25,14 @@ import java.util.concurrent.locks.LockSupport;
public class LeastWorstDelay { public class LeastWorstDelay {
public final static SysPerfData perfdata = SysPerf.get().getPerfData(false); public final static SysPerfData perfdata = SysPerf.get().getPerfData(false);
private final static long sleepThreshold = (long) perfdata.getAvgNanos_Thread_Sleep();
private final static long parkThreshold = (long) perfdata.getAvgNanos_LockSupport_ParkNanos(); //private final static long sleepThreshold = (long) perfdata
//.getAvgNanos_Thread_Sleep();
//private final static long parkThreshold = (long) perfdata
//.getAvgNanos_LockSupport_ParkNanos();
private final static long sleepThreshold = 1_000_000;
private final static long parkThreshold = 20;
/** /**
* We wish for the JVM to inline this. * We wish for the JVM to inline this.
@ -46,13 +52,13 @@ public class LeastWorstDelay {
public static void delayAsIfFor(long nanos) { public static void delayAsIfFor(long nanos) {
if (nanos > 0) { if (nanos > 0) {
if (nanos > sleepThreshold) { if (nanos > sleepThreshold) {
nanos-=sleepThreshold; nanos -= sleepThreshold;
try { try {
Thread.sleep((nanos / 1000000), (int) (nanos % 1000000)); Thread.sleep((nanos / 1000000), (int) (nanos % 1000000));
} catch (InterruptedException ignored) { } catch (InterruptedException ignored) {
} }
} else if (nanos > parkThreshold) { } else if (nanos > parkThreshold) {
nanos-=parkThreshold; nanos -= parkThreshold;
LockSupport.parkNanos(nanos); LockSupport.parkNanos(nanos);
} }
} }
@ -86,20 +92,19 @@ public class LeastWorstDelay {
* this method in other scenarios. * this method in other scenarios.
* *
* @param targetNanoTime The system nanos that the delay should attempt to return at. * @param targetNanoTime The system nanos that the delay should attempt to return at.
* perfect accuracy, which doesn't happen * perfect accuracy, which doesn't happen
*
*/ */
public void delayAsIfUntil(long targetNanoTime) { public void delayAsIfUntil(long targetNanoTime) {
long nanos = Math.max(targetNanoTime - System.nanoTime(),0L); long nanos = Math.max(targetNanoTime - System.nanoTime(), 0L);
if (nanos > 0) { if (nanos > 0) {
if (nanos > sleepThreshold) { if (nanos > sleepThreshold) {
nanos-=sleepThreshold; nanos -= sleepThreshold;
try { try {
Thread.sleep((nanos / 1000000), (int) (nanos % 1000000)); Thread.sleep((nanos / 1000000), (int) (nanos % 1000000));
} catch (InterruptedException ignored) { } catch (InterruptedException ignored) {
} }
} else if (nanos > parkThreshold) { } else if (nanos > parkThreshold) {
nanos-=parkThreshold; nanos -= parkThreshold;
LockSupport.parkNanos(nanos); LockSupport.parkNanos(nanos);
} // else there is nothing shorter than this besides spinning, and we're not doing that } // else there is nothing shorter than this besides spinning, and we're not doing that
} }

View File

@ -18,8 +18,6 @@
package io.nosqlbench.engine.api.activityapi.ratelimits; package io.nosqlbench.engine.api.activityapi.ratelimits;
import com.codahale.metrics.Timer; import com.codahale.metrics.Timer;
import io.nosqlbench.engine.api.activityapi.sysperf.SysPerf;
import io.nosqlbench.engine.api.activityapi.sysperf.SysPerfData;
import io.nosqlbench.engine.api.activityimpl.ActivityDef; import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.metrics.ActivityMetrics; import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -33,7 +31,8 @@ public class TokenFiller implements Runnable {
public final static double MIN_PER_SECOND = 10D; public final static double MIN_PER_SECOND = 10D;
public final static double MAX_PER_SECOND = 1000D; public final static double MAX_PER_SECOND = 1000D;
private final SysPerfData PERFDATA = SysPerf.get().getPerfData(false); // private final SysPerfData PERFDATA = SysPerf.get().getPerfData
// (false);
private final long interval = (long) 1E6; private final long interval = (long) 1E6;
private final TokenPool tokenPool; private final TokenPool tokenPool;

View File

@ -41,10 +41,12 @@ public class SysPerf {
} }
public synchronized static SysPerf get() { public synchronized static SysPerf get() {
if (instance == null) { throw new RuntimeException("This should not be used in this " +
instance = new SysPerf(); "release.");
} // if (instance == null) {
return instance; // instance = new SysPerf();
// }
// return instance;
} }
private static File getPerfCacheFile() { private static File getPerfCacheFile() {

View File

@ -24,15 +24,10 @@ import org.assertj.core.data.Offset;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -85,180 +80,185 @@ public class ScriptIntegrationTests {
assertThat(rate).isCloseTo(1000, Offset.offset(100.0)); assertThat(rate).isCloseTo(1000, Offset.offset(100.0));
} }
@Test // The tests below are being disabled and eventually removed.
public void testStrideRateOnly() { // The async versions are higher sensitivity and equivalent in
ScenarioResult scenarioResult = runScenario("stride_rate"); // every other way.
String iolog = scenarioResult.getIOLog(); // This should reduce the build time for integrated testing.
System.out.println("iolog\n" + iolog);
Pattern p = Pattern.compile(".*stride_rate.strides.servicetime.meanRate = (\\d[.\\d]+).*", Pattern.DOTALL); // @Test
Matcher m = p.matcher(iolog); // public void testStrideRateOnly() {
assertThat(m.matches()).isTrue(); // ScenarioResult scenarioResult = runScenario("stride_rate");
// String iolog = scenarioResult.getIOLog();
String digits = m.group(1); // System.out.println("iolog\n" + iolog);
assertThat(digits).isNotEmpty(); // Pattern p = Pattern.compile(".*stride_rate.strides.servicetime.meanRate = (\\d[.\\d]+).*", Pattern.DOTALL);
double rate = Double.valueOf(digits); // Matcher m = p.matcher(iolog);
assertThat(rate).isCloseTo(10000.0D, Offset.offset(1000D)); // assertThat(m.matches()).isTrue();
} //
// String digits = m.group(1);
@Test // assertThat(digits).isNotEmpty();
public void testPhaseRateOnly() { // double rate = Double.valueOf(digits);
ScenarioResult scenarioResult = runScenario("phase_rate"); // assertThat(rate).isCloseTo(10000.0D, Offset.offset(1000D));
String iolog = scenarioResult.getIOLog(); // }
System.out.println("iolog\n" + iolog); //
Pattern p = Pattern.compile(".*phase_rate.phases.servicetime.meanRate = (\\d[.\\d]+).*", Pattern.DOTALL); // @Test
Matcher m = p.matcher(iolog); // public void testPhaseRateOnly() {
assertThat(m.matches()).isTrue(); // ScenarioResult scenarioResult = runScenario("phase_rate");
// String iolog = scenarioResult.getIOLog();
String digits = m.group(1); // System.out.println("iolog\n" + iolog);
assertThat(digits).isNotEmpty(); // Pattern p = Pattern.compile(".*phase_rate.phases.servicetime.meanRate = (\\d[.\\d]+).*", Pattern.DOTALL);
double rate = Double.valueOf(digits); // Matcher m = p.matcher(iolog);
assertThat(rate).isCloseTo(25000.0D, Offset.offset(5000D)); // assertThat(m.matches()).isTrue();
} //
// String digits = m.group(1);
// assertThat(digits).isNotEmpty();
@Test // double rate = Double.valueOf(digits);
public void testExtensionPoint() { // assertThat(rate).isCloseTo(25000.0D, Offset.offset(5000D));
ScenarioResult scenarioResult = runScenario("extensions"); // }
assertThat(scenarioResult.getIOLog()).contains("sum is 46"); //
} //
// @Test
@Test // public void testExtensionPoint() {
public void testLinkedInput() { // ScenarioResult scenarioResult = runScenario("extensions");
ScenarioResult scenarioResult = runScenario("linkedinput"); // assertThat(scenarioResult.getIOLog()).contains("sum is 46");
Pattern p = Pattern.compile(".*started leader.*started follower.*stopped leader.*stopped follower.*", // }
Pattern.DOTALL); //
assertThat(p.matcher(scenarioResult.getIOLog()).matches()).isTrue(); // @Test
} // public void testLinkedInput() {
// ScenarioResult scenarioResult = runScenario("linkedinput");
@Test // Pattern p = Pattern.compile(".*started leader.*started follower.*stopped leader.*stopped follower.*",
public void testExtensionCsvLogger() { // Pattern.DOTALL);
ScenarioResult scenarioResult = runScenario("extension_csvmetrics"); // assertThat(p.matcher(scenarioResult.getIOLog()).matches()).isTrue();
assertThat(scenarioResult.getIOLog()).contains("started new " + // }
"csvlogger: logs/csvmetricstestdir"); //
} // @Test
// public void testExtensionCsvLogger() {
// ScenarioResult scenarioResult = runScenario("extension_csvmetrics");
@Test // assertThat(scenarioResult.getIOLog()).contains("started new " +
public void testScriptParamsVariable() { // "csvlogger: logs/csvmetricstestdir");
ScenarioResult scenarioResult = runScenario("params_variable", "one", "two", "three", "four"); // }
assertThat(scenarioResult.getIOLog()).contains("params.get(\"one\")='two'"); //
assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\")='four'"); //
assertThat(scenarioResult.getIOLog()).contains("params.size()=2"); // @Test
assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\") [overridden-three-five]='five'"); // public void testScriptParamsVariable() {
assertThat(scenarioResult.getIOLog()).contains("params.get(\"four\") [defaulted-four-niner]='niner'"); // ScenarioResult scenarioResult = runScenario("params_variable", "one", "two", "three", "four");
} // assertThat(scenarioResult.getIOLog()).contains("params.get(\"one\")='two'");
// assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\")='four'");
@Test // assertThat(scenarioResult.getIOLog()).contains("params.size()=2");
public void testExtensionHistoStatsLogger() throws IOException { // assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\") [overridden-three-five]='five'");
ScenarioResult scenarioResult = runScenario("extension_histostatslogger"); // assertThat(scenarioResult.getIOLog()).contains("params.get(\"four\") [defaulted-four-niner]='niner'");
assertThat(scenarioResult.getIOLog()).contains("stdout started " + // }
"logging to logs/histostats.csv"); //
List<String> strings = Files.readAllLines(Paths.get( // @Test
"logs/histostats.csv")); // public void testExtensionHistoStatsLogger() throws IOException {
String logdata = strings.stream().collect(Collectors.joining("\n")); // ScenarioResult scenarioResult = runScenario("extension_histostatslogger");
assertThat(logdata).contains("min,p25,p50,p75,p90,p95,"); // assertThat(scenarioResult.getIOLog()).contains("stdout started " +
assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3); // "logging to logs/histostats.csv");
} // List<String> strings = Files.readAllLines(Paths.get(
// "logs/histostats.csv"));
@Test // String logdata = strings.stream().collect(Collectors.joining("\n"));
public void testExtensionHistogramLogger() throws IOException { // assertThat(logdata).contains("min,p25,p50,p75,p90,p95,");
ScenarioResult scenarioResult = runScenario("extension_histologger"); // assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3);
assertThat(scenarioResult.getIOLog()).contains("stdout started logging to hdrhistodata.log"); // }
List<String> strings = Files.readAllLines(Paths.get("hdrhistodata.log")); //
String logdata = strings.stream().collect(Collectors.joining("\n")); // @Test
assertThat(logdata).contains(",HIST"); // public void testExtensionHistogramLogger() throws IOException {
assertThat(logdata.split("Tag=testhistologger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3); // ScenarioResult scenarioResult = runScenario("extension_histologger");
} // assertThat(scenarioResult.getIOLog()).contains("stdout started logging to hdrhistodata.log");
// List<String> strings = Files.readAllLines(Paths.get("hdrhistodata.log"));
@Test // String logdata = strings.stream().collect(Collectors.joining("\n"));
public void testBlockingRun() { // assertThat(logdata).contains(",HIST");
ScenarioResult scenarioResult = runScenario("blockingrun"); // assertThat(logdata.split("Tag=testhistologger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3);
int a1end = scenarioResult.getIOLog().indexOf("blockingactivity1 finished"); // }
int a2start = scenarioResult.getIOLog().indexOf("running blockingactivity2"); //
assertThat(a1end).isLessThan(a2start); // @Test
} // public void testBlockingRun() {
// ScenarioResult scenarioResult = runScenario("blockingrun");
@Test // int a1end = scenarioResult.getIOLog().indexOf("blockingactivity1 finished");
public void testAwaitFinished() { // int a2start = scenarioResult.getIOLog().indexOf("running blockingactivity2");
ScenarioResult scenarioResult = runScenario("awaitfinished"); // assertThat(a1end).isLessThan(a2start);
scenarioResult.reportToLog(); // }
} //
// @Test
@Test // public void testAwaitFinished() {
public void testStartStop() { // ScenarioResult scenarioResult = runScenario("awaitfinished");
ScenarioResult scenarioResult = runScenario("startstopdiag"); // scenarioResult.reportToLog();
scenarioResult.reportToLog(); // }
int startedAt = scenarioResult.getIOLog().indexOf("starting activity teststartstopdiag"); //
int stoppedAt = scenarioResult.getIOLog().indexOf("stopped activity teststartstopdiag"); // @Test
assertThat(startedAt).isGreaterThan(0); // public void testStartStop() {
assertThat(stoppedAt).isGreaterThan(startedAt); // ScenarioResult scenarioResult = runScenario("startstopdiag");
} // scenarioResult.reportToLog();
// int startedAt = scenarioResult.getIOLog().indexOf("starting activity teststartstopdiag");
@Test // int stoppedAt = scenarioResult.getIOLog().indexOf("stopped activity teststartstopdiag");
public void testThreadChange() { // assertThat(startedAt).isGreaterThan(0);
ScenarioResult scenarioResult = runScenario("threadchange"); // assertThat(stoppedAt).isGreaterThan(startedAt);
int changedTo1At = scenarioResult.getIOLog().indexOf("threads now 1"); // }
int changedTo5At = scenarioResult.getIOLog().indexOf("threads now 5"); //
assertThat(changedTo1At).isGreaterThan(0); // @Test
assertThat(changedTo5At).isGreaterThan(changedTo1At); // public void testThreadChange() {
} // ScenarioResult scenarioResult = runScenario("threadchange");
// int changedTo1At = scenarioResult.getIOLog().indexOf("threads now 1");
@Test // int changedTo5At = scenarioResult.getIOLog().indexOf("threads now 5");
public void testReadMetric() { // assertThat(changedTo1At).isGreaterThan(0);
ScenarioResult scenarioResult = runScenario("readmetrics"); // assertThat(changedTo5At).isGreaterThan(changedTo1At);
assertThat(scenarioResult.getIOLog()).contains("count: "); // }
} //
// @Test
@Test // public void testReadMetric() {
public void testExceptionPropagationFromMotorThread() { // ScenarioResult scenarioResult = runScenario("readmetrics");
ScenarioResult scenarioResult = runScenario("activityerror"); // assertThat(scenarioResult.getIOLog()).contains("count: ");
assertThat(scenarioResult.getException()).isPresent(); // }
assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\""); //
} // @Test
// public void testExceptionPropagationFromMotorThread() {
@Test // ScenarioResult scenarioResult = runScenario("activityerror");
public void testExceptionPropagationFromActivityInit() { // assertThat(scenarioResult.getException()).isPresent();
ScenarioResult scenarioResult = runScenario("activityiniterror"); // assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\"");
assertThat(scenarioResult.getException()).isPresent(); // }
assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\""); //
assertThat(scenarioResult.getException()).isNotNull(); // @Test
} // public void testExceptionPropagationFromActivityInit() {
// ScenarioResult scenarioResult = runScenario("activityiniterror");
@Test // assertThat(scenarioResult.getException()).isPresent();
public void testReportedCoDelayBursty() { // assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\"");
ScenarioResult scenarioResult = runScenario("cocycledelay_bursty"); // assertThat(scenarioResult.getException()).isNotNull();
assertThat(scenarioResult.getIOLog()).contains("step1 metrics.waittime="); // }
assertThat(scenarioResult.getIOLog()).contains("step2 metrics.waittime="); //
String iolog = scenarioResult.getIOLog(); // @Test
System.out.println(iolog); // public void testReportedCoDelayBursty() {
assertThat(iolog).contains("waittime trended back down as expected"); // ScenarioResult scenarioResult = runScenario("cocycledelay_bursty");
} // assertThat(scenarioResult.getIOLog()).contains("step1 metrics.waittime=");
// assertThat(scenarioResult.getIOLog()).contains("step2 metrics.waittime=");
@Test // String iolog = scenarioResult.getIOLog();
public void testReportedCoDelayStrict() { // System.out.println(iolog);
ScenarioResult scenarioResult = runScenario("cocycledelay_strict"); // assertThat(iolog).contains("waittime trended back down as expected");
assertThat(scenarioResult.getIOLog()).contains("step1 cycles.waittime="); // }
assertThat(scenarioResult.getIOLog()).contains("step2 cycles.waittime="); //
String iolog = scenarioResult.getIOLog(); // @Test
System.out.println(iolog); // public void testReportedCoDelayStrict() {
// TODO: ensure that waittime is staying the same or increasing // ScenarioResult scenarioResult = runScenario("cocycledelay_strict");
// after investigating minor decreasing effect // assertThat(scenarioResult.getIOLog()).contains("step1 cycles.waittime=");
} // assertThat(scenarioResult.getIOLog()).contains("step2 cycles.waittime=");
// String iolog = scenarioResult.getIOLog();
// System.out.println(iolog);
@Test // // TODO: ensure that waittime is staying the same or increasing
public void testCycleRateChange() { // // after investigating minor decreasing effect
ScenarioResult scenarioResult = runScenario("cycle_rate_change"); // }
String ioLog = scenarioResult.getIOLog(); //
assertThat(ioLog).contains("cycles adjusted, exiting on iteration"); //
} // @Test
// public void testCycleRateChange() {
@Test // ScenarioResult scenarioResult = runScenario("cycle_rate_change");
public void testExitLogic() { // String ioLog = scenarioResult.getIOLog();
ScenarioResult scenarioResult = runScenario( // assertThat(ioLog).contains("cycles adjusted, exiting on iteration");
"basicdiag", // }
"type", "diag", "cyclerate", "5", "erroroncycle", "10", "cycles", "2000" //
); // @Test
} // public void testExitLogic() {
// ScenarioResult scenarioResult = runScenario(
// "basicdiag",
// "type", "diag", "cyclerate", "5", "erroroncycle", "10", "cycles", "2000"
// );
// }
} }