diff --git a/execution/strategies/config.py b/execution/strategies/config.py index f6b639073db707e9717fcffb1cf54c73f2bff523..f9a67897286f79b06e5af06d9fb9b067228be33c 100644 --- a/execution/strategies/config.py +++ b/execution/strategies/config.py @@ -4,6 +4,7 @@ from dataclasses import dataclass class ExperimentConfig: """ Wrapper for the configuration of an experiment. """ use_case: str + exp_id: int dim_values: list replicass: list partitions: int diff --git a/execution/strategies/strategies/config.py b/execution/strategies/strategies/config.py index 4a633c1135b2110f76f2dbd0b916e61483c96940..9d92831cd6ba03ad5b4ceeaf1b9741937396a4c2 100644 --- a/execution/strategies/strategies/config.py +++ b/execution/strategies/strategies/config.py @@ -4,6 +4,7 @@ from dataclasses import dataclass class SubexperimentConfig: """ Wrapper for the configuration of a subexperiment """ use_case: str + exp_id: int counter: int dim_value: int replicas: int diff --git a/execution/strategies/strategies/search/binary_search_strategy.py b/execution/strategies/strategies/search/binary_search_strategy.py index 52992be5c2ee68523c064f4c1eb5fa273430511d..92eea2e7df4805b82b1b04ded909d68caa8c8b39 100644 --- a/execution/strategies/strategies/search/binary_search_strategy.py +++ b/execution/strategies/strategies/search/binary_search_strategy.py @@ -5,7 +5,7 @@ from strategies.strategies.config import SubexperimentConfig def binary_search(config, dim_value, lower, upper, subexperiment_counter): if lower == upper: print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[lower]}") - subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) + subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) config.subexperiment_executor.execute(subexperiment_config) result = config.subexperiment_evaluator.execute(subexperiment_config) if result==1: # successful, the upper neighbor is assumed to also has been successful @@ -14,14 +14,14 @@ def binary_search(config, dim_value, lower, upper, subexperiment_counter): return (lower+1, subexperiment_counter) elif lower+1==upper: print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[lower]}") - subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) + subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) config.subexperiment_executor.execute(subexperiment_config) result = config.subexperiment_evaluator.execute(subexperiment_config) if result==1: # minimal instances found return (lower, subexperiment_counter) else: # not successful, check if lower+1 instances are sufficient print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[upper]}") - subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[upper], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) + subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[upper], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) config.subexperiment_executor.execute(subexperiment_config) result = config.subexperiment_evaluator.execute(subexperiment_config) if result == 1: # minimal instances found @@ -32,7 +32,7 @@ def binary_search(config, dim_value, lower, upper, subexperiment_counter): # test mid mid=(upper+lower)//2 print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[mid]}") - subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[mid], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) + subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[mid], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) config.subexperiment_executor.execute(subexperiment_config) result = config.subexperiment_evaluator.execute(subexperiment_config) if result == 1: # success -> search in (lower, mid-1) diff --git a/execution/strategies/strategies/search/check_all_strategy.py b/execution/strategies/strategies/search/check_all_strategy.py index cd9f8e0b8c825267e3ae6c85e852c3da5b953686..cd1a548d2142951a38ab04eba04ec6b0fb32e2a6 100644 --- a/execution/strategies/strategies/search/check_all_strategy.py +++ b/execution/strategies/strategies/search/check_all_strategy.py @@ -12,7 +12,7 @@ def execute(config, dim_value_index, lower_replicas_bound_index, subexperiment_c replicas=config.replicass[lower_replicas_bound_index] print(f"Run subexperiment {subexperiment_counter} of {subexperiments_total} with dimension value {dim_value} and {replicas} replicas.") - subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) + subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) config.subexperiment_executor.execute(subexperiment_config) diff --git a/execution/strategies/strategies/search/linear_search_strategy.py b/execution/strategies/strategies/search/linear_search_strategy.py index 9471f685e1ad6eaec0bcb5d9e80c417b7ed5d413..eeda5ad32b22174ed3552180ee6307911e18b657 100644 --- a/execution/strategies/strategies/search/linear_search_strategy.py +++ b/execution/strategies/strategies/search/linear_search_strategy.py @@ -11,7 +11,7 @@ def execute(config, dim_value_index, lower_replicas_bound_index, subexperiment_c replicas=config.replicass[lower_replicas_bound_index] print(f"Run subexperiment {subexperiment_counter} from at most {subexperiments_total} with dimension value {dim_value} and {replicas} replicas.") - subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) + subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes) config.subexperiment_executor.execute(subexperiment_config) result = config.subexperiment_evaluator.execute(subexperiment_config) diff --git a/execution/strategies/subexperiment_execution/subexperiment_executor.py b/execution/strategies/subexperiment_execution/subexperiment_executor.py index 7e4d2359ffa5bc9b339dadd9158fd309321727e0..e31e3d22ea18ffc4d5c130c56a7a2f99bf704965 100644 --- a/execution/strategies/subexperiment_execution/subexperiment_executor.py +++ b/execution/strategies/subexperiment_execution/subexperiment_executor.py @@ -5,4 +5,4 @@ import os dirname = os.path.dirname(__file__) os.chdir(dirname+"/../../") def execute(subexperiment_config): - os.system(f"./run_uc{subexperiment_config.use_case}.sh {subexperiment_config.counter} {subexperiment_config.dim_value} {subexperiment_config.replicas} {subexperiment_config.partitions} {subexperiment_config.cpu_limit} {subexperiment_config.memory_limit} {subexperiment_config.kafka_streams_commit_interval_ms} {subexperiment_config.execution_minutes}") \ No newline at end of file + os.system(f"./run_uc{subexperiment_config.use_case}.sh {subexperiment_config.exp_id} {subexperiment_config.dim_value} {subexperiment_config.replicas} {subexperiment_config.partitions} {subexperiment_config.cpu_limit} {subexperiment_config.memory_limit} {subexperiment_config.kafka_streams_commit_interval_ms} {subexperiment_config.execution_minutes}") \ No newline at end of file diff --git a/execution/theodolite.py b/execution/theodolite.py index fa9beff9aef88be72fdbaabdba0637884bb2bf69..b6e6246134e28771056ac498520aea3512a17b10 100755 --- a/execution/theodolite.py +++ b/execution/theodolite.py @@ -26,6 +26,15 @@ search_strategy=sys.argv[10] if len(sys.argv) >= 11 and (sys.argv[10] == "linear 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()) +else: + 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 @@ -33,6 +42,7 @@ if domain_restriction: print(f"Going to execute at most {len(dim_values)+len(replicas)-1} subexperiments in total..") experiment_config = ExperimentConfig( use_case=uc, + exp_id=exp_id, dim_values=dim_values, replicass=replicas, partitions=partitions, @@ -48,6 +58,7 @@ if domain_restriction: elif search_strategy == "binary-search": experiment_config = ExperimentConfig( use_case=uc, + exp_id=exp_id, dim_values=dim_values, replicass=replicas, partitions=partitions, @@ -64,6 +75,7 @@ if domain_restriction: print(f"Going to execute {len(dim_values)*len(replicas)} subexperiments in total..") experiment_config = ExperimentConfig( use_case=uc, + exp_id=exp_id, dim_values=dim_values, replicass=replicas, partitions=partitions, @@ -82,6 +94,7 @@ else: print(f"Going to execute at most {len(dim_values)*len(replicas)} subexperiments in total..") experiment_config = ExperimentConfig( use_case=uc, + exp_id=exp_id, dim_values=dim_values, replicass=replicas, partitions=partitions, @@ -97,6 +110,7 @@ else: elif search_strategy == "binary-search": experiment_config = ExperimentConfig( use_case=uc, + exp_id=exp_id, dim_values=dim_values, replicass=replicas, partitions=partitions, @@ -113,6 +127,7 @@ else: print(f"Going to execute {len(dim_values)*len(replicas)} subexperiments in total..") experiment_config = ExperimentConfig( use_case=uc, + exp_id=exp_id, dim_values=dim_values, replicass=replicas, partitions=partitions,