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);
} }
} }
@ -87,19 +93,18 @@ public class LeastWorstDelay {
* *
* @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);
Matcher m = p.matcher(iolog);
assertThat(m.matches()).isTrue();
String digits = m.group(1); // @Test
assertThat(digits).isNotEmpty(); // public void testStrideRateOnly() {
double rate = Double.valueOf(digits); // ScenarioResult scenarioResult = runScenario("stride_rate");
assertThat(rate).isCloseTo(10000.0D, Offset.offset(1000D)); // String iolog = scenarioResult.getIOLog();
} // 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 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(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(25000.0D, Offset.offset(5000D)); // String iolog = scenarioResult.getIOLog();
} // System.out.println("iolog\n" + iolog);
// Pattern p = Pattern.compile(".*phase_rate.phases.servicetime.meanRate = (\\d[.\\d]+).*", Pattern.DOTALL);
// Matcher m = p.matcher(iolog);
@Test // assertThat(m.matches()).isTrue();
public void testExtensionPoint() { //
ScenarioResult scenarioResult = runScenario("extensions"); // String digits = m.group(1);
assertThat(scenarioResult.getIOLog()).contains("sum is 46"); // assertThat(digits).isNotEmpty();
} // double rate = Double.valueOf(digits);
// assertThat(rate).isCloseTo(25000.0D, Offset.offset(5000D));
@Test // }
public void testLinkedInput() { //
ScenarioResult scenarioResult = runScenario("linkedinput"); //
Pattern p = Pattern.compile(".*started leader.*started follower.*stopped leader.*stopped follower.*", // @Test
Pattern.DOTALL); // public void testExtensionPoint() {
assertThat(p.matcher(scenarioResult.getIOLog()).matches()).isTrue(); // ScenarioResult scenarioResult = runScenario("extensions");
} // assertThat(scenarioResult.getIOLog()).contains("sum is 46");
// }
@Test //
public void testExtensionCsvLogger() { // @Test
ScenarioResult scenarioResult = runScenario("extension_csvmetrics"); // public void testLinkedInput() {
assertThat(scenarioResult.getIOLog()).contains("started new " + // ScenarioResult scenarioResult = runScenario("linkedinput");
"csvlogger: logs/csvmetricstestdir"); // Pattern p = Pattern.compile(".*started leader.*started follower.*stopped leader.*stopped follower.*",
} // Pattern.DOTALL);
// assertThat(p.matcher(scenarioResult.getIOLog()).matches()).isTrue();
// }
@Test //
public void testScriptParamsVariable() { // @Test
ScenarioResult scenarioResult = runScenario("params_variable", "one", "two", "three", "four"); // public void testExtensionCsvLogger() {
assertThat(scenarioResult.getIOLog()).contains("params.get(\"one\")='two'"); // ScenarioResult scenarioResult = runScenario("extension_csvmetrics");
assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\")='four'"); // assertThat(scenarioResult.getIOLog()).contains("started new " +
assertThat(scenarioResult.getIOLog()).contains("params.size()=2"); // "csvlogger: logs/csvmetricstestdir");
assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\") [overridden-three-five]='five'"); // }
assertThat(scenarioResult.getIOLog()).contains("params.get(\"four\") [defaulted-four-niner]='niner'"); //
} //
// @Test
@Test // public void testScriptParamsVariable() {
public void testExtensionHistoStatsLogger() throws IOException { // ScenarioResult scenarioResult = runScenario("params_variable", "one", "two", "three", "four");
ScenarioResult scenarioResult = runScenario("extension_histostatslogger"); // assertThat(scenarioResult.getIOLog()).contains("params.get(\"one\")='two'");
assertThat(scenarioResult.getIOLog()).contains("stdout started " + // assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\")='four'");
"logging to logs/histostats.csv"); // assertThat(scenarioResult.getIOLog()).contains("params.size()=2");
List<String> strings = Files.readAllLines(Paths.get( // assertThat(scenarioResult.getIOLog()).contains("params.get(\"three\") [overridden-three-five]='five'");
"logs/histostats.csv")); // assertThat(scenarioResult.getIOLog()).contains("params.get(\"four\") [defaulted-four-niner]='niner'");
String logdata = strings.stream().collect(Collectors.joining("\n")); // }
assertThat(logdata).contains("min,p25,p50,p75,p90,p95,"); //
assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3); // @Test
} // public void testExtensionHistoStatsLogger() throws IOException {
// ScenarioResult scenarioResult = runScenario("extension_histostatslogger");
@Test // assertThat(scenarioResult.getIOLog()).contains("stdout started " +
public void testExtensionHistogramLogger() throws IOException { // "logging to logs/histostats.csv");
ScenarioResult scenarioResult = runScenario("extension_histologger"); // List<String> strings = Files.readAllLines(Paths.get(
assertThat(scenarioResult.getIOLog()).contains("stdout started logging to hdrhistodata.log"); // "logs/histostats.csv"));
List<String> strings = Files.readAllLines(Paths.get("hdrhistodata.log")); // String logdata = strings.stream().collect(Collectors.joining("\n"));
String logdata = strings.stream().collect(Collectors.joining("\n")); // assertThat(logdata).contains("min,p25,p50,p75,p90,p95,");
assertThat(logdata).contains(",HIST"); // assertThat(logdata.split("Tag=testhistostatslogger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3);
assertThat(logdata.split("Tag=testhistologger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3); // }
} //
// @Test
@Test // public void testExtensionHistogramLogger() throws IOException {
public void testBlockingRun() { // ScenarioResult scenarioResult = runScenario("extension_histologger");
ScenarioResult scenarioResult = runScenario("blockingrun"); // assertThat(scenarioResult.getIOLog()).contains("stdout started logging to hdrhistodata.log");
int a1end = scenarioResult.getIOLog().indexOf("blockingactivity1 finished"); // List<String> strings = Files.readAllLines(Paths.get("hdrhistodata.log"));
int a2start = scenarioResult.getIOLog().indexOf("running blockingactivity2"); // String logdata = strings.stream().collect(Collectors.joining("\n"));
assertThat(a1end).isLessThan(a2start); // assertThat(logdata).contains(",HIST");
} // assertThat(logdata.split("Tag=testhistologger.cycles.servicetime,").length).isGreaterThanOrEqualTo(3);
// }
@Test //
public void testAwaitFinished() { // @Test
ScenarioResult scenarioResult = runScenario("awaitfinished"); // public void testBlockingRun() {
scenarioResult.reportToLog(); // ScenarioResult scenarioResult = runScenario("blockingrun");
} // int a1end = scenarioResult.getIOLog().indexOf("blockingactivity1 finished");
// int a2start = scenarioResult.getIOLog().indexOf("running blockingactivity2");
@Test // assertThat(a1end).isLessThan(a2start);
public void testStartStop() { // }
ScenarioResult scenarioResult = runScenario("startstopdiag"); //
scenarioResult.reportToLog(); // @Test
int startedAt = scenarioResult.getIOLog().indexOf("starting activity teststartstopdiag"); // public void testAwaitFinished() {
int stoppedAt = scenarioResult.getIOLog().indexOf("stopped activity teststartstopdiag"); // ScenarioResult scenarioResult = runScenario("awaitfinished");
assertThat(startedAt).isGreaterThan(0); // scenarioResult.reportToLog();
assertThat(stoppedAt).isGreaterThan(startedAt); // }
} //
// @Test
@Test // public void testStartStop() {
public void testThreadChange() { // ScenarioResult scenarioResult = runScenario("startstopdiag");
ScenarioResult scenarioResult = runScenario("threadchange"); // scenarioResult.reportToLog();
int changedTo1At = scenarioResult.getIOLog().indexOf("threads now 1"); // int startedAt = scenarioResult.getIOLog().indexOf("starting activity teststartstopdiag");
int changedTo5At = scenarioResult.getIOLog().indexOf("threads now 5"); // int stoppedAt = scenarioResult.getIOLog().indexOf("stopped activity teststartstopdiag");
assertThat(changedTo1At).isGreaterThan(0); // assertThat(startedAt).isGreaterThan(0);
assertThat(changedTo5At).isGreaterThan(changedTo1At); // assertThat(stoppedAt).isGreaterThan(startedAt);
} // }
//
@Test // @Test
public void testReadMetric() { // public void testThreadChange() {
ScenarioResult scenarioResult = runScenario("readmetrics"); // ScenarioResult scenarioResult = runScenario("threadchange");
assertThat(scenarioResult.getIOLog()).contains("count: "); // 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 testExceptionPropagationFromMotorThread() { // }
ScenarioResult scenarioResult = runScenario("activityerror"); //
assertThat(scenarioResult.getException()).isPresent(); // @Test
assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\""); // public void testReadMetric() {
} // ScenarioResult scenarioResult = runScenario("readmetrics");
// assertThat(scenarioResult.getIOLog()).contains("count: ");
@Test // }
public void testExceptionPropagationFromActivityInit() { //
ScenarioResult scenarioResult = runScenario("activityiniterror"); // @Test
assertThat(scenarioResult.getException()).isPresent(); // public void testExceptionPropagationFromMotorThread() {
assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\""); // ScenarioResult scenarioResult = runScenario("activityerror");
assertThat(scenarioResult.getException()).isNotNull(); // assertThat(scenarioResult.getException()).isPresent();
} // assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\"");
// }
@Test //
public void testReportedCoDelayBursty() { // @Test
ScenarioResult scenarioResult = runScenario("cocycledelay_bursty"); // public void testExceptionPropagationFromActivityInit() {
assertThat(scenarioResult.getIOLog()).contains("step1 metrics.waittime="); // ScenarioResult scenarioResult = runScenario("activityiniterror");
assertThat(scenarioResult.getIOLog()).contains("step2 metrics.waittime="); // assertThat(scenarioResult.getException()).isPresent();
String iolog = scenarioResult.getIOLog(); // assertThat(scenarioResult.getException().get().getMessage()).contains("For input string: \"unparsable\"");
System.out.println(iolog); // assertThat(scenarioResult.getException()).isNotNull();
assertThat(iolog).contains("waittime trended back down as expected"); // }
} //
// @Test
@Test // public void testReportedCoDelayBursty() {
public void testReportedCoDelayStrict() { // ScenarioResult scenarioResult = runScenario("cocycledelay_bursty");
ScenarioResult scenarioResult = runScenario("cocycledelay_strict"); // assertThat(scenarioResult.getIOLog()).contains("step1 metrics.waittime=");
assertThat(scenarioResult.getIOLog()).contains("step1 cycles.waittime="); // assertThat(scenarioResult.getIOLog()).contains("step2 metrics.waittime=");
assertThat(scenarioResult.getIOLog()).contains("step2 cycles.waittime="); // String iolog = scenarioResult.getIOLog();
String iolog = scenarioResult.getIOLog(); // System.out.println(iolog);
System.out.println(iolog); // assertThat(iolog).contains("waittime trended back down as expected");
// TODO: ensure that waittime is staying the same or increasing // }
// after investigating minor decreasing effect //
} // @Test
// public void testReportedCoDelayStrict() {
// ScenarioResult scenarioResult = runScenario("cocycledelay_strict");
@Test // assertThat(scenarioResult.getIOLog()).contains("step1 cycles.waittime=");
public void testCycleRateChange() { // assertThat(scenarioResult.getIOLog()).contains("step2 cycles.waittime=");
ScenarioResult scenarioResult = runScenario("cycle_rate_change"); // String iolog = scenarioResult.getIOLog();
String ioLog = scenarioResult.getIOLog(); // System.out.println(iolog);
assertThat(ioLog).contains("cycles adjusted, exiting on iteration"); // // TODO: ensure that waittime is staying the same or increasing
} // // after investigating minor decreasing effect
// }
@Test //
public void testExitLogic() { //
ScenarioResult scenarioResult = runScenario( // @Test
"basicdiag", // public void testCycleRateChange() {
"type", "diag", "cyclerate", "5", "erroroncycle", "10", "cycles", "2000" // ScenarioResult scenarioResult = runScenario("cycle_rate_change");
); // String ioLog = scenarioResult.getIOLog();
} // assertThat(ioLog).contains("cycles adjusted, exiting on iteration");
// }
//
// @Test
// public void testExitLogic() {
// ScenarioResult scenarioResult = runScenario(
// "basicdiag",
// "type", "diag", "cyclerate", "5", "erroroncycle", "10", "cycles", "2000"
// );
// }
} }