Newer
Older
from strategies.config import ExperimentConfig
import strategies.strategies.domain_restriction.lower_bound_strategy as lower_bound_strategy
import strategies.strategies.domain_restriction.no_lower_bound_strategy as no_lower_bound_strategy
import strategies.strategies.search.check_all_strategy as check_all_strategy
import strategies.strategies.search.linear_search_strategy as linear_search_strategy
import strategies.strategies.search.binary_search_strategy as binary_search_strategy
from strategies.experiment_execution import ExperimentExecutor
import strategies.subexperiment_execution.subexperiment_executor as subexperiment_executor
import strategies.subexperiment_evaluation.subexperiment_evaluator as subexperiment_evaluator
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
def load_variables():
"""Load the CLI variables given at the command line"""
print('Load CLI variables')
parser = argparse.ArgumentParser(description='Run use case Programm')
parser.add_argument('uc',
metavar='<uc>',
help='use case number, one of 1, 2, 3 or 4')
parser.add_argument('loads',
type=int,
metavar='<load>',
nargs='+',
help='Loads that should be executed')
parser.add_argument('--instances', '-i',
dest='instances_list',
default=[1],
type=int,
metavar='<instance>',
nargs='+',
help='List of instances used in benchmarks')
parser.add_argument('--partitions', '-p',
default=40,
type=int,
metavar='<partitions>',
help='Number of partitions for Kafka topics')
parser.add_argument('--cpu-limit', '-cpu',
default='1000m',
metavar='<CPU limit>',
help='Kubernetes CPU limit')
parser.add_argument('--memory-limit', '-mem',
default='4Gi',
metavar='<memory limit>',
help='Kubernetes memory limit')
parser.add_argument('--commit-ms',
default=100,
type=int,
metavar='<commit ms>',
help='Kafka Streams commit interval in milliseconds')
parser.add_argument('--duration', '-d',
default=5,
type=int,
metavar='<duration>',
help='Duration in minutes subexperiments should be \
executed for')
parser.add_argument('--domain-restriction',
action="store_true",
help='To use domain restriction. For details see README')
parser.add_argument('--search-strategy',
default='default',
metavar='<strategy>',
help='The benchmarking search strategy. Can be set to default, linear-search or binary-search')
parser.add_argument('--reset',
action="store_true",
help='Resets the environment before execution')
parser.add_argument('--reset-only',
action="store_true",
help='Only resets the environment. Ignores all other parameters')
args = parser.parse_args()
print(args)
return args
def main(uc, loads, instances_list, partitions, cpu_limit, memory_limit, commit_ms, duration, domain_restriction, search_strategy, reset, reset_only):
print(f"Domain restriction of search space activated: {domain_restriction}")
print(f"Chosen search strategy: {search_strategy}")
if os.path.exists("exp_counter.txt"):
with open("exp_counter.txt", mode="r") as read_stream:
exp_id = int(read_stream.read())
exp_id = 0
with open("exp_counter.txt", mode="w") as write_stream:
write_stream.write(str(exp_id + 1))
# domain restriction
if domain_restriction:
# domain restriction + linear-search
if search_strategy == "linear-search":
print(f"Going to execute at most {len(loads)+len(instances_list)-1} subexperiments in total..")
experiment_config = ExperimentConfig(
use_case=uc,
exp_id=exp_id,
dim_values=loads,
replicass=instances_list,
partitions=partitions,
cpu_limit=cpu_limit,
memory_limit=memory_limit,
kafka_streams_commit_interval_ms=commit_ms,
execution_minutes=duration,
domain_restriction_strategy=lower_bound_strategy,
search_strategy=linear_search_strategy,
subexperiment_executor=subexperiment_executor,
subexperiment_evaluator=subexperiment_evaluator)
# domain restriction + binary-search
elif search_strategy == "binary-search":
experiment_config = ExperimentConfig(
use_case=uc,
exp_id=exp_id,
dim_values=loads,
replicass=instances_list,
partitions=partitions,
cpu_limit=cpu_limit,
memory_limit=memory_limit,
kafka_streams_commit_interval_ms=commit_ms,
execution_minutes=duration,
domain_restriction_strategy=lower_bound_strategy,
search_strategy=binary_search_strategy,
subexperiment_executor=subexperiment_executor,
subexperiment_evaluator=subexperiment_evaluator)
# domain restriction + check_all
else:
print(f"Going to execute {len(loads)*len(instances_list)} subexperiments in total..")
experiment_config = ExperimentConfig(
use_case=uc,
exp_id=exp_id,
dim_values=loads,
replicass=instances_list,
partitions=partitions,
cpu_limit=cpu_limit,
memory_limit=memory_limit,
kafka_streams_commit_interval_ms=commit_ms,
execution_minutes=duration,
domain_restriction_strategy=lower_bound_strategy,
search_strategy=check_all_strategy,
subexperiment_executor=subexperiment_executor,
subexperiment_evaluator=subexperiment_evaluator)
# no domain restriction
# no domain restriction + linear-search
if search_strategy == "linear-search":
print(f"Going to execute at most {len(loads)*len(instances_list)} subexperiments in total..")
experiment_config = ExperimentConfig(
use_case=uc,
exp_id=exp_id,
dim_values=loads,
replicass=instances_list,
partitions=partitions,
cpu_limit=cpu_limit,
memory_limit=memory_limit,
kafka_streams_commit_interval_ms=commit_ms,
execution_minutes=duration,
domain_restriction_strategy=no_lower_bound_strategy,
search_strategy=linear_search_strategy,
subexperiment_executor=subexperiment_executor,
subexperiment_evaluator=subexperiment_evaluator)
# no domain restriction + binary-search
elif search_strategy == "binary-search":
experiment_config = ExperimentConfig(
use_case=uc,
exp_id=exp_id,
dim_values=loads,
replicass=instances_list,
partitions=partitions,
cpu_limit=cpu_limit,
memory_limit=memory_limit,
kafka_streams_commit_interval_ms=commit_ms,
execution_minutes=duration,
domain_restriction_strategy=no_lower_bound_strategy,
search_strategy=binary_search_strategy,
subexperiment_executor=subexperiment_executor,
subexperiment_evaluator=subexperiment_evaluator)
# no domain restriction + check_all
else:
print(f"Going to execute {len(loads)*len(instances_list)} subexperiments in total..")
experiment_config = ExperimentConfig(
use_case=uc,
exp_id=exp_id,
dim_values=loads,
replicass=instances_list,
partitions=partitions,
cpu_limit=cpu_limit,
memory_limit=memory_limit,
kafka_streams_commit_interval_ms=commit_ms,
execution_minutes=duration,
domain_restriction_strategy=no_lower_bound_strategy,
search_strategy=check_all_strategy,
subexperiment_executor=subexperiment_executor,
subexperiment_evaluator=subexperiment_evaluator)
executor = ExperimentExecutor(experiment_config)
executor.execute()
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
args = load_variables()
main(args.uc, args.loads, args.instances_list, args.partitions, args.cpu_limit,
args.memory_limit, args.commit_ms, args.duration,
args.domain_restriction, args.search_strategy, args.reset,
args.reset_only)