From 7877f8cf553c33dfeacd2f3067ffe39bbf987dfb Mon Sep 17 00:00:00 2001 From: Rajesh Tailor Date: Thu, 10 Jan 2019 13:27:03 +0530 Subject: [PATCH] Fail to live migration if instance has NUMA topology Live migration is currently totally broken if a NUMA topology is present. This affects everything that's been regrettably stuffed in with NUMA topology including CPU pinning, hugepage support and emulator thread support. Side effects can range from simple unexpected performance hits (due to instances running on the same cores) to complete failures (due to instance cores or huge pages being mapped to CPUs/NUMA nodes that don't exist on the destination host). Until such a time as we resolve these issues, we should alert users to the fact that such issues exist. A workaround option is provided for operators that _really_ need the broken behavior, but it's defaulted to False to highlight the brokenness of this feature to unsuspecting operators. The related nova change is I217fba9138132b107e9d62895d699d238392e761 The proposed change allows to configure the 'enable_numa_live_migration' workarounds option through TripleO. By default this feature will be disabled for NUMA topology instances. Depends-On: I16794fbfef0e6e83d3fcebb9e6bc2fcf478ebf72 Change-Id: I523756b418afe1827490c936966af8936ffdbaa6 (cherry picked from commit f7bc59d4b8d37b4523156773e9933eb90ab50b9b) (cherry picked from commit 44a3f5ac494a44a438f72e38e16aacdf661797d5) --- docker/services/nova-conductor.yaml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docker/services/nova-conductor.yaml b/docker/services/nova-conductor.yaml index 2cee727757..be4942662a 100644 --- a/docker/services/nova-conductor.yaml +++ b/docker/services/nova-conductor.yaml @@ -44,7 +44,12 @@ parameters: default: false description: Remove package if the service is being disabled during upgrade type: boolean - + NovaEnableNUMALiveMigration: + default: false + description: Whether to enable or not the live migration for NUMA topology instances. + type: boolean + tags: + - role_specific resources: @@ -70,6 +75,18 @@ resources: DockerNovaImage: {get_param: DockerNovaConductorImage} NovaServiceName: 'conductor' + RoleParametersValue: + type: OS::Heat::Value + properties: + type: json + value: + map_replace: + - map_replace: + - nova::workarounds::enable_numa_live_migration: NovaEnableNUMALiveMigration + - values: {get_param: [RoleParameters]} + - values: + NovaEnableNUMALiveMigration: {get_param: NovaEnableNUMALiveMigration} + outputs: role_data: description: Role data for the Nova Conductor service. @@ -79,6 +96,7 @@ outputs: map_merge: - {get_attr: [NovaConductorBase, role_data, config_settings]} - {get_attr: [NovaLogging, config_settings]} + - {get_attr: [RoleParametersValue, value]} logging_source: {get_attr: [NovaConductorBase, role_data, logging_source]} logging_groups: {get_attr: [NovaConductorBase, role_data, logging_groups]} service_config_settings: {get_attr: [NovaConductorBase, role_data, service_config_settings]}