[haizea-commit] r609 - in branches/TP2.0: src/haizea/core/scheduler tests
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Fri Jul 17 10:04:34 CDT 2009
Author: borja
Date: 2009-07-17 10:04:33 -0500 (Fri, 17 Jul 2009)
New Revision: 609
Modified:
branches/TP2.0/src/haizea/core/scheduler/slottable.py
branches/TP2.0/tests/sample_slottables.py
branches/TP2.0/tests/test_mapper.py
branches/TP2.0/tests/test_slottable.py
Log:
- Fixed bug in availability window construction.
- A couple of minor fixes in unit tests.
Modified: branches/TP2.0/src/haizea/core/scheduler/slottable.py
===================================================================
--- branches/TP2.0/src/haizea/core/scheduler/slottable.py 2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/src/haizea/core/scheduler/slottable.py 2009-07-17 15:04:33 UTC (rev 609)
@@ -76,6 +76,16 @@
return False
return True
+ def any_less(self, res2):
+ for i in xrange(self.slottable.rtuple_len):
+ if self._res[i] < res2._res[i]:
+ return True
+ return False
+
+ def min(self, res2):
+ for i in xrange(self.slottable.rtuple_len):
+ self._res[i] = min(self._res[i], res2._res[i])
+
def decr(self, res2):
for slottype in xrange(self.slottable.rtuple_len):
self._res[slottype] -= res2._res[slottype]
@@ -621,10 +631,10 @@
rrs.sort(key=attrgetter("start"))
pos = 0
# Fill in rest of changepoint hash table
+
for rr in rrs:
while rr.start >= self.time and self.cp_list[pos] != rr.start:
pos += 1
-
lease = rr.lease
self.leases.add(lease)
@@ -633,13 +643,12 @@
start_cp = self.changepoints[rr.start]
else:
start_cp = self.changepoints[self.time]
-
+
start_cp.leases.add(lease)
for node in rr.resources_in_pnode:
start_cp.nodes[node].decr(rr.resources_in_pnode[node])
start_cp.nodes[node].add_lease(lease, rr.resources_in_pnode[node])
-
-
+
pos2 = pos + 1
while self.cp_list[pos2] < rr.end:
@@ -673,14 +682,14 @@
node = self.changepoints[time].nodes[node]
prev_avail = None
prev_node = None
-
while node != None:
if len(preempted_leases) == None:
available = ResourceTuple.copy(node.available)
else:
available = node.get_avail_withpreemption(preempted_leases)
- if prev_avail != None and available.fits_in(prev_avail.available):
+ if prev_avail != None and available.any_less(prev_avail.available):
+ available.min(prev_avail.available)
availentry = AvailEntry(available, None)
avails.append(availentry)
prev_avail.until = prev_node.next_cp
@@ -692,7 +701,7 @@
prev_node = node
node = node.next_nodeavail
-
+
return AvailabilityInNode(avails)
def get_nodes_at(self, time):
Modified: branches/TP2.0/tests/sample_slottables.py
===================================================================
--- branches/TP2.0/tests/sample_slottables.py 2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/tests/sample_slottables.py 2009-07-17 15:04:33 UTC (rev 609)
@@ -46,10 +46,10 @@
slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
+ slottable.add_node(1, FULL_NODE)
+ slottable.add_node(2, FULL_NODE)
+ slottable.add_node(3, FULL_NODE)
+ slottable.add_node(4, FULL_NODE)
lease1 = Lease(None,[],None,None,None,1,None)
lease1.id = 1
@@ -97,10 +97,10 @@
slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
+ slottable.add_node(1, FULL_NODE)
+ slottable.add_node(2, FULL_NODE)
+ slottable.add_node(3, FULL_NODE)
+ slottable.add_node(4, FULL_NODE)
lease1 = create_ar_lease(lease_id = 1,
submit_time = T1200,
@@ -124,10 +124,10 @@
slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
- slottable.add_node(FULL_NODE)
+ slottable.add_node(1, FULL_NODE)
+ slottable.add_node(2, FULL_NODE)
+ slottable.add_node(3, FULL_NODE)
+ slottable.add_node(4, FULL_NODE)
lease1 = create_ar_lease(lease_id = 1,
submit_time = T1200,
@@ -153,4 +153,37 @@
requested_resources = {1: HALF_NODE})
create_reservation_from_lease(lease3, {1:2}, slottable)
- return slottable, [lease1, lease2, lease3]
\ No newline at end of file
+ return slottable, [lease1, lease2, lease3]
+
+def sample_slottable_4():
+ slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
+ FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
+
+ slottable.add_node(1, FULL_NODE)
+
+ lease1 = create_ar_lease(lease_id = 1,
+ submit_time = T1200,
+ start = T1315,
+ end = T1420,
+ preemptible = False,
+ requested_resources = {1: HALF_NODE})
+ create_reservation_from_lease(lease1, {1:1}, slottable)
+
+ lease2 = create_ar_lease(lease_id = 2,
+ submit_time = T1200,
+ start = T1330,
+ end = T1415,
+ preemptible = False,
+ requested_resources = {1: QRTR_NODE})
+ create_reservation_from_lease(lease2, {1:1}, slottable)
+
+ #lease3 = create_ar_lease(lease_id = 3,
+ # submit_time = T1200,
+ # start = T1345,
+ # end = T1400,
+ # preemptible = False,
+ # requested_resources = {1: QRTR_NODE})
+ #create_reservation_from_lease(lease1, {1:1}, slottable)
+
+
+ return slottable, [lease1, lease2, None]
\ No newline at end of file
Modified: branches/TP2.0/tests/test_mapper.py
===================================================================
--- branches/TP2.0/tests/test_mapper.py 2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/tests/test_mapper.py 2009-07-17 15:04:33 UTC (rev 609)
@@ -1,19 +1,21 @@
from haizea.core.leases import Lease
from haizea.core.scheduler.resourcepool import ResourcePoolNode
-from haizea.core.scheduler.policy import Policy
+from haizea.core.scheduler.policy import PolicyManager
from haizea.core.scheduler.slottable import ResourceTuple, SlotTable, ResourceReservation, AvailabilityWindow
from haizea.core.scheduler.mapper import GreedyMapper
+from haizea.policies.host_selection import GreedyPolicy
from mx import DateTime
import haizea.common.constants as constants
from sample_slottables import *
from common import create_tmp_slottable
-class SimplePolicy(Policy):
+class SimplePolicy(PolicyManager):
def __init__(self, slottable, preemption):
- Policy.__init__(self, slottable)
+ PolicyManager.__init__(self, slottable, None, None, None)
self.preemption = preemption
+ self.host_selection = GreedyPolicy(slottable)
- def get_lease_preemptability_score(self, preemptor, preemptee):
+ def get_lease_preemptability_score(self, preemptor, preemptee, time):
if self.preemption:
return 1
else:
Modified: branches/TP2.0/tests/test_slottable.py
===================================================================
--- branches/TP2.0/tests/test_slottable.py 2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/tests/test_slottable.py 2009-07-17 15:04:33 UTC (rev 609)
@@ -374,8 +374,8 @@
self.slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(self.slottable)
- self.slottable.add_node(FULL_NODE)
- self.slottable.add_node(FULL_NODE)
+ self.slottable.add_node(1, FULL_NODE)
+ self.slottable.add_node(2, FULL_NODE)
assert self.slottable.get_total_capacity(constants.RES_CPU) == 200
assert self.slottable.get_total_capacity(constants.RES_MEM) == 2048
@@ -649,4 +649,33 @@
avail = aw.get_availability_at_node(T1415, 4)
assert(len(avail.avail_list)==1)
assert(avail.avail_list[0].available == FULL_NODE)
- assert(avail.avail_list[0].until == None)
\ No newline at end of file
+ assert(avail.avail_list[0].until == None)
+
+ self.slottable, leases = sample_slottable_4()
+ FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(self.slottable)
+
+ lease1,lease2,lease3 = leases
+ aw = self.slottable.get_availability_window(T1300)
+
+ # 13:30
+ avail_node_assertions(time = T1300, avail = FULL_NODE, node_id = 1,
+ leases = {}, next_cp = T1315)
+ avail_node_assertions(time = T1315, avail = HALF_NODE, node_id = 1,
+ leases = {lease1:HALF_NODE}, next_cp = T1330)
+ avail_node_assertions(time = T1330, avail = QRTR_NODE, node_id = 1,
+ leases = {lease1:HALF_NODE,lease2:QRTR_NODE}, next_cp = T1415)
+
+ avail = aw.get_availability_at_node(T1300, 1)
+ print avail.avail_list
+ print avail.avail_list[0].available, avail.avail_list[0].until
+ print avail.avail_list[1].available, avail.avail_list[1].until
+ print avail.avail_list[2].available, avail.avail_list[2].until
+ assert(len(avail.avail_list)==3)
+ assert(avail.avail_list[0].available == FULL_NODE)
+ assert(avail.avail_list[0].until == T1315)
+ assert(avail.avail_list[1].available == HALF_NODE)
+ assert(avail.avail_list[1].until == T1330)
+ assert(avail.avail_list[2].available == QRTR_NODE)
+ assert(avail.avail_list[2].until == None)
+
+
\ No newline at end of file
More information about the Haizea-commit
mailing list