From bfd65931cb76178bcea98a653bb56ef5010112f7 Mon Sep 17 00:00:00 2001 From: Josué A Date: Wed, 1 Jul 2015 09:47:36 +0000 Subject: [PATCH] Added the 'scheduler' decorator to all schedulers --- simso/schedulers/BF.py | 2 ++ simso/schedulers/CC_EDF.py | 7 ++++++- simso/schedulers/DP_WRAP.py | 3 ++- simso/schedulers/EDCL.py | 3 ++- simso/schedulers/EDF.py | 3 ++- simso/schedulers/EDF2.py | 3 ++- simso/schedulers/EDF_US.py | 3 ++- simso/schedulers/EDF_mono.py | 3 ++- simso/schedulers/EDHS.py | 3 ++- simso/schedulers/EDZL.py | 3 ++- simso/schedulers/EKG.py | 7 ++++++- simso/schedulers/EPDF.py | 3 ++- simso/schedulers/ER_PD2.py | 3 ++- simso/schedulers/FP.py | 7 ++++++- simso/schedulers/Fixed_PEDF.py | 3 ++- simso/schedulers/G_FL.py | 3 ++- simso/schedulers/G_FL_ZL.py | 3 ++- simso/schedulers/LB_P_EDF.py | 3 ++- simso/schedulers/LLF.py | 3 ++- simso/schedulers/LLREF.py | 3 ++- simso/schedulers/LLREF2.py | 3 ++- simso/schedulers/LRE_TL.py | 3 ++- simso/schedulers/MLLF.py | 3 ++- simso/schedulers/NVNLF.py | 3 ++- simso/schedulers/PD2.py | 3 ++- simso/schedulers/P_EDF.py | 3 ++- simso/schedulers/P_EDF2.py | 3 ++- simso/schedulers/P_EDF_WF.py | 3 ++- simso/schedulers/P_RM.py | 3 ++- simso/schedulers/PriD.py | 3 ++- simso/schedulers/RM.py | 3 ++- simso/schedulers/RM_mono.py | 3 ++- simso/schedulers/RUN.py | 3 ++- simso/schedulers/Static_EDF.py | 7 ++++++- simso/schedulers/U_EDF.py | 3 ++- simso/schedulers/WC_RUN.py | 3 ++- simso/schedulers/WC_U_EDF.py | 3 ++- 37 files changed, 90 insertions(+), 36 deletions(-) diff --git a/simso/schedulers/BF.py b/simso/schedulers/BF.py index a252692..8c0c50d 100644 --- a/simso/schedulers/BF.py +++ b/simso/schedulers/BF.py @@ -3,10 +3,12 @@ Implementation of the BF algorithm. Authors: Maxime Cheramy and Stefan Junker """ +from simso.schedulers import scheduler from simso.core import Scheduler, Timer from fractions import Fraction +@scheduler("simso.schedulers.BF") class BF(Scheduler): def init(self): self.t_f = 0 diff --git a/simso/schedulers/CC_EDF.py b/simso/schedulers/CC_EDF.py index 86ef30b..b50ce7c 100644 --- a/simso/schedulers/CC_EDF.py +++ b/simso/schedulers/CC_EDF.py @@ -2,8 +2,13 @@ Cycle-Conserving EDF. A DVFS variant of EDF (uniprocessor). """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.CC_EDF", + required_proc_fields = [ + { 'name': 'priority', 'type': 'float', 'default': '1.0' } + ] +) class CC_EDF(Scheduler): def init(self): self.ready_list = [] diff --git a/simso/schedulers/DP_WRAP.py b/simso/schedulers/DP_WRAP.py index 0660f19..ea02885 100644 --- a/simso/schedulers/DP_WRAP.py +++ b/simso/schedulers/DP_WRAP.py @@ -4,8 +4,9 @@ Implementation of the DP-WRAP algorithm as presented by Levin et al. in """ from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.DP_WRAP") class DP_WRAP(Scheduler): def init(self): self.t_f = 0 diff --git a/simso/schedulers/EDCL.py b/simso/schedulers/EDCL.py index 21a25d2..0bd5028 100644 --- a/simso/schedulers/EDCL.py +++ b/simso/schedulers/EDCL.py @@ -4,8 +4,9 @@ __author__ = 'Pierre-Emmanuel Hladik' from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EDCL") class EDCL(Scheduler): """ EDCL Scheduler. diff --git a/simso/schedulers/EDF.py b/simso/schedulers/EDF.py index e5a7b27..1da6cf7 100644 --- a/simso/schedulers/EDF.py +++ b/simso/schedulers/EDF.py @@ -3,8 +3,9 @@ Implementation of the Global-EDF (Earliest Deadline First) for multiprocessor architectures. """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EDF") class EDF(Scheduler): """Earliest Deadline First""" def on_activate(self, job): diff --git a/simso/schedulers/EDF2.py b/simso/schedulers/EDF2.py index 8115c13..297bba0 100644 --- a/simso/schedulers/EDF2.py +++ b/simso/schedulers/EDF2.py @@ -3,8 +3,9 @@ Implementation of the Global-EDF (Earliest Deadline First) for multiprocessor architectures (alternative implementation as the one provided by EDF.py). """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EDF2") class EDF2(Scheduler): """Earliest Deadline First""" def init(self): diff --git a/simso/schedulers/EDF_US.py b/simso/schedulers/EDF_US.py index 9cb5424..9186fa9 100644 --- a/simso/schedulers/EDF_US.py +++ b/simso/schedulers/EDF_US.py @@ -2,8 +2,9 @@ Implementation of EDF-US[1/2]. """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EDF_US") class EDF_US(Scheduler): def init(self): self.ready_list = [] diff --git a/simso/schedulers/EDF_mono.py b/simso/schedulers/EDF_mono.py index d69fd1a..9772f38 100644 --- a/simso/schedulers/EDF_mono.py +++ b/simso/schedulers/EDF_mono.py @@ -2,8 +2,9 @@ Earliest Deadline First algorithm for uniprocessor architectures. """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EDF_mono") class EDF_mono(Scheduler): def init(self): self.ready_list = [] diff --git a/simso/schedulers/EDHS.py b/simso/schedulers/EDHS.py index c539d3e..74bf68b 100644 --- a/simso/schedulers/EDHS.py +++ b/simso/schedulers/EDHS.py @@ -8,13 +8,13 @@ from simso.core import Scheduler, Timer from simso.core.Scheduler import SchedulerInfo from fractions import Fraction from math import ceil +from simso.schedulers import scheduler migrating_tasks = {} # Mapping processor to scheduler. map_cpu_sched = {} - class EDF_modified(Scheduler): """ An EDF mono-processor scheduler modified to accept migrating jobs. @@ -69,6 +69,7 @@ class EDF_modified(Scheduler): return (job, cpu) +@scheduler("simso.schedulers.EDHS") class EDHS(Scheduler): def init(self): # Mapping task to scheduler. diff --git a/simso/schedulers/EDZL.py b/simso/schedulers/EDZL.py index 815187f..f071bd5 100644 --- a/simso/schedulers/EDZL.py +++ b/simso/schedulers/EDZL.py @@ -2,8 +2,9 @@ # coding=utf-8 from simso.core import Scheduler, Timer +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EDZL") class EDZL(Scheduler): """ EDZL Scheduler. EDF Scheduler with zero laxity events. diff --git a/simso/schedulers/EKG.py b/simso/schedulers/EKG.py index cc5496a..266ab24 100644 --- a/simso/schedulers/EKG.py +++ b/simso/schedulers/EKG.py @@ -2,6 +2,7 @@ from simso.core import Scheduler, Timer from simso.core.Scheduler import SchedulerInfo from fractions import Fraction from math import ceil +from simso.schedulers import scheduler class Modified_EDF(Scheduler): @@ -85,7 +86,11 @@ class Group(object): for task in self.tasks if task.jobs]) \ * self.sim.cycles_per_ms - +@scheduler("simso.schedulers.EKG", + required_fields = [ + {'name' : 'K', 'type' : 'int', 'default' : '0'} + ] +) class EKG(Scheduler): def init(self): self.groups = [] diff --git a/simso/schedulers/EPDF.py b/simso/schedulers/EPDF.py index d1531da..9264039 100644 --- a/simso/schedulers/EPDF.py +++ b/simso/schedulers/EPDF.py @@ -2,8 +2,9 @@ from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.EPDF") class EPDF(Scheduler): """Earliest Pseudo-Deadline First""" diff --git a/simso/schedulers/ER_PD2.py b/simso/schedulers/ER_PD2.py index 15b94ca..2753a18 100644 --- a/simso/schedulers/ER_PD2.py +++ b/simso/schedulers/ER_PD2.py @@ -2,6 +2,7 @@ from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler def rounded_wcet(job, q=None): @@ -88,7 +89,7 @@ class PseudoJob(object): return int(ceil(seq * job.deadline / rounded_wcet(job))) \ - int((seq - 1) * job.deadline / rounded_wcet(job)) - +@scheduler("simso.schedulers.ER_PD2") class ER_PD2(Scheduler): def init(self): self.ready_list = [] diff --git a/simso/schedulers/FP.py b/simso/schedulers/FP.py index d5670f0..f275334 100644 --- a/simso/schedulers/FP.py +++ b/simso/schedulers/FP.py @@ -2,8 +2,13 @@ # coding=utf-8 from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.FP", + required_task_fields = [ + {'name': 'priority', 'type' : 'int', 'default' : '0' } + ] +) class FP(Scheduler): """ Fixed Priority (use 'priority' field) """ def init(self): diff --git a/simso/schedulers/Fixed_PEDF.py b/simso/schedulers/Fixed_PEDF.py index 11223f0..fdb0ab0 100644 --- a/simso/schedulers/Fixed_PEDF.py +++ b/simso/schedulers/Fixed_PEDF.py @@ -4,8 +4,9 @@ from simso.core.Scheduler import SchedulerInfo from simso.schedulers.EDF_mono import EDF_mono from simso.utils import PartitionedScheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.Fixed_PEDF") class Fixed_PEDF(PartitionedScheduler): def init(self): PartitionedScheduler.init(self, SchedulerInfo("EDF_mono", EDF_mono)) diff --git a/simso/schedulers/G_FL.py b/simso/schedulers/G_FL.py index e2d36c9..b1ce5eb 100644 --- a/simso/schedulers/G_FL.py +++ b/simso/schedulers/G_FL.py @@ -4,8 +4,9 @@ Anderson in Fair lateness scheduling: Reducing maximum lateness in G-EDF-like scheduling. """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.G_FL") class G_FL(Scheduler): """Earliest Deadline First""" def init(self): diff --git a/simso/schedulers/G_FL_ZL.py b/simso/schedulers/G_FL_ZL.py index b6f35f7..9e25be3 100644 --- a/simso/schedulers/G_FL_ZL.py +++ b/simso/schedulers/G_FL_ZL.py @@ -1,6 +1,7 @@ from simso.core import Scheduler, Timer +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.G_FL_ZL") class G_FL_ZL(Scheduler): """ G_FL with Zero Laxity Scheduler. diff --git a/simso/schedulers/LB_P_EDF.py b/simso/schedulers/LB_P_EDF.py index e9de06c..6270fb5 100644 --- a/simso/schedulers/LB_P_EDF.py +++ b/simso/schedulers/LB_P_EDF.py @@ -5,8 +5,9 @@ Try to load balance the tasks among the processors. from simso.core.Scheduler import SchedulerInfo from simso.schedulers.EDF_mono import EDF_mono from simso.utils import PartitionedScheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.LB_P_EDF") class LB_P_EDF(PartitionedScheduler): def init(self): PartitionedScheduler.init(self, SchedulerInfo("simso.schedulers.EDF_mono")) diff --git a/simso/schedulers/LLF.py b/simso/schedulers/LLF.py index 740de5f..920189b 100644 --- a/simso/schedulers/LLF.py +++ b/simso/schedulers/LLF.py @@ -1,6 +1,7 @@ from simso.core import Scheduler, Timer +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.LLF") class LLF(Scheduler): """Least Laxity First""" def init(self): diff --git a/simso/schedulers/LLREF.py b/simso/schedulers/LLREF.py index cb473ac..24d3d70 100644 --- a/simso/schedulers/LLREF.py +++ b/simso/schedulers/LLREF.py @@ -5,8 +5,9 @@ Implementation of the LLREF scheduler as presented by Cho et al. in from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.LLREF") class LLREF(Scheduler): def init(self): self.selected_jobs = [] # Jobs currently running. diff --git a/simso/schedulers/LLREF2.py b/simso/schedulers/LLREF2.py index 3f01db6..2cd4d7f 100644 --- a/simso/schedulers/LLREF2.py +++ b/simso/schedulers/LLREF2.py @@ -5,8 +5,9 @@ Implementation of the LLREF scheduler as presented by Cho et al. in from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.LLREF2") class LLREF2(Scheduler): def init(self): self.selected_jobs = [] # Jobs currently running. diff --git a/simso/schedulers/LRE_TL.py b/simso/schedulers/LRE_TL.py index 7f5c7c4..c6b3eb5 100644 --- a/simso/schedulers/LRE_TL.py +++ b/simso/schedulers/LRE_TL.py @@ -6,8 +6,9 @@ Optimal Multiprocessor Scheduling Algorithm for Sporadic Task Sets". from simso.core import Scheduler, Timer from heapq import heappush, heapreplace, heappop, heapify from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.LRE_TL") class LRE_TL(Scheduler): def init(self): """ diff --git a/simso/schedulers/MLLF.py b/simso/schedulers/MLLF.py index 01de27b..3a615d7 100644 --- a/simso/schedulers/MLLF.py +++ b/simso/schedulers/MLLF.py @@ -1,6 +1,7 @@ from simso.core import Scheduler, Timer +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.MLLF") class MLLF(Scheduler): """Modified Least Laxity First""" def init(self): diff --git a/simso/schedulers/NVNLF.py b/simso/schedulers/NVNLF.py index 0895e12..46c36b4 100644 --- a/simso/schedulers/NVNLF.py +++ b/simso/schedulers/NVNLF.py @@ -6,8 +6,9 @@ Multiprocessors." from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.NVNLF") class NVNLF(Scheduler): def init(self): self.selected_jobs = [] # Jobs currently running. diff --git a/simso/schedulers/PD2.py b/simso/schedulers/PD2.py index a6cb2a1..0db664a 100644 --- a/simso/schedulers/PD2.py +++ b/simso/schedulers/PD2.py @@ -2,6 +2,7 @@ from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler def rounded_wcet(job, q=None): @@ -88,7 +89,7 @@ class PseudoJob(object): return int(ceil(seq * job.deadline / rounded_wcet(job))) \ - int((seq - 1) * job.deadline / rounded_wcet(job)) - +@scheduler("simso.schedulers.PD2") class PD2(Scheduler): quantum = 100000 # cycles diff --git a/simso/schedulers/P_EDF.py b/simso/schedulers/P_EDF.py index bd80161..765459e 100644 --- a/simso/schedulers/P_EDF.py +++ b/simso/schedulers/P_EDF.py @@ -4,8 +4,9 @@ Partitionned EDF using PartitionedScheduler. from simso.core.Scheduler import SchedulerInfo from simso.utils import PartitionedScheduler from simso.utils.PartitionedScheduler import decreasing_first_fit +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.P_EDF") class P_EDF(PartitionedScheduler): def init(self): PartitionedScheduler.init( diff --git a/simso/schedulers/P_EDF2.py b/simso/schedulers/P_EDF2.py index f672559..b10587d 100644 --- a/simso/schedulers/P_EDF2.py +++ b/simso/schedulers/P_EDF2.py @@ -6,8 +6,9 @@ Use EDF_mono. from simso.core import Scheduler from simso.core.Scheduler import SchedulerInfo from simso.schedulers.EDF_mono import EDF_mono +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.P_EDF2") class P_EDF2(Scheduler): def init(self): # Mapping processor to scheduler. diff --git a/simso/schedulers/P_EDF_WF.py b/simso/schedulers/P_EDF_WF.py index 19abf43..db9a27f 100644 --- a/simso/schedulers/P_EDF_WF.py +++ b/simso/schedulers/P_EDF_WF.py @@ -5,8 +5,9 @@ from simso.core.Scheduler import SchedulerInfo from simso.schedulers.EDF_mono import EDF_mono from simso.utils import PartitionedScheduler from simso.utils.PartitionedScheduler import decreasing_worst_fit +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.P_EDF_WF") class P_EDF_WF(PartitionedScheduler): def init(self): PartitionedScheduler.init( diff --git a/simso/schedulers/P_RM.py b/simso/schedulers/P_RM.py index e03a27d..4b4efcd 100644 --- a/simso/schedulers/P_RM.py +++ b/simso/schedulers/P_RM.py @@ -3,8 +3,9 @@ Partitionned EDF using PartitionedScheduler. """ from simso.core.Scheduler import SchedulerInfo from simso.utils import PartitionedScheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.P_RM") class P_RM(PartitionedScheduler): def init(self): PartitionedScheduler.init( diff --git a/simso/schedulers/PriD.py b/simso/schedulers/PriD.py index 64edd6e..1adab03 100644 --- a/simso/schedulers/PriD.py +++ b/simso/schedulers/PriD.py @@ -4,8 +4,9 @@ Priority-Driven Scheduling of Periodic Task Systems on Multiprocessors. """ from simso.core import Scheduler from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.PriD") class PriD(Scheduler): """EDF(k) scheduler""" def init(self): diff --git a/simso/schedulers/RM.py b/simso/schedulers/RM.py index 1c8a5ac..81faeb5 100644 --- a/simso/schedulers/RM.py +++ b/simso/schedulers/RM.py @@ -1,6 +1,7 @@ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.RM") class RM(Scheduler): """ Rate monotonic """ def init(self): diff --git a/simso/schedulers/RM_mono.py b/simso/schedulers/RM_mono.py index d0e8e45..119fcd2 100644 --- a/simso/schedulers/RM_mono.py +++ b/simso/schedulers/RM_mono.py @@ -2,8 +2,9 @@ Rate Monotic algorithm for uniprocessor architectures. """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.RM_mono") class RM_mono(Scheduler): def init(self): self.ready_list = [] diff --git a/simso/schedulers/RUN.py b/simso/schedulers/RUN.py index fb17e39..3ffe60d 100644 --- a/simso/schedulers/RUN.py +++ b/simso/schedulers/RUN.py @@ -10,8 +10,9 @@ tasks with implicit deadlines. from simso.core import Scheduler, Timer from simso.schedulers.RUNServer import EDFServer, TaskServer, DualServer, \ select_jobs, add_job, get_child_tasks +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.RUN") class RUN(Scheduler): """ RUN scheduler. The offline part is done here but the online part is mainly diff --git a/simso/schedulers/Static_EDF.py b/simso/schedulers/Static_EDF.py index 6f4f8ba..d891b50 100644 --- a/simso/schedulers/Static_EDF.py +++ b/simso/schedulers/Static_EDF.py @@ -2,8 +2,13 @@ Static EDF. A DVFS variant of EDF (uniprocessor). """ from simso.core import Scheduler +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.Static_EDF", + required_proc_fields = [ + { 'name': 'priority', 'type': 'float', 'default': '1.0' } + ] +) class Static_EDF(Scheduler): def init(self): self.ready_list = [] diff --git a/simso/schedulers/U_EDF.py b/simso/schedulers/U_EDF.py index 6ecd418..b11e8d2 100644 --- a/simso/schedulers/U_EDF.py +++ b/simso/schedulers/U_EDF.py @@ -7,8 +7,9 @@ tasks" from simso.core import Scheduler, Timer from math import ceil +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.U_EDF") class U_EDF(Scheduler): def init(self): self.al = {} diff --git a/simso/schedulers/WC_RUN.py b/simso/schedulers/WC_RUN.py index 4fe2ac2..bd2d817 100644 --- a/simso/schedulers/WC_RUN.py +++ b/simso/schedulers/WC_RUN.py @@ -3,8 +3,9 @@ Work-Conserving version of U-EDF. """ from simso.schedulers.RUN import RUN +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.WC_RUN") class WC_RUN(RUN): def init(self): RUN.init(self) diff --git a/simso/schedulers/WC_U_EDF.py b/simso/schedulers/WC_U_EDF.py index abe63e4..2f46cc0 100644 --- a/simso/schedulers/WC_U_EDF.py +++ b/simso/schedulers/WC_U_EDF.py @@ -3,8 +3,9 @@ Work-Conserving version of U-EDF. """ from simso.schedulers.U_EDF import U_EDF +from simso.schedulers import scheduler - +@scheduler("simso.schedulers.WC_U_EDF") class WC_U_EDF(U_EDF): # def on_terminated(self, job): # self.reschedule() -- libgit2 0.26.0