From 5b71e13db4cc62a6f880b25dbad5c073c46d8f6e Mon Sep 17 00:00:00 2001 From: Sukrit Kalra Date: Sat, 16 Dec 2023 23:31:38 -0800 Subject: [PATCH] Enable EDF to only drop tasks if requested. Add an adversarial EDF config. --- configs/edf_adversarial.conf | 22 ++++++++++++++++++++++ schedulers/edf_scheduler.py | 5 ++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 configs/edf_adversarial.conf diff --git a/configs/edf_adversarial.conf b/configs/edf_adversarial.conf new file mode 100644 index 00000000..b5666573 --- /dev/null +++ b/configs/edf_adversarial.conf @@ -0,0 +1,22 @@ +# Output configs. +--log=./edf_adversarial.log +--log_level=debug +--csv=./edf_adversarial.csv + +# Task configs. +--runtime_variance=0 + +# Scheduler configs. +#--scheduler=TetriSched_Gurobi +#--scheduler=TetriSched +--scheduler=EDF +--scheduler_runtime=0 +--enforce_deadlines +--retract_schedules +#--release_taskgraphs +#--scheduler_time_discretization=1 + +# Execution mode configs. +--execution_mode=json +--workload_profile_path=./profiles/workload/edf_adversarial.yaml +--worker_profile_path=./profiles/workers/edf_adversarial.yaml diff --git a/schedulers/edf_scheduler.py b/schedulers/edf_scheduler.py index e913def7..857b2416 100644 --- a/schedulers/edf_scheduler.py +++ b/schedulers/edf_scheduler.py @@ -35,6 +35,7 @@ def __init__( enforce_deadlines=enforce_deadlines, _flags=_flags, ) + self._drop_skipped_tasks = _flags.drop_skipped_tasks if _flags else False def schedule( self, sim_time: EventTime, workload: Workload, worker_pools: WorkerPools @@ -103,12 +104,14 @@ def schedule( ) # If we are enforcing deadlines, and the Task is past its deadline, then - # we should create a cancellation for it. + # we should create a cancellation for it. This is only applicable if the + # user wants the tasks that cannot meet their deadline to be dropped. if ( self.enforce_deadlines and task.deadline < sim_time + task.available_execution_strategies.get_fastest_strategy().runtime + and self._drop_skipped_tasks ): placements.append(Placement.create_task_cancellation(task=task)) self._logger.debug(