From 57d87fed3fafd55ae34ddd35cfbeea8fb9c0d26e Mon Sep 17 00:00:00 2001 From: Glenn Elliott Date: Thu, 2 Jan 2014 10:50:27 -0500 Subject: Script updates. --- gen/__init__.py | 1 + gen/edf_generators.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) (limited to 'gen') diff --git a/gen/__init__.py b/gen/__init__.py index 8c60b46..654ac19 100644 --- a/gen/__init__.py +++ b/gen/__init__.py @@ -4,3 +4,4 @@ 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("C-FL-split", edf.CflSplitGenerator) diff --git a/gen/edf_generators.py b/gen/edf_generators.py index 8e4b8df..ce99d05 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_CLST_TASK = TP_TBASE.format("-p $t.cluster -z $t.cluster_sz") class EdfGenerator(gen.Generator): '''Creates sporadic task sets with the most common Litmus options.''' @@ -83,6 +84,45 @@ class CedfGenerator(PartitionedGenerator): [CedfGenerator.CLUSTER_OPTION], params) +class CflSplitGenerator(EdfGenerator): + TP_CLUSTER = "plugins/C-FL-split/cluster{$level}" + CLUSTER_OPTION = gen.GenOption('level', ['L1', 'L2', 'L3', 'ALL'], 'L2', + 'Cache clustering level.',) +# CLUSTER_SZ_OPTION = gen.GenOption('cluster_size', ['1', '2', '6', '24'], '2', +# 'Cluster size.',) + + def __init__(self, params={}): + super(CflSplitGenerator, self).__init__("C-FL-split", + [CflSplitGenerator.TP_CLUSTER, TP_CLST_TASK], + [CflSplitGenerator.CLUSTER_OPTION], + params) + + def _customize(self, taskset, exp_params): + cpus = int(exp_params['cpus']) +# cluster_sz = int(exp_params['cluster_size']) + + if exp_params['level'] == 'L1': + cluster_sz = 1 + elif exp_params['level'] == 'L2': + cluster_sz = 2 + elif exp_params['level'] == 'L3': + cluster_sz = 6 + elif exp_params['level'] == 'ALL': + cluster_sz = 24 + else: + assert False + + num_clusters = cpus / cluster_sz + assert num_clusters * cluster_sz == cpus + + utils = [0]*num_clusters + tasks = [0]*num_clusters + for t in taskset: + t.cluster = utils.index(min(utils)) + t.cluster_sz = cluster_sz + utils[t.cluster] += t.utilization() + tasks[t.cluster] += 1 + class GedfGenerator(EdfGenerator): def __init__(self, params={}): super(GedfGenerator, self).__init__("GSN-EDF", [TP_GLOB_TASK], -- cgit v1.2.2