Add efficacy indicators for workload_stabilization strategy

This patch set adds efficacy indicators for workload_balancing
goal (that includes workload_stabilization and workload_balance
strategies so far).

Change-Id: I5b04d084ace7c661001c62f07b8308e5763e144d
This commit is contained in:
Alexander Chadin
2018-02-06 17:01:08 +03:00
parent 8e40880882
commit 81c241bef7
8 changed files with 117 additions and 14 deletions

View File

@@ -80,6 +80,10 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
self.retry_count = None
self.periods = None
self.aggregation_method = None
self.sd_before_audit = 0
self.sd_after_audit = 0
self.instance_migrations_count = 0
self.instances_count = 0
@classmethod
def get_name(cls):
@@ -460,6 +464,7 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
'threshold': float(self.thresholds[metric]),
'sd': metric_sd})
LOG.info("Launching workload optimization...")
self.sd_before_audit = metric_sd
return self.simulate_migrations(hosts_load)
def add_migration(self,
@@ -482,6 +487,7 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
self.add_migration(mig_instance.uuid, 'live',
mig_source_node.uuid,
mig_destination_node.uuid)
self.instance_migrations_count += 1
def migrate(self, instance_uuid, src_host, dst_host):
mig_instance = self.compute_model.get_instance_by_uuid(instance_uuid)
@@ -545,6 +551,7 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
self.migrate(instance_host['instance'],
instance_host['s_host'],
instance_host['host'])
self.sd_after_audit = min_sd
for metric, value in zip(self.metrics, instance_load[:-1]):
if value < float(self.thresholds[metric]):
@@ -564,4 +571,11 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
"""
self.fill_solution()
self.solution.set_efficacy_indicators(
instance_migrations_count=self.instance_migrations_count,
standard_deviation_before_audit=self.sd_before_audit,
standard_deviation_after_audit=self.sd_after_audit,
instances_count=len(self.compute_model.get_all_instances()),
)
LOG.debug(self.compute_model.to_string())