Ejemplo n.º 1
0
def partition_with_splits(ts):
    # Use worst-fit-decreasing APA partitioning with C=D splitting
    fail, maps = apa.edf_worst_fit_decreasing_difficulty(ts, with_splits=True,
                                                    split_callback=split_task)
    assert fail == set(), 'WARN: some tasks failed mapping: ' + str(fail)

    # Figure out all the processors on which a task is mapped
    vcpu_list = {}
    for i in maps:
        for t in maps[i]:
            name = '%d.%d' % (t.dom_id, t.vcpu_id)
            if name not in vcpu_list:
                vcpu_list[name] = []
            vcpu_list[name].append(i)

    # Now generate a VCPU info list from the mapping info
    splits = []
    vinfo_list = []
    i = 0
    for k, v in vcpu_list.iteritems():
        dom = k.split('.')[0]
        vcpu = k.split('.')[1]
        burstable = [x for x in ts if x.dom_id == int(dom) and x.vcpu_id == int(vcpu)][0].burstable
        vinfo_list.append(VCPUInfo(dom, vcpu, v, i, burstable))
        if len(v) > 1:
            splits.append([dom, vcpu])
        i += 1

    return maps, vinfo_list, splits
Ejemplo n.º 2
0
    def test_worst_fit_with_splits(self):
        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(self.ts1,
                            with_splits=True)

        self.assertEqual(failed, set())
        self.assertEqual(len(mapping), 2)
        self.assertEqual(mapping[1][0].cost, 66)
        self.assertEqual(mapping[1][1].cost, 34)
        self.assertEqual(mapping[2][0].cost, 66)
        self.assertEqual(mapping[2][1].cost, 32)
Ejemplo n.º 3
0
    def test_worst_fit_with_splits(self):
        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(
            self.ts1, with_splits=True)

        self.assertEqual(failed, set())
        self.assertEqual(len(mapping), 2)
        self.assertEqual(mapping[1][0].cost, 66)
        self.assertEqual(mapping[1][1].cost, 34)
        self.assertEqual(mapping[2][0].cost, 66)
        self.assertEqual(mapping[2][1].cost, 32)
Ejemplo n.º 4
0
    def test_worst_fit(self):
        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(self.ts)

        self.assertEqual(failed, set())
        self.assertEqual(len(mapping), 3)
        self.assertEqual(mapping[1], [self.ts[0], self.ts[1]])
        self.assertEqual(mapping[2], [self.ts[2]])
        self.assertEqual(mapping[3], [self.ts[3]])

        # give it one more to place
        self.ts.append(tasks.SporadicTask(19, 31))
        self.ts[-1].affinity = set([2, 3])
        self.ts.assign_ids()

        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(self.ts)

        self.assertEqual(len(mapping), 3)
        self.assertEqual(mapping[1], [self.ts[0], self.ts[1]])
        self.assertEqual(mapping[2], [self.ts[2]])
        self.assertEqual(mapping[3], [self.ts[4]])

        self.assertEqual(failed, set([self.ts[3]]))
Ejemplo n.º 5
0
    def test_worst_fit(self):
        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(self.ts)

        self.assertEqual(failed, set())
        self.assertEqual(len(mapping), 3)
        self.assertEqual(mapping[1], [self.ts[0], self.ts[1]])
        self.assertEqual(mapping[2], [self.ts[2]])
        self.assertEqual(mapping[3], [self.ts[3]])

        # give it one more to place
        self.ts.append(tasks.SporadicTask(19, 31))
        self.ts[-1].affinity = set([2, 3])
        self.ts.assign_ids()

        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(self.ts)

        self.assertEqual(len(mapping), 3)
        self.assertEqual(mapping[1], [self.ts[0], self.ts[1]])
        self.assertEqual(mapping[2], [self.ts[2]])
        self.assertEqual(mapping[3], [self.ts[4]])

        self.assertEqual(failed, set([self.ts[3]]))
Ejemplo n.º 6
0
    def test_worst_fit_with_splits2(self):
        self.ts1.append(tasks.SporadicTask(31, 100))
        self.ts1[-1].affinity = set([1, 2])
        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(self.ts1,
                            with_splits=True)

        self.assertNotEqual(failed, set())
        self.assertEqual(failed.pop().id, self.ts1[-1].id)
        self.assertEqual(len(mapping), 2)
        self.assertEqual(mapping[1][0].cost, 66)
        self.assertEqual(mapping[1][1].cost, 34)
        self.assertEqual(mapping[2][0].cost, 66)
        self.assertEqual(mapping[2][1].cost, 32)
        self.assertEqual(mapping[2][2].cost, 2)
Ejemplo n.º 7
0
    def test_worst_fit_with_splits2(self):
        self.ts1.append(tasks.SporadicTask(31, 100))
        self.ts1[-1].affinity = set([1, 2])
        failed, mapping = apa.edf_worst_fit_decreasing_difficulty(
            self.ts1, with_splits=True)

        self.assertNotEqual(failed, set())
        self.assertEqual(failed.pop().id, self.ts1[-1].id)
        self.assertEqual(len(mapping), 2)
        self.assertEqual(mapping[1][0].cost, 66)
        self.assertEqual(mapping[1][1].cost, 34)
        self.assertEqual(mapping[2][0].cost, 66)
        self.assertEqual(mapping[2][1].cost, 32)
        self.assertEqual(mapping[2][2].cost, 2)