40b99c9d2f
In before, the scheduler makes decisions based on CONF.enable_cpu_pinning in controller node. Toggle this config in controller node will either turn on/off cpu pinning for *all* compute nodes. This commit fixes it by reading enable_cpu_pinning from the database table. As a result, individual compute node can turn on/off cpu pinning. Change-Id: I466562138205d11054d3bc428247116160f337c8
89 lines
3.3 KiB
Python
89 lines
3.3 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from oslo_log.log import logging
|
|
|
|
from zun.common import utils
|
|
from zun.pci import stats as pci_stats
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class HostState(object):
|
|
"""Mutable and immutable information tracked for a host.
|
|
|
|
This is an attempt to remove the ad-hoc data structures.
|
|
"""
|
|
|
|
def __init__(self, host):
|
|
self.hostname = host
|
|
|
|
# Mutable available resources.
|
|
# These will change as resources are virtually "consumed".
|
|
self.mem_available = 0
|
|
self.mem_total = 0
|
|
self.mem_free = 0
|
|
self.mem_used = 0
|
|
self.cpus = 0
|
|
self.cpu_used = 0
|
|
self.disk_total = 0
|
|
self.disk_used = 0
|
|
self.numa_topology = None
|
|
self.labels = None
|
|
self.pci_stats = None
|
|
self.disk_quota_supported = False
|
|
self.runtimes = []
|
|
self.enable_cpu_pinning = False
|
|
|
|
# Resource oversubscription values for the compute host:
|
|
self.limits = {}
|
|
|
|
def update(self, compute_node=None, service=None):
|
|
"""Update information about a host"""
|
|
@utils.synchronized((self.hostname, compute_node))
|
|
def _locked_update(self, compute_node, service):
|
|
if compute_node is not None:
|
|
LOG.debug('Update host state from compute node: %s',
|
|
compute_node)
|
|
self._update_from_compute_node(compute_node)
|
|
if service is not None:
|
|
LOG.debug('Update host state with service: %s', service)
|
|
self.service = service
|
|
|
|
return _locked_update(self, compute_node, service)
|
|
|
|
def _update_from_compute_node(self, compute_node):
|
|
"""Update information about a host from a Compute object"""
|
|
self.mem_available = compute_node.mem_available
|
|
self.mem_total = compute_node.mem_total
|
|
self.mem_free = compute_node.mem_free
|
|
self.mem_used = compute_node.mem_used
|
|
self.cpus = compute_node.cpus
|
|
self.cpu_used = compute_node.cpu_used
|
|
self.disk_total = compute_node.disk_total
|
|
self.disk_used = compute_node.disk_used
|
|
self.numa_topology = compute_node.numa_topology
|
|
self.labels = compute_node.labels
|
|
self.pci_stats = pci_stats.PciDeviceStats(
|
|
stats=compute_node.pci_device_pools)
|
|
self.disk_quota_supported = compute_node.disk_quota_supported
|
|
self.runtimes = compute_node.runtimes
|
|
self.enable_cpu_pinning = compute_node.enable_cpu_pinning
|
|
|
|
def __repr__(self):
|
|
return ("%(host)s ram: %(free_ram)sMB "
|
|
"disk: %(free_disk)sGB cpus: %(free_cpu)s" %
|
|
{'host': self.hostname,
|
|
'free_ram': self.mem_free,
|
|
'free_disk': self.disk_total - self.disk_used,
|
|
'free_cpu': self.cpus - self.cpu_used})
|