Added allocation-ratio config opts
Nova supports setting allocation ratios at the nova-compute level from Liberty onwards. Prior to this allocation ratios were set at the nova-scheduler level. Newton introduced the Placement API, and Ocata introduced the ability to have compute resources (Core/RAM/Disk) precomputed before passing candidates to the FilterScheduler [0]. Pike removed CoreFilter, RAMFilter and DiskFilter scheduler filters. From Pike onwards valid methods for settings these allocation ratios are via: - A call to the Placement API [1]. - Config values to supplied to nova-compute (xxx_allocation_ratio). Stein introduced initial_xxx_allocation_ratio in response to the runtime behaviour of the ResourceTracker [2]. Currently, the precedence of resource ratio values are: xxx_allocation_ratio > Placement API call > initial_xxx_allocation_ratio That is a (compute) resource provider's allocation ratios will default to initial_xxx_allocation_ratio which may be overridden at run time by a call to the Placement API. If xxx_allocation_ratio is set it will override all configurations for that provider. When not otherwise configured, we set initial_xxx_allocation_ratio to the values provided by ncc to maintain backwards compatibility. Where initial_xxx_allocation_ratio is not available we set xxx_allocation_ratio. [0] https://specs.openstack.org/openstack/nova-specs/specs/ocata/implemented/resource-providers-scheduler-db-filters.html [1] https://docs.openstack.org/api-ref/placement/#update-resource-provider-inventories [2] https://specs.openstack.org/openstack/nova-specs/specs/stein/implemented/initial-allocation-ratios.html Change-Id: Ifa314e9e23e0ae5d16113cd91a7507e61f9de704 Closes-Bug: #1677223
This commit is contained in:
parent
6d1450d565
commit
43acdd4f80
69
config.yaml
69
config.yaml
@ -763,3 +763,72 @@ options:
|
||||
description: |
|
||||
Value of bluestore compression max blob size for solid state media on
|
||||
pools requested by this charm.
|
||||
initial-cpu-allocation-ratio:
|
||||
type: float
|
||||
default:
|
||||
description: |
|
||||
The initial value of per physical core -> virtual core ratio to use in
|
||||
the Nova scheduler; this may be overriden at runtime by the placement API.
|
||||
.
|
||||
Increasing this value will increase instance density on compute nodes
|
||||
at the expense of instance performance.
|
||||
.
|
||||
This option doesn't have any effect on clouds running
|
||||
a release < Stein.
|
||||
initial-ram-allocation-ratio:
|
||||
type: float
|
||||
default:
|
||||
description: |
|
||||
The initial value of physical ram -> virtual ram ratio to use in
|
||||
the Nova scheduler; this may be overriden at runtime by the placement API.
|
||||
.
|
||||
Increasing this value will increase instance density on compute nodes
|
||||
at the potential expense of instance performance.
|
||||
.
|
||||
NOTE: When in a hyper-converged architecture, make sure to make enough
|
||||
room for infrastructure services running on your compute hosts by
|
||||
adjusting this value.
|
||||
.
|
||||
This option doesn't have any effect on clouds running
|
||||
a release < Stein.
|
||||
initial-disk-allocation-ratio:
|
||||
type: float
|
||||
default:
|
||||
description: |
|
||||
The initial value of this disk allocation ratio. Increase the amount of
|
||||
disk space that nova can overcommit to guests.
|
||||
This may be overriden at runtime by the placement API.
|
||||
.
|
||||
Increasing this value will increase instance density on compute nodes
|
||||
with an increased risk of hypervisor storage becoming full.
|
||||
.
|
||||
This option doesn't have any effect on clouds running
|
||||
a release < Stein.
|
||||
cpu-allocation-ratio:
|
||||
type: float
|
||||
default:
|
||||
description: |
|
||||
The per physical core -> virtual core ratio to use in the Nova scheduler.
|
||||
.
|
||||
Increasing this value will increase instance density on compute nodes
|
||||
at the expense of instance performance.
|
||||
ram-allocation-ratio:
|
||||
type: float
|
||||
default:
|
||||
description: |
|
||||
The physical ram -> virtual ram ratio to use in the Nova scheduler.
|
||||
.
|
||||
Increasing this value will increase instance density on compute nodes
|
||||
at the potential expense of instance performance.
|
||||
.
|
||||
NOTE: When in a hyper-converged architecture, make sure to make enough
|
||||
room for infrastructure services running on your compute hosts by
|
||||
adjusting this value.
|
||||
disk-allocation-ratio:
|
||||
type: float
|
||||
default:
|
||||
description: |
|
||||
Increase the amount of disk space that nova can overcommit to guests.
|
||||
.
|
||||
Increasing this value will increase instance density on compute nodes
|
||||
with an increased risk of hypervisor storage becoming full.
|
||||
|
@ -905,3 +905,43 @@ class NeutronPluginSubordinateConfigContext(context.SubordinateConfigContext):
|
||||
:rtype: bool
|
||||
"""
|
||||
return 'sections' in ctxt.keys()
|
||||
|
||||
|
||||
class NovaComputePlacementContext(context.OSContextGenerator):
|
||||
|
||||
def __call__(self):
|
||||
ctxt = {}
|
||||
cmp_os_release = CompareOpenStackReleases(os_release('nova-common'))
|
||||
|
||||
ctxt['initial_cpu_allocation_ratio'] =\
|
||||
config('initial-cpu-allocation-ratio')
|
||||
ctxt['initial_ram_allocation_ratio'] =\
|
||||
config('initial-ram-allocation-ratio')
|
||||
ctxt['initial_disk_allocation_ratio'] =\
|
||||
config('initial-disk-allocation-ratio')
|
||||
|
||||
ctxt['cpu_allocation_ratio'] = config('cpu-allocation-ratio')
|
||||
ctxt['ram_allocation_ratio'] = config('ram-allocation-ratio')
|
||||
ctxt['disk_allocation_ratio'] = config('disk-allocation-ratio')
|
||||
|
||||
if cmp_os_release >= 'stein':
|
||||
for ratio_config in ['initial_cpu_allocation_ratio',
|
||||
'initial_ram_allocation_ratio',
|
||||
'initial_disk_allocation_ratio']:
|
||||
if ctxt[ratio_config] is None:
|
||||
for rid in relation_ids('cloud-compute'):
|
||||
for unit in related_units(rid):
|
||||
rel = {'rid': rid, 'unit': unit}
|
||||
ctxt[ratio_config] = relation_get(ratio_config,
|
||||
**rel)
|
||||
else:
|
||||
for ratio_config in ['cpu_allocation_ratio',
|
||||
'ram_allocation_ratio',
|
||||
'disk_allocation_ratio']:
|
||||
if ctxt[ratio_config] is None:
|
||||
for rid in relation_ids('cloud-compute'):
|
||||
for unit in related_units(rid):
|
||||
rel = {'rid': rid, 'unit': unit}
|
||||
ctxt[ratio_config] = relation_get(ratio_config,
|
||||
**rel)
|
||||
return ctxt
|
||||
|
@ -110,6 +110,7 @@ from nova_compute_context import (
|
||||
SerialConsoleContext,
|
||||
NovaComputeAvailabilityZoneContext,
|
||||
NeutronPluginSubordinateConfigContext,
|
||||
NovaComputePlacementContext,
|
||||
)
|
||||
|
||||
import charmhelpers.contrib.openstack.vaultlocker as vaultlocker
|
||||
@ -233,6 +234,7 @@ BASE_RESOURCE_MAP = {
|
||||
context.VolumeAPIContext('nova-common'),
|
||||
SerialConsoleContext(),
|
||||
NovaComputeAvailabilityZoneContext(),
|
||||
NovaComputePlacementContext(),
|
||||
context.WorkerConfigContext(),
|
||||
vaultlocker.VaultKVContext(
|
||||
vaultlocker.VAULTLOCKER_BACKEND),
|
||||
|
@ -134,6 +134,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
{% if network_manager == 'neutron' and network_manager_config -%}
|
||||
[neutron]
|
||||
url = {{ network_manager_config.neutron_url }}
|
||||
|
@ -122,6 +122,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -127,6 +127,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -130,6 +130,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -116,6 +116,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -122,6 +122,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -122,6 +122,16 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -126,6 +126,25 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if initial_cpu_allocation_ratio -%}
|
||||
initial_cpu_allocation_ratio = {{ initial_cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if initial_ram_allocation_ratio -%}
|
||||
initial_ram_allocation_ratio = {{ initial_ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if initial_disk_allocation_ratio -%}
|
||||
initial_disk_allocation_ratio = {{ initial_disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[vnc]
|
||||
{% if console_vnc_type -%}
|
||||
enabled = True
|
||||
|
@ -154,6 +154,25 @@ resume_guests_state_on_host_boot = {{ resume_guests_state_on_host_boot }}
|
||||
|
||||
metadata_workers = {{ workers }}
|
||||
|
||||
{% if initial_cpu_allocation_ratio -%}
|
||||
initial_cpu_allocation_ratio = {{ initial_cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if initial_ram_allocation_ratio -%}
|
||||
initial_ram_allocation_ratio = {{ initial_ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if initial_disk_allocation_ratio -%}
|
||||
initial_disk_allocation_ratio = {{ initial_disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if cpu_allocation_ratio -%}
|
||||
cpu_allocation_ratio = {{ cpu_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if ram_allocation_ratio -%}
|
||||
ram_allocation_ratio = {{ ram_allocation_ratio }}
|
||||
{% endif -%}
|
||||
{% if disk_allocation_ratio -%}
|
||||
disk_allocation_ratio = {{ disk_allocation_ratio }}
|
||||
{% endif -%}
|
||||
|
||||
[pci]
|
||||
{% if pci_passthrough_whitelist -%}
|
||||
passthrough_whitelist = {{ pci_passthrough_whitelist }}
|
||||
|
@ -1079,3 +1079,27 @@ class NeutronPluginSubordinateConfigContextTest(CharmTestCase):
|
||||
config_file='/etc/nova.conf')
|
||||
self.assertFalse(ctxt.context_complete({}))
|
||||
self.assertTrue(ctxt.context_complete({'sections': {}}))
|
||||
|
||||
|
||||
class NovaComputePlacementContextTest(CharmTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(NovaComputePlacementContextTest, self).setUp(context, TO_PATCH)
|
||||
self.config.side_effect = self.test_config.get
|
||||
self.os_release.return_value = 'train'
|
||||
self.maxDiff = None
|
||||
|
||||
def test_allocation_ratio(self):
|
||||
self.test_config.set('cpu-allocation-ratio', 64)
|
||||
self.test_config.set('ram-allocation-ratio', 32.3)
|
||||
self.test_config.set('disk-allocation-ratio', 16)
|
||||
|
||||
ctxt = context.NovaComputePlacementContext()
|
||||
|
||||
self.assertEqual(
|
||||
{'cpu_allocation_ratio': 64,
|
||||
'ram_allocation_ratio': 32.3,
|
||||
'disk_allocation_ratio': 16,
|
||||
'initial_cpu_allocation_ratio': None,
|
||||
'initial_ram_allocation_ratio': None,
|
||||
'initial_disk_allocation_ratio': None}, ctxt())
|
||||
|
Loading…
Reference in New Issue
Block a user