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 exposes the 'enable_numa_live_migration' workarounds option for TripleO deployment. By default this feature will be disabled for NUMA topology instances. Change-Id: I16794fbfef0e6e83d3fcebb9e6bc2fcf478ebf72
This commit is contained in:
@@ -38,6 +38,7 @@ class nova::conductor(
|
|||||||
include ::nova::deps
|
include ::nova::deps
|
||||||
include ::nova::db
|
include ::nova::db
|
||||||
include ::nova::params
|
include ::nova::params
|
||||||
|
include ::nova::workarounds
|
||||||
|
|
||||||
nova::generic_service { 'conductor':
|
nova::generic_service { 'conductor':
|
||||||
enabled => $enabled,
|
enabled => $enabled,
|
||||||
|
20
manifests/workarounds.pp
Normal file
20
manifests/workarounds.pp
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# == Class: nova::workarounds
|
||||||
|
#
|
||||||
|
# nova workarounds configuration
|
||||||
|
#
|
||||||
|
# === Parameters:
|
||||||
|
#
|
||||||
|
# [*enable_numa_live_migration*]
|
||||||
|
# (optional) Whether to enable live migration for NUMA topology instances.
|
||||||
|
# Defaults to false
|
||||||
|
#
|
||||||
|
class nova::workarounds (
|
||||||
|
$enable_numa_live_migration = false,
|
||||||
|
) {
|
||||||
|
|
||||||
|
nova_config {
|
||||||
|
'workarounds/enable_numa_live_migration': value => $enable_numa_live_migration;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
Add support to enable/disable live-migration for NUMA topology instances
|
||||||
|
|
||||||
|
Add configuration parameter `workarounds/enable_numa_live_migration`
|
||||||
|
(defaults to false) which allows to enable/disable live-migration
|
||||||
|
for NUMA topology instances.
|
||||||
|
|
36
spec/classes/nova_workarounds_spec.rb
Normal file
36
spec/classes/nova_workarounds_spec.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'nova::workarounds' do
|
||||||
|
|
||||||
|
let :params do
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'nova::workarounds' do
|
||||||
|
|
||||||
|
context 'with default parameters' do
|
||||||
|
it { is_expected.to contain_nova_config('workarounds/enable_numa_live_migration').with_value(false) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with overridden parameters' do
|
||||||
|
let :params do
|
||||||
|
{ :enable_numa_live_migration => true,}
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to contain_nova_config('workarounds/enable_numa_live_migration').with_value('true') }
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
on_supported_os({
|
||||||
|
:supported_os => OSDefaults.get_supported_os
|
||||||
|
}).each do |os,facts|
|
||||||
|
context "on #{os}" do
|
||||||
|
let (:facts) do
|
||||||
|
facts.merge!(OSDefaults.get_facts())
|
||||||
|
end
|
||||||
|
|
||||||
|
it_configures 'nova::workarounds'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Reference in New Issue
Block a user