Handle libvirt/cpu_model_extra_flags option
This allows for specifying granular CPU feature flags when specifying CPU models. It should be set only if 'cpu_mode' and 'cpu_model' attributes are set and cpu_mode attribute value is set to "custom". NOTE: The related nova changes are done in change: I6bb956808aa3df58747c865c92e5b276e61aff44 Change-Id: Id4f2cad2e0b0c34a7a68d0b3a6f69b44816f4cd9
This commit is contained in:
parent
e9aa809dd3
commit
c12e358028
@ -33,6 +33,12 @@
|
|||||||
# cpu_mode="custom" and virt_type="kvm|qemu".
|
# cpu_mode="custom" and virt_type="kvm|qemu".
|
||||||
# Defaults to undef
|
# Defaults to undef
|
||||||
#
|
#
|
||||||
|
# [*libvirt_cpu_model_extra_flags*]
|
||||||
|
# (optional) This allows specifying granular CPU feature flags when
|
||||||
|
# specifying CPU models. Only valid, if cpu_mode and cpu_model
|
||||||
|
# attributes are specified and only if cpu_mode="custom".
|
||||||
|
# Defaults to undef
|
||||||
|
#
|
||||||
# [*libvirt_snapshot_image_format*]
|
# [*libvirt_snapshot_image_format*]
|
||||||
# (optional) Format to save snapshots to. Some filesystems
|
# (optional) Format to save snapshots to. Some filesystems
|
||||||
# have a preference and only operate on raw or qcow2
|
# have a preference and only operate on raw or qcow2
|
||||||
@ -138,6 +144,7 @@ class nova::compute::libvirt (
|
|||||||
$migration_support = false,
|
$migration_support = false,
|
||||||
$libvirt_cpu_mode = false,
|
$libvirt_cpu_mode = false,
|
||||||
$libvirt_cpu_model = undef,
|
$libvirt_cpu_model = undef,
|
||||||
|
$libvirt_cpu_model_extra_flags = undef,
|
||||||
$libvirt_snapshot_image_format = $::os_service_default,
|
$libvirt_snapshot_image_format = $::os_service_default,
|
||||||
$libvirt_disk_cachemodes = [],
|
$libvirt_disk_cachemodes = [],
|
||||||
$libvirt_hw_disk_discard = $::os_service_default,
|
$libvirt_hw_disk_discard = $::os_service_default,
|
||||||
@ -235,14 +242,20 @@ class nova::compute::libvirt (
|
|||||||
validate_string($libvirt_cpu_model)
|
validate_string($libvirt_cpu_model)
|
||||||
nova_config {
|
nova_config {
|
||||||
'libvirt/cpu_model': value => $libvirt_cpu_model;
|
'libvirt/cpu_model': value => $libvirt_cpu_model;
|
||||||
|
'libvirt/cpu_model_extra_flags': value => $libvirt_cpu_model_extra_flags;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nova_config {
|
nova_config {
|
||||||
'libvirt/cpu_model': ensure => absent;
|
'libvirt/cpu_model': ensure => absent;
|
||||||
|
'libvirt/cpu_model_extra_flags': ensure => absent;
|
||||||
}
|
}
|
||||||
if $libvirt_cpu_model {
|
if $libvirt_cpu_model {
|
||||||
warning('$libvirt_cpu_model requires that $libvirt_cpu_mode => "custom" and will be ignored')
|
warning('$libvirt_cpu_model requires that $libvirt_cpu_mode => "custom" and will be ignored')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if $libvirt_cpu_model_extra_flags {
|
||||||
|
warning('$libvirt_cpu_model_extra_flags requires that $libvirt_cpu_mode => "custom" and will be ignored')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if size($libvirt_disk_cachemodes) > 0 {
|
if size($libvirt_disk_cachemodes) > 0 {
|
||||||
|
12
releasenotes/notes/extra_cpu_flags-2de6915770ac9514.yaml
Normal file
12
releasenotes/notes/extra_cpu_flags-2de6915770ac9514.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
This allows for specifying granular CPU feature flags, when
|
||||||
|
specifying CPU models. It should be set only if ``cpu_mode``
|
||||||
|
and ``cpu_model`` conf parameter are set and ``cpu_mode``
|
||||||
|
parameter value is set to "custom".
|
||||||
|
The recent "Meltdown" CVE fixes have resulted in critical
|
||||||
|
performance penalty which impacts every Nova guest within
|
||||||
|
certain CPU models.
|
||||||
|
|
||||||
|
More info is available in `nova release notes <https://docs.openstack.org/releasenotes/nova/queens.html#bug-fixes>`_.
|
@ -50,6 +50,7 @@ describe 'nova::compute::libvirt' do
|
|||||||
it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('kvm')}
|
it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('kvm')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-model')}
|
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-model')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')}
|
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')}
|
||||||
|
it { is_expected.to contain_nova_config('libvirt/cpu_model_extra_flags').with_ensure('absent')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')}
|
it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_ensure('absent')}
|
it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_ensure('absent')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/inject_password').with_value(false)}
|
it { is_expected.to contain_nova_config('libvirt/inject_password').with_value(false)}
|
||||||
@ -68,6 +69,7 @@ describe 'nova::compute::libvirt' do
|
|||||||
:vncserver_listen => '0.0.0.0',
|
:vncserver_listen => '0.0.0.0',
|
||||||
:libvirt_cpu_mode => 'host-passthrough',
|
:libvirt_cpu_mode => 'host-passthrough',
|
||||||
:libvirt_cpu_model => 'kvm64',
|
:libvirt_cpu_model => 'kvm64',
|
||||||
|
:libvirt_cpu_model_extra_flags => 'pcid',
|
||||||
:libvirt_snapshot_image_format => 'raw',
|
:libvirt_snapshot_image_format => 'raw',
|
||||||
:libvirt_disk_cachemodes => ['file=directsync','block=none'],
|
:libvirt_disk_cachemodes => ['file=directsync','block=none'],
|
||||||
:libvirt_hw_disk_discard => 'unmap',
|
:libvirt_hw_disk_discard => 'unmap',
|
||||||
@ -94,6 +96,7 @@ describe 'nova::compute::libvirt' do
|
|||||||
it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('qemu')}
|
it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('qemu')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-passthrough')}
|
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-passthrough')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')}
|
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')}
|
||||||
|
it { is_expected.to contain_nova_config('libvirt/cpu_model_extra_flags').with_ensure('absent')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')}
|
it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_value('file=directsync,block=none')}
|
it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_value('file=directsync,block=none')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/hw_disk_discard').with_value('unmap')}
|
it { is_expected.to contain_nova_config('libvirt/hw_disk_discard').with_value('unmap')}
|
||||||
@ -128,11 +131,13 @@ describe 'nova::compute::libvirt' do
|
|||||||
describe 'with custom cpu_mode' do
|
describe 'with custom cpu_mode' do
|
||||||
let :params do
|
let :params do
|
||||||
{ :libvirt_cpu_mode => 'custom',
|
{ :libvirt_cpu_mode => 'custom',
|
||||||
:libvirt_cpu_model => 'kvm64' }
|
:libvirt_cpu_model => 'kvm64',
|
||||||
|
:libvirt_cpu_model_extra_flags => 'pcid' }
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('custom')}
|
it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('custom')}
|
||||||
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_value('kvm64')}
|
it { is_expected.to contain_nova_config('libvirt/cpu_model').with_value('kvm64')}
|
||||||
|
it { is_expected.to contain_nova_config('libvirt/cpu_model_extra_flags').with_value('pcid')}
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'with qcow2 as snapshot_image_format' do
|
describe 'with qcow2 as snapshot_image_format' do
|
||||||
|
Loading…
Reference in New Issue
Block a user