[haizea-commit] r754 - in branches/1.1/src/haizea: core/scheduler pluggable/accounting pluggable/policies
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Tue Jan 12 17:45:22 CST 2010
Author: borja
Date: 2010-01-12 17:45:22 -0600 (Tue, 12 Jan 2010)
New Revision: 754
Modified:
branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
branches/1.1/src/haizea/pluggable/accounting/leases.py
branches/1.1/src/haizea/pluggable/policies/pricing.py
Log:
Miscellaneous fixes to deadline scheduling. Added pricing of surcharge from preempted leases.
Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py 2010-01-12 23:44:21 UTC (rev 753)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py 2010-01-12 23:45:22 UTC (rev 754)
@@ -778,6 +778,12 @@
if feasible:
for lease_to_preempt in preempted_leases:
+ if lease.id in cancelled:
+ dur = lease_to_preempt.duration.requested - lease_to_preempt.duration.accumulated
+ else:
+ preempt_vmrr = lease_to_preempt.get_last_vmrr()
+ dur = lease_to_preempt.duration.requested - lease_to_preempt.duration.accumulated - (preempt_vmrr.end - preempt_vmrr.start)
+
node_ids = self.slottable.nodes.keys()
earliest = {}
Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-12 23:44:21 UTC (rev 753)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-12 23:45:22 UTC (rev 754)
@@ -611,7 +611,7 @@
res_str = " (resuming)"
if mustsuspend:
susp_str = " (suspending)"
- self.logger.info("Lease #%i has been scheduled on nodes %s from %s%s to %s%s" % (lease.id, mapping.values(), start, res_str, end, susp_str))
+ self.logger.info("Lease #%i can be scheduled on nodes %s from %s%s to %s%s" % (lease.id, mapping.values(), start, res_str, end, susp_str))
return vmrr, preemptions
@@ -624,13 +624,11 @@
slack = (lease.deadline - lease.start.requested) / lease.duration.requested
if slack <= 2.0:
try:
+ self.logger.debug("Trying to schedule lease #%i as an advance reservation..." % lease.id)
vmrr, preemptions = self.__schedule_exact(lease, duration, nexttime, earliest)
- if lease.duration.known != None:
- print "LEASE %i - %.2f - %i" % (lease.id, slack, lease.duration.known.seconds * lease.numnodes)
- else:
- print "LEASE %i - %.2f - %i" % (lease.id, slack, lease.duration.requested.seconds * lease.numnodes)
return vmrr, preemptions
except:
+ self.logger.debug("Lease #%i cannot be scheduled as an advance reservation, trying as best-effort..." % lease.id)
vmrr, preemptions = self.__schedule_asap(lease, duration, nexttime, earliest, allow_in_future = True, override_state=override_state)
if vmrr.end - vmrr.start != duration or vmrr.end > lease.deadline or len(preemptions)>0:
self.logger.debug("Lease #%i cannot be scheduled before deadline using best-effort." % lease.id)
Modified: branches/1.1/src/haizea/pluggable/accounting/leases.py
===================================================================
--- branches/1.1/src/haizea/pluggable/accounting/leases.py 2010-01-12 23:44:21 UTC (rev 753)
+++ branches/1.1/src/haizea/pluggable/accounting/leases.py 2010-01-12 23:45:22 UTC (rev 754)
@@ -257,10 +257,12 @@
"""
COUNTER_REVENUE="Revenue"
+ COUNTER_SURCHARGE="Surcharge"
COUNTER_MISSED_REVENUE_UNDERCHARGE="Missed revenue (undercharging)"
COUNTER_MISSED_REVENUE_REJECT="Missed revenue (reject)"
COUNTER_MISSED_REVENUE_REJECT_BY_USER="Missed revenue (reject by user)"
STAT_REVENUE="Revenue"
+ STAT_SURCHARGE="Revenue"
STAT_MISSED_REVENUE_UNDERCHARGE="Missed revenue (undercharging)"
STAT_MISSED_REVENUE_REJECT="Missed revenue (reject)"
STAT_MISSED_REVENUE_REJECT_BY_USER="Missed revenue (reject by user)"
@@ -271,10 +273,12 @@
"""See AccountingProbe.__init__"""
AccountingProbe.__init__(self, accounting)
self.accounting.create_counter(PriceProbe.COUNTER_REVENUE, AccountingDataCollection.AVERAGE_NONE)
+ self.accounting.create_counter(PriceProbe.COUNTER_SURCHARGE, AccountingDataCollection.AVERAGE_NONE)
self.accounting.create_counter(PriceProbe.COUNTER_MISSED_REVENUE_UNDERCHARGE, AccountingDataCollection.AVERAGE_NONE)
self.accounting.create_counter(PriceProbe.COUNTER_MISSED_REVENUE_REJECT, AccountingDataCollection.AVERAGE_NONE)
self.accounting.create_counter(PriceProbe.COUNTER_MISSED_REVENUE_REJECT_BY_USER, AccountingDataCollection.AVERAGE_NONE)
self.accounting.create_stat(PriceProbe.STAT_REVENUE)
+ self.accounting.create_stat(PriceProbe.STAT_SURCHARGE)
self.accounting.create_stat(PriceProbe.STAT_MISSED_REVENUE_UNDERCHARGE)
self.accounting.create_stat(PriceProbe.STAT_MISSED_REVENUE_REJECT)
self.accounting.create_stat(PriceProbe.STAT_MISSED_REVENUE_REJECT_BY_USER)
@@ -285,6 +289,7 @@
def finalize_accounting(self):
"""See AccountingProbe.finalize_accounting"""
self._set_stat_from_counter(PriceProbe.STAT_REVENUE, PriceProbe.COUNTER_REVENUE)
+ self._set_stat_from_counter(PriceProbe.STAT_SURCHARGE, PriceProbe.COUNTER_SURCHARGE)
self._set_stat_from_counter(PriceProbe.STAT_MISSED_REVENUE_UNDERCHARGE, PriceProbe.COUNTER_MISSED_REVENUE_UNDERCHARGE)
self._set_stat_from_counter(PriceProbe.STAT_MISSED_REVENUE_REJECT, PriceProbe.COUNTER_MISSED_REVENUE_REJECT)
self._set_stat_from_counter(PriceProbe.STAT_MISSED_REVENUE_REJECT_BY_USER, PriceProbe.COUNTER_MISSED_REVENUE_REJECT_BY_USER)
Modified: branches/1.1/src/haizea/pluggable/policies/pricing.py
===================================================================
--- branches/1.1/src/haizea/pluggable/policies/pricing.py 2010-01-12 23:44:21 UTC (rev 753)
+++ branches/1.1/src/haizea/pluggable/policies/pricing.py 2010-01-12 23:45:22 UTC (rev 754)
@@ -65,10 +65,20 @@
self.fair_rate = get_config().config.getfloat("pricing", "fair-rate")
def get_fair_price(self, lease):
- fair_price = (lease.duration.requested.seconds / 3600) * lease.numnodes * self.fair_rate
- return fair_price
+ return (lease.duration.requested.seconds / 3600.0) * lease.numnodes * self.fair_rate
+ def get_surcharge(self, preempted_leases):
+ surcharge = 0
+ for l in preempted_leases:
+ suspend_time = l.estimate_suspend_time()
+ resume_time = l.estimate_resume_time()
+ surcharge += ((suspend_time + resume_time).seconds / 3600.0) * l.numnodes * self.fair_rate
+
+ return surcharge
+ def get_price(self, lease, preempted_leases):
+ return self.get_fair_price(lease) + self.get_surcharge(preempted_leases)
+
class AlwaysFairPricePolicy(FairPricePolicy):
"""...
"""
@@ -91,7 +101,7 @@
lease -- Lease that is being scheduled.
preempted_leases -- Leases that would have to be preempted to support this lease.
"""
- return self.get_fair_price(lease)
+ return self.get_price(lease, preempted_leases)
class RandomMultipleOfFairPricePolicy(FairPricePolicy):
"""Base class for policies that rely on the notion of a fair rate for computation
More information about the Haizea-commit
mailing list