Merge "Change hardware.cpu_util in workload_stabilization"
This commit is contained in:
@@ -31,6 +31,7 @@ import copy
|
|||||||
import itertools
|
import itertools
|
||||||
import math
|
import math
|
||||||
import random
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
import oslo_cache
|
import oslo_cache
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
@@ -119,7 +120,7 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
|
|||||||
"description": "Mapping to get hardware statistics using"
|
"description": "Mapping to get hardware statistics using"
|
||||||
" instance metrics",
|
" instance metrics",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"default": {"cpu_util": "hardware.cpu.util",
|
"default": {"cpu_util": "compute.node.cpu.percent",
|
||||||
"memory.resident": "hardware.memory.used"}
|
"memory.resident": "hardware.memory.used"}
|
||||||
},
|
},
|
||||||
"host_choice": {
|
"host_choice": {
|
||||||
@@ -224,7 +225,7 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
|
|||||||
def get_hosts_load(self):
|
def get_hosts_load(self):
|
||||||
"""Get load of every available host by gathering instances load"""
|
"""Get load of every available host by gathering instances load"""
|
||||||
hosts_load = {}
|
hosts_load = {}
|
||||||
for node_id in self.get_available_nodes():
|
for node_id, node in self.get_available_nodes().items():
|
||||||
hosts_load[node_id] = {}
|
hosts_load[node_id] = {}
|
||||||
host_vcpus = self.compute_model.get_resource_by_uuid(
|
host_vcpus = self.compute_model.get_resource_by_uuid(
|
||||||
element.ResourceType.cpu_cores).get_capacity(
|
element.ResourceType.cpu_cores).get_capacity(
|
||||||
@@ -232,19 +233,27 @@ class WorkloadStabilization(base.WorkloadStabilizationBaseStrategy):
|
|||||||
hosts_load[node_id]['vcpus'] = host_vcpus
|
hosts_load[node_id]['vcpus'] = host_vcpus
|
||||||
|
|
||||||
for metric in self.metrics:
|
for metric in self.metrics:
|
||||||
|
|
||||||
|
resource_id = ''
|
||||||
|
meter_name = self.instance_metrics[metric]
|
||||||
|
if re.match('^compute.node', meter_name) is not None:
|
||||||
|
resource_id = "%s_%s" % (node.uuid, node.hostname)
|
||||||
|
else:
|
||||||
|
resource_id = node_id
|
||||||
|
|
||||||
avg_meter = self.ceilometer.statistic_aggregation(
|
avg_meter = self.ceilometer.statistic_aggregation(
|
||||||
resource_id=node_id,
|
resource_id=resource_id,
|
||||||
meter_name=self.instance_metrics[metric],
|
meter_name=self.instance_metrics[metric],
|
||||||
period="60",
|
period="60",
|
||||||
aggregate='avg'
|
aggregate='avg'
|
||||||
)
|
)
|
||||||
if avg_meter is None:
|
if avg_meter is None:
|
||||||
raise exception.NoSuchMetricForHost(
|
raise exception.NoSuchMetricForHost(
|
||||||
metric=self.instance_metrics[metric],
|
metric=meter_name,
|
||||||
host=node_id)
|
host=node_id)
|
||||||
if self.instance_metrics[metric] == 'hardware.memory.used':
|
if meter_name == 'hardware.memory.used':
|
||||||
avg_meter /= oslo_utils.units.Ki
|
avg_meter /= oslo_utils.units.Ki
|
||||||
if self.instance_metrics[metric] == 'hardware.cpu.util':
|
if meter_name == 'compute.node.cpu.percent':
|
||||||
avg_meter /= 100
|
avg_meter /= 100
|
||||||
hosts_load[node_id][metric] = avg_meter
|
hosts_load[node_id][metric] = avg_meter
|
||||||
return hosts_load
|
return hosts_load
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ class TestWorkloadStabilization(base.TestCase):
|
|||||||
|
|
||||||
self.hosts_load_assert = {
|
self.hosts_load_assert = {
|
||||||
'Node_0': {'cpu_util': 0.07, 'memory.resident': 7.0, 'vcpus': 40},
|
'Node_0': {'cpu_util': 0.07, 'memory.resident': 7.0, 'vcpus': 40},
|
||||||
'Node_1': {'cpu_util': 0.05, 'memory.resident': 5, 'vcpus': 40},
|
'Node_1': {'cpu_util': 0.07, 'memory.resident': 5, 'vcpus': 40},
|
||||||
'Node_2': {'cpu_util': 0.1, 'memory.resident': 29, 'vcpus': 40},
|
'Node_2': {'cpu_util': 0.8, 'memory.resident': 29, 'vcpus': 40},
|
||||||
'Node_3': {'cpu_util': 0.04, 'memory.resident': 8, 'vcpus': 40},
|
'Node_3': {'cpu_util': 0.05, 'memory.resident': 8, 'vcpus': 40},
|
||||||
'Node_4': {'cpu_util': 0.02, 'memory.resident': 4, 'vcpus': 40}}
|
'Node_4': {'cpu_util': 0.05, 'memory.resident': 4, 'vcpus': 40}}
|
||||||
|
|
||||||
p_model = mock.patch.object(
|
p_model = mock.patch.object(
|
||||||
strategies.WorkloadStabilization, "compute_model",
|
strategies.WorkloadStabilization, "compute_model",
|
||||||
@@ -76,7 +76,7 @@ class TestWorkloadStabilization(base.TestCase):
|
|||||||
'weights': {"cpu_util_weight": 1.0,
|
'weights': {"cpu_util_weight": 1.0,
|
||||||
"memory.resident_weight": 1.0},
|
"memory.resident_weight": 1.0},
|
||||||
'instance_metrics':
|
'instance_metrics':
|
||||||
{"cpu_util": "hardware.cpu.util",
|
{"cpu_util": "compute.node.cpu.percent",
|
||||||
"memory.resident": "hardware.memory.used"},
|
"memory.resident": "hardware.memory.used"},
|
||||||
'host_choice': 'retry',
|
'host_choice': 'retry',
|
||||||
'retry_count': 1})
|
'retry_count': 1})
|
||||||
@@ -84,9 +84,9 @@ class TestWorkloadStabilization(base.TestCase):
|
|||||||
self.strategy.thresholds = {"cpu_util": 0.2, "memory.resident": 0.2}
|
self.strategy.thresholds = {"cpu_util": 0.2, "memory.resident": 0.2}
|
||||||
self.strategy.weights = {"cpu_util_weight": 1.0,
|
self.strategy.weights = {"cpu_util_weight": 1.0,
|
||||||
"memory.resident_weight": 1.0}
|
"memory.resident_weight": 1.0}
|
||||||
self.strategy.instance_metrics = {"cpu_util": "hardware.cpu.util",
|
self.strategy.instance_metrics = {
|
||||||
"memory.resident":
|
"cpu_util": "compute.node.cpu.percent",
|
||||||
"hardware.memory.used"}
|
"memory.resident": "hardware.memory.used"}
|
||||||
self.strategy.host_choice = 'retry'
|
self.strategy.host_choice = 'retry'
|
||||||
self.strategy.retry_count = 1
|
self.strategy.retry_count = 1
|
||||||
|
|
||||||
@@ -123,7 +123,7 @@ class TestWorkloadStabilization(base.TestCase):
|
|||||||
self.hosts_load_assert)
|
self.hosts_load_assert)
|
||||||
|
|
||||||
def test_get_sd(self):
|
def test_get_sd(self):
|
||||||
test_cpu_sd = 0.027
|
test_cpu_sd = 0.296
|
||||||
test_ram_sd = 9.3
|
test_ram_sd = 9.3
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
round(self.strategy.get_sd(
|
round(self.strategy.get_sd(
|
||||||
@@ -144,7 +144,7 @@ class TestWorkloadStabilization(base.TestCase):
|
|||||||
self.hosts_load_assert, "INSTANCE_5", "Node_2", "Node_1")[-1][
|
self.hosts_load_assert, "INSTANCE_5", "Node_2", "Node_1")[-1][
|
||||||
"Node_1"]
|
"Node_1"]
|
||||||
result['cpu_util'] = round(result['cpu_util'], 3)
|
result['cpu_util'] = round(result['cpu_util'], 3)
|
||||||
self.assertEqual(result, {'cpu_util': 0.075, 'memory.resident': 21,
|
self.assertEqual(result, {'cpu_util': 0.095, 'memory.resident': 21.0,
|
||||||
'vcpus': 40})
|
'vcpus': 40})
|
||||||
|
|
||||||
def test_simulate_migrations(self):
|
def test_simulate_migrations(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user