From f234447fe547e15b74bfd5db032ee7c942667f6b Mon Sep 17 00:00:00 2001 From: Belákovics Ádám Date: Fri, 26 Oct 2018 14:18:41 +0200 Subject: [PATCH] modified scheduler --- circle/circle/settings/base.py | 2 +- circle/manager/scheduler.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/circle/circle/settings/base.py b/circle/circle/settings/base.py index 7e1a6d7..0148695 100644 --- a/circle/circle/settings/base.py +++ b/circle/circle/settings/base.py @@ -576,7 +576,7 @@ SESSION_COOKIE_NAME = "csessid%x" % (((getnode() // 139) ^ MAX_NODE_RAM = get_env_variable("MAX_NODE_RAM", 1024) MAX_NODE_CPU_CORE = get_env_variable("MAX_NODE_CPU_CORE", 10) -SCHEDULER_METHOD = get_env_variable("SCHEDULER_METHOD", 'random') +SCHEDULER_METHOD = get_env_variable("SCHEDULER_METHOD", 'advanced') # Url to download the client: (e.g. http://circlecloud.org/client/download/) CLIENT_DOWNLOAD_URL = get_env_variable('CLIENT_DOWNLOAD_URL', 'http://circlecloud.org/client/download/') diff --git a/circle/manager/scheduler.py b/circle/manager/scheduler.py index fb6f3e4..3db072b 100644 --- a/circle/manager/scheduler.py +++ b/circle/manager/scheduler.py @@ -110,6 +110,7 @@ def select_node(instance, nodes): logger.info('select_node: %s for %s', unicode(result), unicode(instance)) result.time_stamp = timezone.now() + result.save() return result @@ -118,10 +119,11 @@ def sorting_key(node): """Determines how valuable a node is for scheduling. """ key = 0 + corr = last_scheduled_correction_factor(node) if free_cpu_time(node) < free_ram(node): - key = free_cpu_time(node) + key = free_cpu_time(node) * corr else: - key = free_ram(node) + key = free_ram(node) * corr return key def last_scheduled_correction_factor(node): @@ -134,11 +136,13 @@ def last_scheduled_correction_factor(node): factor = 0 max_time_diff = settings.SCHEDULER_TIME_SENSITIVITY_IN_SECONDS current_time = timezone.now() - factor = (current_time - node.time_stamp)/max_time_diff + time_difference_in_seconds = (current_time - node.time_stamp).total_seconds() + factor = time_difference_in_seconds/float(max_time_diff) if factor > 1: factor = 1 elif factor < 0: - factor = 0 + factor = 1 + logger.info('Scheduler set factor to %s', unicode(factor)) return factor def has_traits(traits, node): -- libgit2 0.26.0