mirror of
https://github.com/nosqlbench/nosqlbench.git
synced 2025-02-25 18:55:28 -06:00
optimizer naming updates, fixes for _impl
This commit is contained in:
parent
0a4b105c3e
commit
4e9963ab17
@ -29,7 +29,10 @@ public class NBJavaNativeResolver implements NBInvokableResolver {
|
||||
@Override
|
||||
public NBInvokableCommand resolve(Cmd cmd, NBBufferedContainer parent, String phaseName) {
|
||||
return switch (cmd.getCmdType()) {
|
||||
case CmdType.indirect -> NBJavaCommandLoader.init(cmd.getArgValue("_impl"), parent, phaseName, cmd.getTargetContext());
|
||||
case CmdType.indirect -> {
|
||||
String implName = cmd.takeArgValue("_impl");
|
||||
yield NBJavaCommandLoader.init(implName, parent, phaseName, cmd.getTargetContext());
|
||||
}
|
||||
case CmdType.java -> NBJavaCommandLoader.init(cmd.getArgValue("class"), parent, phaseName, cmd.getTargetContext());
|
||||
default -> null;
|
||||
};
|
||||
|
@ -55,6 +55,12 @@ public class Cmd {
|
||||
return cmdArg.getValue();
|
||||
|
||||
}
|
||||
|
||||
public String takeArgValue(String paramName) {
|
||||
String argValue = getArgValue(paramName);
|
||||
this.cmdArgs.remove(paramName);
|
||||
return argValue;
|
||||
}
|
||||
public String getArgValue(String paramName) {
|
||||
CmdArg cmdArg = this.cmdArgs.get(paramName);
|
||||
if (cmdArg==null) {
|
||||
|
@ -20,7 +20,7 @@ import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBInvokableCommand;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
|
||||
@Service(value = NBCommandInfo.class,selector = "start")
|
||||
@Service(value = NBCommandInfo.class,selector = "example")
|
||||
public class INFO_example extends NBCommandInfo {
|
||||
@Override
|
||||
public Class<? extends NBInvokableCommand> getType() {
|
||||
|
@ -77,6 +77,7 @@ public class NBCommandAssembly {
|
||||
throw new BasicError("Found zero commands for spec;" + cmd);
|
||||
}
|
||||
String containerName = cmd.getTargetContext();
|
||||
params.remove("_impl");
|
||||
parameterizedInvocations.add(new CommandInvocation(command, params, containerName));
|
||||
}
|
||||
return parameterizedInvocations;
|
||||
|
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.nb;
|
||||
|
||||
/**
|
||||
* This class is just a place holder. It holds a place.
|
||||
* If only nexus understood aggregator module without src...
|
||||
*/
|
||||
public class PlaceHolder {
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.optimo;
|
||||
package io.nosqlbench.scenarios.simframe;
|
||||
|
||||
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
|
||||
@ -28,7 +28,6 @@ import java.util.concurrent.locks.LockSupport;
|
||||
|
||||
public class SimFrameUtils {
|
||||
|
||||
|
||||
public static void awaitActivity(Activity flywheel) {
|
||||
// await flywheel actually spinning, or timeout with error
|
||||
NBMetricTimer result_success_timer = flywheel.find().timer("name:result_success");
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax;
|
||||
package io.nosqlbench.scenarios.simframe.capture;
|
||||
|
||||
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricGauge;
|
||||
@ -22,8 +22,8 @@ import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricHistogram;
|
||||
import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricTimer;
|
||||
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
|
||||
|
||||
public class FindmaxFrameData extends SimFrameCapture {
|
||||
public FindmaxFrameData(Activity activity) {
|
||||
public class SimFrameValueData extends SimFrameCapture {
|
||||
public SimFrameValueData(Activity activity) {
|
||||
NBMetricTimer result_timer = activity.find().timer("name:result");
|
||||
NBMetricTimer result_success_timer = activity.find().timer("name:result_success");
|
||||
NBMetricGauge cyclerate_gauge = activity.find().gauge("name=config_cyclerate");
|
||||
@ -31,13 +31,13 @@ public class FindmaxFrameData extends SimFrameCapture {
|
||||
NBMetricHistogram tries_histo = tries_histo_src.attachHdrDeltaHistogram();
|
||||
|
||||
addDirect("target_rate",
|
||||
() -> cyclerate_gauge.getValue(),
|
||||
cyclerate_gauge::getValue,
|
||||
Double.NaN);
|
||||
addDeltaTime("achieved_oprate",
|
||||
() -> result_timer.getCount(),
|
||||
result_timer::getCount,
|
||||
Double.NaN);
|
||||
addDeltaTime("achieved_ok_oprate",
|
||||
() -> result_success_timer.getCount()
|
||||
result_success_timer::getCount
|
||||
, 1.0);
|
||||
|
||||
addRemix("achieved_success_ratio", vars -> {
|
@ -14,9 +14,9 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.optimo;
|
||||
|
||||
public class ThreadSpec {
|
||||
public ThreadSpec(double threads) {
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The types in this package are used to define observable dependent variables,
|
||||
* specify how they are measured, formulate them into a value function, and provide
|
||||
* a view of these over time as frames are executed.
|
||||
*/
|
||||
package io.nosqlbench.scenarios.simframe.capture;
|
@ -1,23 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2023 nosqlbench
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.generic;
|
||||
|
||||
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||
|
||||
public interface ParamsEffector<P extends Record> {
|
||||
P applyParams(P ptype, Activity activity);
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBBufferedContainer;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
|
||||
@ -23,8 +23,9 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitie
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
|
||||
import io.nosqlbench.scenarios.simframe.findmax.planners.FindmaxPlannerType;
|
||||
import io.nosqlbench.scenarios.simframe.optimo.SimFrameUtils;
|
||||
import io.nosqlbench.scenarios.simframe.capture.SimFrameValueData;
|
||||
import io.nosqlbench.scenarios.simframe.optimizers.planners.OptimizerPlannerTypes;
|
||||
import io.nosqlbench.scenarios.simframe.SimFrameUtils;
|
||||
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@ -52,11 +53,11 @@ import java.io.Reader;
|
||||
*
|
||||
* <P>This can be tested as <PRE>{@code nb5 --show-stacktraces java io.nosqlbench.scenarios.findmax.SC_findmax threads=36}</PRE></P>
|
||||
*/
|
||||
@Service(value = NBBaseCommand.class,selector = "findmax")
|
||||
public class NB_findmax extends NBBaseCommand {
|
||||
private final static Logger logger = LogManager.getLogger(NB_findmax.class);
|
||||
@Service(value = NBBaseCommand.class,selector = "optimize")
|
||||
public class CMD_optimize extends NBBaseCommand {
|
||||
private final static Logger logger = LogManager.getLogger(CMD_optimize.class);
|
||||
|
||||
public NB_findmax(NBBufferedContainer parentComponent, String scenarioName, String context) {
|
||||
public CMD_optimize(NBBufferedContainer parentComponent, String scenarioName, String context) {
|
||||
super(parentComponent, scenarioName, context);
|
||||
}
|
||||
|
||||
@ -65,9 +66,9 @@ public class NB_findmax extends NBBaseCommand {
|
||||
Activity flywheel = SimFrameUtils.findFlywheelActivity(controller, params.get("activity"));
|
||||
stdout.println("starting analysis on activity '" + flywheel.getAlias() + "'");
|
||||
SimFrameUtils.awaitActivity(flywheel);
|
||||
SimFrameCapture capture = new FindmaxFrameData(flywheel);
|
||||
SimFrameCapture capture = new SimFrameValueData(flywheel);
|
||||
String plannerType = params.getOrDefault("planner", "ratchet");
|
||||
FindmaxPlannerType plannerImpl = FindmaxPlannerType.valueOf(plannerType);
|
||||
OptimizerPlannerTypes plannerImpl = OptimizerPlannerTypes.valueOf(plannerType);
|
||||
SimFramePlanner<?,?> planner = plannerImpl.createPlanner(params);
|
||||
Record result = planner.analyze(flywheel, capture, stdout, stderr, controller);
|
||||
stdout.println("result:\n" + result);
|
@ -14,17 +14,16 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBBaseCommand;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.execution.NBCommandInfo;
|
||||
import io.nosqlbench.nb.annotations.Service;
|
||||
import io.nosqlbench.scenarios.simframe.optimo.NB_optimo;
|
||||
|
||||
@Service(value = NBCommandInfo.class,selector = "findmax")
|
||||
public class NBFindmaxInfo extends NBCommandInfo {
|
||||
@Service(value = NBCommandInfo.class,selector = "optimize")
|
||||
public class INFO_optimize extends NBCommandInfo {
|
||||
@Override
|
||||
public Class<? extends NBBaseCommand> getType() {
|
||||
return NB_findmax.class;
|
||||
return CMD_optimize.class;
|
||||
}
|
||||
}
|
@ -14,25 +14,25 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
import io.nosqlbench.scenarios.simframe.findmax.planners.rampup.FindmaxRampup;
|
||||
import io.nosqlbench.scenarios.simframe.findmax.planners.ratchet.FindmaxRatchet;
|
||||
import io.nosqlbench.scenarios.simframe.findmax.survey.FindmaxSurvey;
|
||||
import io.nosqlbench.scenarios.simframe.optimizers.planners.findmax.FindmaxPlanner;
|
||||
import io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet.RatchetPlanner;
|
||||
import io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve.RCurvePlanner;
|
||||
import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
|
||||
|
||||
public enum FindmaxPlannerType {
|
||||
public enum OptimizerPlannerTypes {
|
||||
// survey,
|
||||
ratchet,
|
||||
rampup,
|
||||
survey,
|
||||
findmax,
|
||||
rcurve,
|
||||
;
|
||||
public SimFramePlanner<?,?> createPlanner(NBCommandParams params) {
|
||||
return switch (this) {
|
||||
case ratchet -> new FindmaxRatchet(params);
|
||||
case rampup -> new FindmaxRampup(params);
|
||||
case survey -> new FindmaxSurvey(params);
|
||||
case findmax -> new FindmaxPlanner(params);
|
||||
case rcurve -> new RCurvePlanner(params);
|
||||
case ratchet -> new RatchetPlanner(params);
|
||||
};
|
||||
}
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners.rampup;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
|
||||
@ -22,7 +22,7 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
* These search parameters are based on the original findmax algorithm, and
|
||||
* should be reduced down to the minimum set needed.
|
||||
*/
|
||||
public record RampupConfig(
|
||||
public record FindmaxConfig(
|
||||
int sample_time_ms,
|
||||
int sample_max,
|
||||
double sample_incr,
|
||||
@ -32,7 +32,7 @@ public record RampupConfig(
|
||||
int average_of,
|
||||
long min_settling_ms
|
||||
) {
|
||||
public RampupConfig(NBCommandParams params) {
|
||||
public FindmaxConfig(NBCommandParams params) {
|
||||
this(
|
||||
params.maybeGet("sample_time_ms").map(Integer::parseInt).orElse(4000),
|
||||
params.maybeGet("sample_max").map(Integer::parseInt).orElse(10000),
|
@ -14,34 +14,34 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners.rampup;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
|
||||
|
||||
/**
|
||||
* These parameters are calculated by the planner based on previous simulation frame history.
|
||||
*/
|
||||
public record RampupFrameParams(
|
||||
public record FindmaxFrameParams(
|
||||
/**
|
||||
* The base rate upon which we add higher deltas
|
||||
*/
|
||||
double rate_shelf,
|
||||
|
||||
/**
|
||||
* The incremental rate which we stack on top of the base rate to find a new limit
|
||||
*/
|
||||
double rate_delta,
|
||||
/**
|
||||
* How many millis we sample the current frame for
|
||||
*/
|
||||
long sample_time_ms,
|
||||
/**
|
||||
* How many millis we let the workload settle for to achieve stability, such as when it has recently
|
||||
* be in in over-saturation mode with a too-high delta
|
||||
*/
|
||||
long settling_time_ms,
|
||||
/**
|
||||
* Narrate the reason for the current parameters being set the way the are
|
||||
*/
|
||||
String description
|
||||
/**
|
||||
* The incremental rate which we stack on top of the base rate to find a new limit
|
||||
*/
|
||||
double rate_delta,
|
||||
/**
|
||||
* How many millis we sample the current frame for
|
||||
*/
|
||||
long sample_time_ms,
|
||||
/**
|
||||
* How many millis we let the workload settle for to achieve stability, such as when it has recently
|
||||
* be in in over-saturation mode with a too-high delta
|
||||
*/
|
||||
long settling_time_ms,
|
||||
/**
|
||||
* Narrate the reason for the current parameters being set the way the are
|
||||
*/
|
||||
String description
|
||||
|
||||
) {
|
||||
public double computed_rate() {
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners.rampup;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.findmax;
|
||||
|
||||
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
|
||||
@ -29,20 +29,20 @@ import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public class FindmaxRampup extends SimFramePlanner<RampupConfig, RampupFrameParams> {
|
||||
private final Logger logger = LogManager.getLogger(FindmaxRampup.class);
|
||||
public class FindmaxPlanner extends SimFramePlanner<FindmaxConfig, FindmaxFrameParams> {
|
||||
private final Logger logger = LogManager.getLogger(FindmaxPlanner.class);
|
||||
|
||||
public FindmaxRampup(NBCommandParams analyzerParams) {
|
||||
public FindmaxPlanner(NBCommandParams analyzerParams) {
|
||||
super(analyzerParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RampupConfig getConfig(NBCommandParams params) {
|
||||
return new RampupConfig(params);
|
||||
public FindmaxConfig getConfig(NBCommandParams params) {
|
||||
return new FindmaxConfig(params);
|
||||
}
|
||||
|
||||
public RampupFrameParams initialStep() {
|
||||
return new RampupFrameParams(
|
||||
public FindmaxFrameParams initialStep() {
|
||||
return new FindmaxFrameParams(
|
||||
config.rate_base(), config.rate_step(), config.sample_time_ms(), config.min_settling_ms(), "INITIAL"
|
||||
);
|
||||
}
|
||||
@ -57,11 +57,11 @@ public class FindmaxRampup extends SimFramePlanner<RampupConfig, RampupFramePara
|
||||
* @return Optionally, a set of paramValues which indicates another simulation frame should be sampled, else null
|
||||
*/
|
||||
@Override
|
||||
public RampupFrameParams nextStep(JournalView<RampupFrameParams> journal) {
|
||||
SimFrame<RampupFrameParams> last = journal.last();
|
||||
SimFrame<RampupFrameParams> best = journal.bestRun();
|
||||
public FindmaxFrameParams nextStep(JournalView<FindmaxFrameParams> journal) {
|
||||
SimFrame<FindmaxFrameParams> last = journal.last();
|
||||
SimFrame<FindmaxFrameParams> best = journal.bestRun();
|
||||
if (best.index() == last.index()) { // got better consecutively
|
||||
return new RampupFrameParams(
|
||||
return new FindmaxFrameParams(
|
||||
last.params().rate_shelf(),
|
||||
last.params().rate_delta() * config.rate_incr(),
|
||||
last.params().sample_time_ms(),
|
||||
@ -74,7 +74,7 @@ public class FindmaxRampup extends SimFramePlanner<RampupConfig, RampupFramePara
|
||||
logger.info("could not divide search space further, stop condition met");
|
||||
return null;
|
||||
} else {
|
||||
return new RampupFrameParams(
|
||||
return new FindmaxFrameParams(
|
||||
best.params().computed_rate(),
|
||||
config.rate_step(),
|
||||
(long) (last.params().sample_time_ms() * config.sample_incr()),
|
||||
@ -84,13 +84,13 @@ public class FindmaxRampup extends SimFramePlanner<RampupConfig, RampupFramePara
|
||||
}
|
||||
} else { // any other case
|
||||
// find next frame with higher rate but lower value, the closest one by rate
|
||||
SimFrame<RampupFrameParams> nextWorseFrameWithHigherRate = journal.frames().stream()
|
||||
SimFrame<FindmaxFrameParams> nextWorseFrameWithHigherRate = journal.frames().stream()
|
||||
.filter(f -> f.value() < best.value())
|
||||
.filter(f -> f.params().computed_rate() > best.params().computed_rate())
|
||||
.min(Comparator.comparingDouble(f -> f.params().computed_rate()))
|
||||
.orElseThrow(() -> new RuntimeException("inconsistent samples"));
|
||||
if ((nextWorseFrameWithHigherRate.params().computed_rate() - best.params().computed_rate()) > config.rate_step()) {
|
||||
return new RampupFrameParams(
|
||||
return new FindmaxFrameParams(
|
||||
best.params().computed_rate(),
|
||||
config.rate_step(),
|
||||
(long) (last.params().sample_time_ms() * config.sample_incr()),
|
||||
@ -105,7 +105,7 @@ public class FindmaxRampup extends SimFramePlanner<RampupConfig, RampupFramePara
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyParams(RampupFrameParams params, Activity flywheel) {
|
||||
public void applyParams(FindmaxFrameParams params, Activity flywheel) {
|
||||
flywheel.onEvent(ParamChange.of(new CycleRateSpec(params.rate_shelf()+params.rate_delta(), 1.1d, SimRateSpec.Verb.restart)));
|
||||
}
|
||||
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners.ratchet;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
|
@ -14,9 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners.ratchet;
|
||||
|
||||
import io.nosqlbench.scenarios.simframe.planning.GenericParamModel;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet;
|
||||
|
||||
public record RatchetFrameParams(
|
||||
double rate,
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.planners.ratchet;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.ratchet;
|
||||
|
||||
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
|
||||
@ -27,10 +27,10 @@ import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
public class FindmaxRatchet extends SimFramePlanner<RatchetConfig, RatchetFrameParams> {
|
||||
private final Logger logger = LogManager.getLogger(FindmaxRatchet.class);
|
||||
public class RatchetPlanner extends SimFramePlanner<RatchetConfig, RatchetFrameParams> {
|
||||
private final Logger logger = LogManager.getLogger(RatchetPlanner.class);
|
||||
|
||||
public FindmaxRatchet(NBCommandParams params) {
|
||||
public RatchetPlanner(NBCommandParams params) {
|
||||
super(params);
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.survey;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
|
||||
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
|
||||
@ -22,15 +22,21 @@ import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
* These search parameters are based on the original findmax algorithm, and
|
||||
* should be reduced down to the minimum set needed.
|
||||
*/
|
||||
public record SurveyConfig(
|
||||
public record RCurveConfig(
|
||||
double min_rate,
|
||||
double max_rate,
|
||||
int steps
|
||||
) {
|
||||
public SurveyConfig(NBCommandParams params) {
|
||||
public RCurveConfig(NBCommandParams params) {
|
||||
this(
|
||||
params.maybeGet("max_rate").map(Double::parseDouble).orElse(1.2d),
|
||||
params.maybeGet("steps").map(Integer::parseInt).orElse(3)
|
||||
params.maybeGet("min_rate").map(Double::parseDouble).orElse(0.0),
|
||||
params.maybeGet("max_rate").map(Double::parseDouble).orElse(10.0),
|
||||
params.maybeGet("steps").map(Integer::parseInt).orElse(10)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
double rateForStep(int step) {
|
||||
return min_rate + ((max_rate-min_rate)*((double)step/(double)steps));
|
||||
}
|
||||
|
||||
}
|
@ -14,12 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.survey;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
|
||||
|
||||
public record SurveyFrameParams(
|
||||
public record RCurveFrameParams(
|
||||
double rate,
|
||||
double step,
|
||||
int step,
|
||||
String description
|
||||
|
||||
) {
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.nosqlbench.scenarios.simframe.findmax.survey;
|
||||
package io.nosqlbench.scenarios.simframe.optimizers.planners.rcurve;
|
||||
|
||||
import io.nosqlbench.engine.api.activityapi.core.Activity;
|
||||
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
|
||||
@ -27,21 +27,21 @@ import io.nosqlbench.scenarios.simframe.planning.SimFramePlanner;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
public class FindmaxSurvey extends SimFramePlanner<SurveyConfig, SurveyFrameParams> {
|
||||
private final Logger logger = LogManager.getLogger(FindmaxSurvey.class);
|
||||
public class RCurvePlanner extends SimFramePlanner<RCurveConfig, RCurveFrameParams> {
|
||||
private final Logger logger = LogManager.getLogger(RCurvePlanner.class);
|
||||
|
||||
public FindmaxSurvey(NBCommandParams params) {
|
||||
public RCurvePlanner(NBCommandParams params) {
|
||||
super(params);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public SurveyConfig getConfig(NBCommandParams params) {
|
||||
return new SurveyConfig(params);
|
||||
public RCurveConfig getConfig(NBCommandParams params) {
|
||||
return new RCurveConfig(params);
|
||||
}
|
||||
|
||||
public SurveyFrameParams initialStep() {
|
||||
return new SurveyFrameParams(config.max_rate(), config.steps(), "INITIAL");
|
||||
public RCurveFrameParams initialStep() {
|
||||
return new RCurveFrameParams(config.rateForStep(1), 1, "INITIAL");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -55,14 +55,18 @@ public class FindmaxSurvey extends SimFramePlanner<SurveyConfig, SurveyFramePara
|
||||
*/
|
||||
|
||||
@Override
|
||||
public SurveyFrameParams nextStep(JournalView<SurveyFrameParams> journal) {
|
||||
return null;
|
||||
public RCurveFrameParams nextStep(JournalView<RCurveFrameParams> journal) {
|
||||
SimFrame<RCurveFrameParams> last = journal.last();
|
||||
int nextStep = last.params().step() +1;
|
||||
if (nextStep<=config.steps()) {
|
||||
return new RCurveFrameParams(config.rateForStep(nextStep),nextStep,"Advancing to step " + nextStep);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void applyParams(SurveyFrameParams params, Activity flywheel) {
|
||||
public void applyParams(RCurveFrameParams params, Activity flywheel) {
|
||||
flywheel.onEvent(ParamChange.of(new CycleRateSpec(params.rate(), 1.1d, SimRateSpec.Verb.restart)));
|
||||
|
||||
}
|
||||
}
|
@ -28,9 +28,10 @@ import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.CycleRateSpec;
|
||||
import io.nosqlbench.engine.api.activityapi.ratelimits.simrate.SimRateSpec;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.ContainerActivitiesController;
|
||||
import io.nosqlbench.engine.core.lifecycle.scenario.container.NBCommandParams;
|
||||
import io.nosqlbench.scenarios.simframe.SimFrameUtils;
|
||||
import io.nosqlbench.scenarios.simframe.capture.SimFrameCapture;
|
||||
import io.nosqlbench.scenarios.simframe.capture.SimFrameJournal;
|
||||
import io.nosqlbench.scenarios.simframe.findmax.NB_findmax;
|
||||
import io.nosqlbench.scenarios.simframe.optimizers.CMD_optimize;
|
||||
import io.nosqlbench.scenarios.simframe.planning.SimFrame;
|
||||
import io.nosqlbench.scenarios.simframe.planning.SimFrameFunction;
|
||||
import io.nosqlbench.scenarios.simframe.stabilization.StatFunctions;
|
||||
@ -63,7 +64,7 @@ import java.util.List;
|
||||
* </OL>
|
||||
*/
|
||||
public class NB_optimo extends NBBaseCommand {
|
||||
private final static Logger logger = LogManager.getLogger(NB_findmax.class);
|
||||
private final static Logger logger = LogManager.getLogger(CMD_optimize.class);
|
||||
|
||||
public NB_optimo(NBBufferedContainer parentComponent, String phaseName, String targetScenario) {
|
||||
super(parentComponent, phaseName, targetScenario);
|
||||
|
Loading…
Reference in New Issue
Block a user