Transform KB into MB and normalize CPU

This patch set normalizes CPU for hardware.cpu.util meter and
transform KB into MB fetched from hardware.memory.used meter.

Change-Id: I6dd1d053e81f06c3adb6fb256ac77bbf55a07f3e
This commit is contained in:
Alexander Chadin
2016-10-17 17:34:17 +03:00
parent e7a1e148ca
commit ef0d133ba8
3 changed files with 30 additions and 20 deletions

View File

@@ -25,6 +25,7 @@ import random
import oslo_cache
from oslo_config import cfg
from oslo_log import log
import oslo_utils
from watcher._i18n import _LI, _
from watcher.common import exception
@@ -201,6 +202,8 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
if avg_meter is None:
raise exception.NoMetricValuesForInstance(
resource_id=instance_uuid, metric_name=meter)
if meter == 'cpu_util':
avg_meter /= float(100)
instance_load[meter] = avg_meter
return instance_load
@@ -236,6 +239,10 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
raise exception.NoSuchMetricForHost(
metric=self.instance_metrics[metric],
host=node_id)
if self.instance_metrics[metric] == 'hardware.memory.used':
avg_meter /= oslo_utils.units.Ki
if self.instance_metrics[metric] == 'hardware.cpu.util':
avg_meter /= 100
hosts_load[node_id][metric] = avg_meter
return hosts_load

View File

@@ -18,6 +18,8 @@
import random
import oslo_utils
class FakerMetricsCollector(object):
def __init__(self):
@@ -68,11 +70,12 @@ class FakerMetricsCollector(object):
def get_usage_node_ram(self, uuid):
mock = {}
mock['Node_0'] = 7
mock['Node_1'] = 5
mock['Node_2'] = 29
mock['Node_3'] = 8
mock['Node_4'] = 4
# Ceilometer returns hardware.memory.used samples in KB.
mock['Node_0'] = 7*oslo_utils.units.Ki
mock['Node_1'] = 5*oslo_utils.units.Ki
mock['Node_2'] = 29*oslo_utils.units.Ki
mock['Node_3'] = 8*oslo_utils.units.Ki
mock['Node_4'] = 4*oslo_utils.units.Ki
if uuid not in mock.keys():
# mock[uuid] = random.randint(1, 4)
@@ -136,11 +139,11 @@ class FakerMetricsCollector(object):
# node 4
mock['INSTANCE_7_hostname_7'] = 4
mock['Node_0'] = 0.07
mock['Node_1'] = 0.05
mock['Node_2'] = 0.1
mock['Node_3'] = 0.04
mock['Node_4'] = 0.02
mock['Node_0'] = 7
mock['Node_1'] = 5
mock['Node_2'] = 10
mock['Node_3'] = 4
mock['Node_4'] = 2
if uuid not in mock.keys():
# mock[uuid] = random.randint(1, 4)

View File

@@ -86,7 +86,7 @@ class TestWorkloadStabilization(base.TestCase):
self.m_model.return_value = self.fake_cluster.generate_scenario_1()
instance_0_dict = {
'uuid': 'INSTANCE_0', 'vcpus': 10,
'cpu_util': 7, 'memory.resident': 2}
'cpu_util': 0.07, 'memory.resident': 2}
self.assertEqual(
instance_0_dict, self.strategy.get_instance_load("INSTANCE_0"))
@@ -106,9 +106,8 @@ class TestWorkloadStabilization(base.TestCase):
def test_get_hosts_load(self):
self.m_model.return_value = self.fake_cluster.generate_scenario_1()
self.assertEqual(
self.strategy.get_hosts_load(),
self.hosts_load_assert)
self.assertEqual(self.strategy.get_hosts_load(),
self.hosts_load_assert)
def test_get_sd(self):
test_cpu_sd = 0.027
@@ -128,11 +127,12 @@ class TestWorkloadStabilization(base.TestCase):
def test_calculate_migration_case(self):
self.m_model.return_value = self.fake_cluster.generate_scenario_1()
self.assertEqual(
self.strategy.calculate_migration_case(
self.hosts_load_assert, "INSTANCE_5",
"Node_2", "Node_1")[-1]["Node_1"],
{'cpu_util': 2.55, 'memory.resident': 21, 'vcpus': 40})
result = self.strategy.calculate_migration_case(
self.hosts_load_assert, "INSTANCE_5", "Node_2", "Node_1")[-1][
"Node_1"]
result['cpu_util'] = round(result['cpu_util'], 3)
self.assertEqual(result, {'cpu_util': 0.075, 'memory.resident': 21,
'vcpus': 40})
def test_simulate_migrations(self):
model = self.fake_cluster.generate_scenario_1()
@@ -174,7 +174,7 @@ class TestWorkloadStabilization(base.TestCase):
)
with mock.patch.object(self.strategy, 'migrate') as mock_migrate:
self.strategy.do_execute()
self.assertEqual(mock_migrate.call_count, 1)
self.assertEqual(mock_migrate.call_count, 2)
def test_execute_nothing_to_migrate(self):
self.m_model.return_value = self.fake_cluster.generate_scenario_1()