[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23400] trunk/blender/release/io/netrender : netrender: more load balancing rules

Martin Poirier theeth at yahoo.com
Mon Sep 21 18:01:31 CEST 2009


Revision: 23400
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23400
Author:   theeth
Date:     2009-09-21 18:01:31 +0200 (Mon, 21 Sep 2009)

Log Message:
-----------
netrender: more load balancing rules

Modified Paths:
--------------
    trunk/blender/release/io/netrender/balancing.py
    trunk/blender/release/io/netrender/master.py
    trunk/blender/release/io/netrender/model.py

Modified: trunk/blender/release/io/netrender/balancing.py
===================================================================
--- trunk/blender/release/io/netrender/balancing.py	2009-09-21 15:51:29 UTC (rev 23399)
+++ trunk/blender/release/io/netrender/balancing.py	2009-09-21 16:01:31 UTC (rev 23400)
@@ -64,12 +64,31 @@
 
 class RatingCredit(RatingRule):
 	def rate(self, job):
-		return -job.credits # more credit is better (sort at first in list)
+		return -job.credits * job.priority # more credit is better (sort at first in list)
 
 class NewJobPriority(PriorityRule):
+	def __init__(self, limit = 1):
+		self.limit = limit
+		
 	def test(self, job):
-		return job.countFrames(status = DISPATCHED) == 0
+		return job.countFrames(status = DISPATCHED) < self.limit
 
+class MinimumTimeBetweenDispatchPriority(PriorityRule):
+	def __init__(self, limit = 10):
+		self.limit = limit
+		
+	def test(self, job):
+		return (time.time() - job.last_dispatched) / 60 > self.limit
+
 class ExcludeQueuedEmptyJob(ExclusionRule):
 	def test(self, job):
 		return job.status != JOB_QUEUED or job.countFrames(status = QUEUED) == 0
+	
+class ExcludeSlavesLimit(ExclusionRule):
+	def __init__(self, count_jobs, count_slaves, limit = 0.75):
+		self.count_jobs = count_jobs
+		self.count_slaves = count_slaves
+		self.limit = limit
+		
+	def test(self, job):
+		return not ( self.count_jobs() == 1 or float(job.countSlaves() + 1) / self.count_slaves() <= self.limit )
\ No newline at end of file

Modified: trunk/blender/release/io/netrender/master.py
===================================================================
--- trunk/blender/release/io/netrender/master.py	2009-09-21 15:51:29 UTC (rev 23399)
+++ trunk/blender/release/io/netrender/master.py	2009-09-21 16:01:31 UTC (rev 23400)
@@ -575,7 +575,9 @@
 		self.balancer = netrender.balancing.Balancer()
 		self.balancer.addRule(netrender.balancing.RatingCredit())
 		self.balancer.addException(netrender.balancing.ExcludeQueuedEmptyJob())
+		self.balancer.addException(netrender.balancing.ExcludeSlavesLimit(self.countJobs, self.countSlaves))
 		self.balancer.addPriority(netrender.balancing.NewJobPriority())
+		self.balancer.addPriority(netrender.balancing.MinimumTimeBetweenDispatchPriority())
 		
 		if not os.path.exists(self.path):
 			os.mkdir(self.path)
@@ -607,7 +609,18 @@
 	
 	def update(self):
 		self.balancer.balance(self.jobs)
+	
+	def countJobs(self, status = JOB_QUEUED):
+		total = 0
+		for j in self.jobs:
+			if j.status == status:
+				total += 1
 		
+		return total
+	
+	def countSlaves(self):
+		return len(self.slaves)
+	
 	def removeJob(self, id):
 		job = self.jobs_map.pop(id)
 

Modified: trunk/blender/release/io/netrender/model.py
===================================================================
--- trunk/blender/release/io/netrender/model.py	2009-09-21 15:51:29 UTC (rev 23399)
+++ trunk/blender/release/io/netrender/model.py	2009-09-21 16:01:31 UTC (rev 23400)
@@ -97,15 +97,14 @@
 	
 	def countFrames(self, status=QUEUED):
 		total = 0
-		for j in self.frames:
-			if j.status == status:
+		for f in self.frames:
+			if f.status == status:
 				total += 1
 		
 		return total
 	
 	def countSlaves(self):
 		return len(set((frame.slave for frame in self.frames if frame.status == DISPATCHED)))
-		
 	
 	def framesStatus(self):
 		results = {





More information about the Bf-blender-cvs mailing list