From fb72dd09cfc16d0260363d38df1225b6663bc084 Mon Sep 17 00:00:00 2001 From: Namhoon Kim Date: Tue, 4 Apr 2017 03:35:59 +0000 Subject: MC2 support --- gen/__init__.py | 7 ++++--- gen/edf_generators.py | 33 ++++++++++++++++++++++++++++++++- gen/generator.py | 9 +++++---- 3 files changed, 41 insertions(+), 8 deletions(-) (limited to 'gen') diff --git a/gen/__init__.py b/gen/__init__.py index 8c60b46..07bbc91 100644 --- a/gen/__init__.py +++ b/gen/__init__.py @@ -1,6 +1,7 @@ import generator as gen import edf_generators as edf -gen.register_generator("G-EDF", edf.GedfGenerator) -gen.register_generator("P-EDF", edf.PedfGenerator) -gen.register_generator("C-EDF", edf.CedfGenerator) +#gen.register_generator("G-EDF", edf.GedfGenerator) +#gen.register_generator("P-EDF", edf.PedfGenerator) +gen.register_generator("MC2", edf.Mc2Generator) +#gen.register_generator("C-EDF", edf.CedfGenerator) diff --git a/gen/edf_generators.py b/gen/edf_generators.py index 8e4b8df..c769e46 100644 --- a/gen/edf_generators.py +++ b/gen/edf_generators.py @@ -6,6 +6,7 @@ TP_TBASE = """#for $t in $task_set #end for""" TP_GLOB_TASK = TP_TBASE.format("") TP_PART_TASK = TP_TBASE.format("-p $t.cpu") +TP_MC_TASK = TP_TBASE.format("-p $t.cpu -m $t.crit -i $t.id") class EdfGenerator(gen.Generator): '''Creates sporadic task sets with the most common Litmus options.''' @@ -16,7 +17,7 @@ class EdfGenerator(gen.Generator): def __make_options(self): '''Return generic EDF options.''' - return [gen.Generator._dist_option('utils', 'uni-medium', + return [gen.Generator._dist_option('utils', 'uni-very-light', gen.NAMED_UTILIZATIONS, 'Task utilization distributions.'), gen.Generator._dist_option('periods', 'harmonic', @@ -87,3 +88,33 @@ class GedfGenerator(EdfGenerator): def __init__(self, params={}): super(GedfGenerator, self).__init__("GSN-EDF", [TP_GLOB_TASK], [], params) + +class Mc2Generator(EdfGenerator): + def __init__(self, params={}): + super(Mc2Generator, self).__init__("MC2", [TP_MC_TASK], + [], params) + + def _customize(self, taskset, exp_params): + cpus = exp_params['cpus'] + start = 0 + + # Partition using worst-fit for most even distribution + utils = [0]*cpus + tasks = [0]*cpus + index = [1]*cpus + taskset = sorted(taskset, key=lambda task: task.period) + for t in taskset: + t.cpu = utils.index(min(utils)) + t.id = index[t.cpu] + if utils[t.cpu] < 0.05: + t.crit = 0 + elif utils[t.cpu] < 0.10: + t.crit = 1 + else: + t.crit = 2 + utils[t.cpu] += t.utilization() + tasks[t.cpu] += 1 + index[t.cpu] += 1 + + # Increment by one so release master has no tasks + t.cpu += start diff --git a/gen/generator.py b/gen/generator.py index 0999e84..909c730 100644 --- a/gen/generator.py +++ b/gen/generator.py @@ -75,13 +75,14 @@ class Generator(object): release_master = list(set([False, bool(rm_config)])) - return [GenOption('tasks', int, range(cpus, 5*cpus, cpus), + return [GenOption('tasks', int, range(cpus, 10*cpus, cpus), 'Number of tasks per experiment.'), GenOption('cpus', int, [cpus], 'Number of processors on target system.'), GenOption('release_master', [True,False], release_master, 'Redirect release interrupts to a single CPU.'), - GenOption('duration', float, [30], 'Experiment duration.')] + #GenOption('post', str, ['refill.sh'], 'Post script.'), + GenOption('duration', float, [10], 'Experiment duration.')] @staticmethod def _dist_option(name, default, distribution, help): @@ -113,9 +114,9 @@ class Generator(object): print(("Only created task set of size %d < %d for params %s. " + "Switching to light utilization.") % (len(ts), params['tasks'], params)) - print("Switching to light util. This usually means the " + + print("Switching to very-light util. This usually means the " + "utilization distribution is too agressive.") - return self._create_taskset(params, periods, NAMED_UTILIZATIONS['uni-light'], + return self._create_taskset(params, periods, NAMED_UTILIZATIONS['uni-very-light'], max_util) return ts -- cgit v1.2.2