reformated imports for pep8 compatability

This commit is contained in:
PatchOfScotland
2023-03-14 15:12:22 +01:00
parent af489d2bb9
commit ede29f3158
29 changed files with 225 additions and 189 deletions

View File

@ -4,7 +4,8 @@ from meow_base.recipes import get_recipe_from_notebook
from shared import run_test, MRME
def multiple_rules_multiple_events(job_count:int, REPEATS, job_counter, requested_jobs, runtime_start):
def multiple_rules_multiple_events(job_count:int, REPEATS:int, job_counter:int,
requested_jobs:int, runtime_start:float):
patterns = {}
for i in range(job_count):
pattern = FileEventPattern(

View File

@ -4,7 +4,8 @@ from meow_base.recipes import get_recipe_from_notebook
from shared import run_test, MRSE
def multiple_rules_single_event(job_count:int, REPEATS, job_counter, requested_jobs, runtime_start):
def multiple_rules_single_event(job_count:int, REPEATS:int, job_counter:int,
requested_jobs:int, runtime_start:float):
patterns = {}
for i in range(job_count):
pattern = FileEventPattern(

View File

@ -5,14 +5,18 @@ import sys
import time
import os
from shared import JOBS_COUNTS, REPEATS, TESTS, MRME, MRSE, SRME, SRSEP, SRSES, RESULTS_DIR, BASE, GRAPH_FILENAME
from typing import List
from shared import JOBS_COUNTS, REPEATS, TESTS, MRME, MRSE, SRME, SRSEP, \
SRSES, RESULTS_DIR, BASE
from mrme import multiple_rules_multiple_events
from mrse import multiple_rules_single_event
from srme import single_rule_multiple_events
from srsep import single_rule_single_event_parallel
from srsps import single_rule_single_event_sequential
from meow_base.core.correctness.vars import DEFAULT_JOB_OUTPUT_DIR, DEFAULT_JOB_QUEUE_DIR
from meow_base.core.correctness.vars import DEFAULT_JOB_OUTPUT_DIR, \
DEFAULT_JOB_QUEUE_DIR
from meow_base.functionality.file_io import rmtree
LINE_KEYS = {
@ -59,7 +63,7 @@ def run_tests():
print(f"All tests completed in: {str(time.time()-runtime_start)}")
def get_meow_graph(results_dir):
def get_meow_graph(results_dir:str):
lines = []
for run_type in os.listdir(results_dir):
@ -68,24 +72,25 @@ def get_meow_graph(results_dir):
# lines.append((f'scheduling {run_type}', [], 'solid'))
lines.append((run_type, [], 'solid'))
run_type_path = os.path.join(results_dir, run_type)
run_path = os.path.join(results_dir, run_type)
for job_count in os.listdir(run_type_path):
results_path = os.path.join(run_type_path, job_count, 'results.txt')
for job_count in os.listdir(run_path):
results_path = os.path.join(run_path, job_count, "results.txt")
with open(results_path, 'r') as f_in:
data = f_in.readlines()
scheduling_duration = 0
for line in data:
if "Average schedule time: " in line:
scheduling_duration = float(line.replace("Average schedule time: ", ''))
scheduling_duration = float(line.replace(
"Average schedule time: ", ''))
lines[-1][1].append((job_count, scheduling_duration))
lines[-1][1].sort(key=lambda y: float(y[0]))
return lines
def make_plot(lines, graph_path, title, logged):
def make_plot(lines:List, graph_path:str, title:str, logged:bool):
w = 10
h = 4
linecount = 0
@ -129,14 +134,19 @@ def make_plot(lines, graph_path, title, logged):
def make_both_plots(lines, path, title, log=True):
make_plot(lines, path, title, False)
if log:
logged_path = path[:path.index(".pdf")] + "_logged" + path[path.index(".pdf"):]
logged_path = path[:path.index(".pdf")] + "_logged" \
+ path[path.index(".pdf"):]
make_plot(lines, logged_path, title, True)
def make_graphs():
lines = get_meow_graph(RESULTS_DIR)
make_both_plots(lines, "result.pdf", "MiG scheduling overheads on the Threadripper")
make_both_plots(
lines,
"result.pdf",
"MiG scheduling overheads on the Threadripper"
)
average_lines = []
all_delta_lines = []
@ -146,20 +156,36 @@ def make_graphs():
averages = [(i, v/float(i)) for i, v in line_values]
average_lines.append((line_signature, averages, lines_style))
if line_signature not in ["total single_Pattern_single_file_sequential", "scheduling single_Pattern_single_file_sequential_jobs", "SPSFS"]:
if line_signature not in [
"total single_Pattern_single_file_sequential",
"scheduling single_Pattern_single_file_sequential_jobs",
"SPSFS"]:
deltas = []
for i in range(len(line_values)-1):
deltas.append( (line_values[i+1][0], (averages[i+1][1]-averages[i][1]) / (float(averages[i+1][0])-float(averages[i][0])) ) )
deltas.append((line_values[i+1][0],
(averages[i+1][1]-averages[i][1]) \
/ (float(averages[i+1][0])-float(averages[i][0]))))
no_spsfs_delta_lines.append((line_signature, deltas, lines_style))
deltas = []
for i in range(len(line_values)-1):
deltas.append( (line_values[i+1][0], (averages[i+1][1]-averages[i][1]) / (float(averages[i+1][0])-float(averages[i][0])) ) )
deltas.append((line_values[i+1][0],
(averages[i+1][1]-averages[i][1]) \
/ (float(averages[i+1][0])-float(averages[i][0]))))
all_delta_lines.append((line_signature, deltas, lines_style))
make_both_plots(average_lines, "result_averaged.pdf", "Per-job MiG scheduling overheads on the Threadripper")
make_both_plots(
average_lines,
"result_averaged.pdf",
"Per-job MiG scheduling overheads on the Threadripper"
)
make_both_plots(all_delta_lines, "result_deltas.pdf", "Difference in per-job MiG scheduling overheads on the Threadripper", log=False)
make_both_plots(
all_delta_lines,
"result_deltas.pdf",
"Difference in per-job MiG scheduling overheads on the Threadripper",
log=False
)
if __name__ == '__main__':
try:
@ -172,4 +198,4 @@ if __name__ == '__main__':
try:
sys.exit(1)
except SystemExit:
os._exit(1)
os._exit(1)

View File

@ -6,9 +6,12 @@ import pathlib
import time
import yaml
from typing import Any, Dict, Tuple
from typing import Any, Dict, Tuple, List
from meow_base.core.correctness.vars import DEFAULT_JOB_OUTPUT_DIR, DEFAULT_JOB_QUEUE_DIR
from meow_base.core.correctness.vars import DEFAULT_JOB_OUTPUT_DIR, \
DEFAULT_JOB_QUEUE_DIR
from meow_base.core.base_pattern import BasePattern
from meow_base.core.base_recipe import BaseRecipe
from meow_base.core.runner import MeowRunner
from meow_base.patterns.file_event_pattern import WatchdogMonitor
from meow_base.recipes.jupyter_notebook_recipe import PapermillHandler
@ -17,9 +20,13 @@ from meow_base.functionality.file_io import rmtree
RESULTS_DIR = "results"
BASE = "benchmark_base"
GRAPH_FILENAME = "graph.pdf"
REPEATS = 10
JOBS_COUNTS = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, 250, 300, 400, 500]
JOBS_COUNTS = [
10, 20, 30, 40, 50,
60, 70, 80, 90, 100,
125, 150, 175, 200,
250, 300, 400, 500
]
SRME = "single_rule_multiple_events"
MRSE = "multiple_rules_single_event"
@ -42,10 +49,11 @@ class DummyConductor(LocalPythonConductor):
return False, ">:("
def datetime_to_timestamp(date_time_obj):
return time.mktime(date_time_obj.timetuple()) + float(date_time_obj.microsecond)/1000000
def datetime_to_timestamp(date_time_obj:datetime):
return time.mktime(date_time_obj.timetuple()) \
+ float(date_time_obj.microsecond)/1000000
def generate(file_count, file_path, file_type='.txt'):
def generate(file_count:int, file_path:str, file_type:str=".txt"):
first_filename = ''
start = time.time()
for i in range(int(file_count)):
@ -56,7 +64,8 @@ def generate(file_count, file_path, file_type='.txt'):
f.write('0')
return first_filename, time.time() - start
def cleanup(jobs, file_out, base_time, gen_time, execution=False):
def cleanup(jobs:List[str], file_out:str, base_time:float, gen_time:float,
execution:bool=False):
if not jobs:
return
@ -116,27 +125,30 @@ def cleanup(jobs, file_out, base_time, gen_time, execution=False):
return total_time
def mean(l):
def mean(l:List):
return sum(l)/len(l)
def collate_results(base_results_dir):
def collate_results(base_dir:str):
scheduling_delays = []
for run in os.listdir(base_results_dir):
for run in os.listdir(base_dir):
if run != 'results.txt':
with open(os.path.join(base_results_dir, run, 'results.txt'), 'r') as f:
with open(os.path.join(base_dir, run, "results.txt"), 'r') as f:
d = f.readlines()
for l in d:
if "Total scheduling delay (seconds): " in l:
scheduling_delays.append(float(l.replace("Total scheduling delay (seconds): ", '')))
scheduling_delays.append(float(l.replace(
"Total scheduling delay (seconds): ", '')))
with open(os.path.join(base_results_dir, 'results.txt'), 'w') as f:
with open(os.path.join(base_dir, 'results.txt'), 'w') as f:
f.write(f"Average schedule time: {round(mean(scheduling_delays), 3)}\n")
f.write(f"Scheduling times: {scheduling_delays}")
def run_test(patterns, recipes, files_count, expected_job_count, repeats, job_counter, requested_jobs, runtime_start, signature='', execution=False, print_logging=False):
def run_test(patterns:Dict[str,BasePattern], recipes:Dict[str,BaseRecipe],
files_count:int, expected_job_count:int, repeats:int, job_counter:int,
requested_jobs:int, runtime_start:float, signature:str="",
execution:bool=False, print_logging:bool=False):
if not os.path.exists(RESULTS_DIR):
os.mkdir(RESULTS_DIR)
@ -172,24 +184,12 @@ def run_test(patterns, recipes, files_count, expected_job_count, repeats, job_co
print=runner_debug_stream,
logging=3
)
# meow.WorkflowRunner(
# VGRID,
# num_workers,
# patterns=patterns,
# recipes=recipes,
# daemon=True,
# start_workers=False,
# retro_active_jobs=False,
# print_logging=print_logging,
# file_logging=False,
# wait_time=1
# )
runner.start()
# Generate triggering files
first_filename, generation_duration = generate(files_count, file_base +"/file_")
first_filename, generation_duration = \
generate(files_count, file_base +"/file_")
idle_loops = 0
total_loops = 0
@ -216,10 +216,27 @@ def run_test(patterns, recipes, files_count, expected_job_count, repeats, job_co
else:
jobs = os.listdir(DEFAULT_JOB_QUEUE_DIR)
results_path = os.path.join(RESULTS_DIR, signature, str(expected_job_count), str(run), 'results.txt')
results_path = os.path.join(
RESULTS_DIR,
signature,
str(expected_job_count),
str(run),
"results.txt"
)
cleanup(jobs, results_path, first_filename, generation_duration, execution=execution)
cleanup(
jobs,
results_path,
first_filename,
generation_duration,
execution=execution
)
print(f"Completed scheduling run {str(run + 1)} of {str(len(jobs))}/{str(expected_job_count)} jobs for '{signature}' {job_counter + expected_job_count*(run+1)}/{requested_jobs} ({str(round(time.time()-runtime_start, 3))}s)")
print(f"Completed scheduling run {str(run + 1)} of {str(len(jobs))}"
f"/{str(expected_job_count)} jobs for '{signature}' "
f"{job_counter + expected_job_count*(run+1)}/{requested_jobs} "
f"({str(round(time.time()-runtime_start, 3))}s)")
collate_results(os.path.join(RESULTS_DIR, signature, str(expected_job_count)))
collate_results(
os.path.join(RESULTS_DIR, signature, str(expected_job_count))
)

View File

@ -4,7 +4,8 @@ from meow_base.recipes import get_recipe_from_notebook
from shared import run_test, SRME
def single_rule_multiple_events(job_count:int, REPEATS, job_counter, requested_jobs, runtime_start):
def single_rule_multiple_events(job_count:int, REPEATS:int, job_counter:int,
requested_jobs:int, runtime_start:float):
patterns = {}
pattern = FileEventPattern(
f"pattern_one",

View File

@ -5,7 +5,8 @@ from meow_base.recipes import get_recipe_from_notebook
from meow_base.functionality.meow import create_parameter_sweep
from shared import run_test, SRSEP
def single_rule_single_event_parallel(job_count:int, REPEATS, job_counter, requested_jobs, runtime_start):
def single_rule_single_event_parallel(job_count:int, REPEATS:int,
job_counter:int, requested_jobs:int, runtime_start:float):
patterns = {}
pattern = FileEventPattern(
f"pattern_one",

View File

@ -4,7 +4,8 @@ from meow_base.recipes import get_recipe_from_notebook
from shared import run_test, SRSES
def single_rule_single_event_sequential(job_count:int, REPEATS, job_counter, requested_jobs, runtime_start):
def single_rule_single_event_sequential(job_count:int, REPEATS:int,
job_counter:int, requested_jobs:int, runtime_start:float):
patterns = {}
pattern = FileEventPattern(
f"pattern_one",