From: Bogdan Dobrelya Date: Fri, 30 Sep 2016 12:03:34 +0200 Subject: [PATCH] Rework processorcount limits to os_workers * reduce workers_max default limits of a 16 to the $::os_workers, which is limited by [2, 8] interval. * reduce workers/pool size/overflow limited by F($::processorcount) to F($::os_workers) Closes-bug: 1629238 Change-Id: I5cc4d70b902eeaa1c9cf42911606eba13dd84aa2 Signed-off-by: Bogdan Dobrelya --- deployment/puppet/openstack/manifests/cinder.pp | 2 +- .../manifests/ceilometer/controller.pp | 2 +- .../openstack_tasks/manifests/glance/glance.pp | 2 +- .../openstack_tasks/manifests/horizon/horizon.pp | 2 +- .../manifests/ironic/ironic_compute.pp | 4 ++-- .../openstack_tasks/manifests/keystone/keystone.pp | 2 +- .../manifests/openstack_cinder/openstack_cinder.pp | 6 +++--- .../openstack_controller/openstack_controller.pp | 6 +++--- .../manifests/openstack_network/agents/metadata.pp | 2 +- .../manifests/openstack_network/server_config.pp | 2 +- .../puppet/openstack_tasks/manifests/roles/cinder.pp | 4 ++-- .../openstack_tasks/manifests/sahara/sahara.pp | 4 ++-- .../openstack_tasks/manifests/swift/parts/proxy.pp | 2 +- .../openstack_tasks/manifests/swift/proxy_storage.pp | 2 +- .../puppet/osnailyfacter/lib/facter/os_workers.rb | 20 ++++++++++++++++++++ .../puppet/osnailyfacter/manifests/apache_mpm.pp | 2 +- .../osnailyfacter/manifests/globals/globals.pp | 6 +++--- 17 files changed, 45 insertions(+), 25 deletions(-) create mode 100644 deployment/puppet/osnailyfacter/lib/facter/os_workers.rb diff --git a/deployment/puppet/openstack/manifests/cinder.pp b/deployment/puppet/openstack/manifests/cinder.pp index 36747a6..502bc94 100644 --- a/deployment/puppet/openstack/manifests/cinder.pp +++ b/deployment/puppet/openstack/manifests/cinder.pp @@ -44,6 +44,6 @@ class openstack::cinder( $keystone_user = 'cinder', $region = 'RegionOne', $notification_driver = undef, - $service_workers = $::processorcount, + $service_workers = $::os_workers, $rbd_pool = 'volumes', $rbd_user = 'volumes', diff --git a/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp b/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp index 72fbe32..e6fcf4f 100644 --- a/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp +++ b/deployment/puppet/openstack_tasks/manifests/ceilometer/controller.pp @@ -35,7 +35,7 @@ class openstack_tasks::ceilometer::controller { $service_endpoint = hiera('service_endpoint', $management_vip) $ha_mode = pick($ceilometer_hash['ha_mode'], true) $ssl_hash = hiera_hash('use_ssl', {}) - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($ceilometer_hash['workers'], min(max($::processorcount, 2), $workers_max)) diff --git a/deployment/puppet/openstack_tasks/manifests/glance/glance.pp b/deployment/puppet/openstack_tasks/manifests/glance/glance.pp index bbba7dd..9e9f57c 100644 --- a/deployment/puppet/openstack_tasks/manifests/glance/glance.pp +++ b/deployment/puppet/openstack_tasks/manifests/glance/glance.pp @@ -21,7 +21,7 @@ class openstack_tasks::glance::glance { $max_overflow = hiera('max_overflow') $ceilometer_hash = hiera_hash('ceilometer', {}) $region = hiera('region','RegionOne') - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($glance_hash['glance_workers'], min(max($::processorcount, 2), $workers_max)) $ironic_hash = hiera_hash('ironic', {}) diff --git a/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp b/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp index 1a70af7..824c700 100644 --- a/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp +++ b/deployment/puppet/openstack_tasks/manifests/horizon/horizon.pp @@ -134,7 +134,7 @@ class openstack_tasks::horizon::horizon { $wsgi_processes = 2 $wsgi_threads = 9 } else { - $wsgi_processes = $::processorcount + $wsgi_processes = $::os_workers $wsgi_threads = 15 } diff --git a/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp b/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp index 2d26e1f..6e7d8ca 100644 --- a/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp +++ b/deployment/puppet/openstack_tasks/manifests/ironic/ironic_compute.pp @@ -35,8 +35,8 @@ class openstack_tasks::ironic::ironic_compute { $db_name = pick($nova_hash['db_name'], 'nova') $db_password = pick($nova_hash['db_password'], 'nova') - $max_pool_size = hiera('max_pool_size', min($::processorcount * 5 + 0, 30 + 0)) - $max_overflow = hiera('max_overflow', min($::processorcount * 5 + 0, 60 + 0)) + $max_pool_size = hiera('max_pool_size', min($::os_workers * 5 + 0, 30 + 0)) + $max_overflow = hiera('max_overflow', min($::os_workers * 5 + 0, 60 + 0)) $idle_timeout = hiera('idle_timeout', '3600') $max_retries = hiera('max_retries', '-1') diff --git a/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp b/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp index 8535821..bef595d 100644 --- a/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp +++ b/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp @@ -22,7 +22,7 @@ class openstack_tasks::keystone::keystone { $syslog_log_facility = hiera('syslog_log_facility_keystone') $rabbit_hash = hiera_hash('rabbit', {}) $neutron_user_password = hiera('neutron_user_password', false) - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($keystone_hash['workers'], min(max($::processorcount, 2), $workers_max)) $default_log_levels = hiera_hash('default_log_levels') diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp b/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp index ec60184..ce03683 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_cinder/openstack_cinder.pp @@ -13,7 +13,7 @@ class openstack_tasks::openstack_cinder::openstack_cinder { $sahara_hash = hiera_hash('sahara', {}) $rabbit_hash = hiera_hash('rabbit', {}) $service_endpoint = hiera('service_endpoint') - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($cinder_hash['workers'], min(max($::processorcount, 2), $workers_max)) $cinder_user_password = $cinder_hash[user_password] $keystone_user = pick($cinder_hash['user'], 'cinder') @@ -86,8 +86,8 @@ class openstack_tasks::openstack_cinder::openstack_cinder { } # SQLAlchemy backend configuration - $max_pool_size = min($::processorcount * 5 + 0, 30 + 0) - $max_overflow = min($::processorcount * 5 + 0, 60 + 0) + $max_pool_size = min($::os_workers * 5 + 0, 30 + 0) + $max_overflow = min($::os_workers * 5 + 0, 60 + 0) $max_retries = '-1' $idle_timeout = '3600' diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp b/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp index 5222a37..38aaa40 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp @@ -48,7 +48,7 @@ class openstack_tasks::openstack_controller::openstack_controller { $keystone_user = pick($nova_hash['user'], 'nova') $keystone_tenant = pick($nova_hash['tenant'], 'services') $region_name = hiera('region', 'RegionOne') - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($nova_hash['workers'], min(max($::processorcount, 2), $workers_max)) $compute_nodes = get_nodes_hash_by_roles($network_metadata, ['compute']) @@ -119,8 +119,8 @@ class openstack_tasks::openstack_controller::openstack_controller { $transport_url = hiera('transport_url','rabbit://guest:password@127.0.0.1:5672/') # SQLAlchemy backend configuration - $max_pool_size = hiera('max_pool_size', min($::processorcount * 5 + 0, 30 + 0)) - $max_overflow = hiera('max_overflow', min($::processorcount * 5 + 0, 60 + 0)) + $max_pool_size = hiera('max_pool_size', min($::os_workers * 5 + 0, 30 + 0)) + $max_overflow = hiera('max_overflow', min($::os_workers * 5 + 0, 60 + 0)) $idle_timeout = hiera('idle_timeout', '3600') $max_retries = hiera('max_retries', '-1') diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp index fe74bc6..881deda 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp @@ -9,7 +9,7 @@ class openstack_tasks::openstack_network::agents::metadata { $neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { }) $neutron_config = hiera_hash('neutron_config') $dvr = pick($neutron_advanced_config['neutron_dvr'], false) - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) if $compute { $metadata_workers = pick($neutron_config['workers'], diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp index 133c49e..4dbbf05 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp @@ -64,7 +64,7 @@ class openstack_tasks::openstack_network::server_config { $auth_url = "${internal_auth_protocol}://${internal_auth_endpoint}:35357/" $nova_admin_auth_url = "${admin_auth_protocol}://${admin_auth_endpoint}:35357/" - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($neutron_config['workers'], min(max($::processorcount, 1), $workers_max)) $neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { }) diff --git a/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp b/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp index da3c148..09c3896 100644 --- a/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp +++ b/deployment/puppet/openstack_tasks/manifests/roles/cinder.pp @@ -81,8 +81,8 @@ class openstack_tasks::roles::cinder { } # SQLAlchemy backend configuration - $max_pool_size = min($::processorcount * 5 + 0, 30 + 0) - $max_overflow = min($::processorcount * 5 + 0, 60 + 0) + $max_pool_size = min($::os_workers * 5 + 0, 30 + 0) + $max_overflow = min($::os_workers * 5 + 0, 60 + 0) $max_retries = '-1' $idle_timeout = '3600' diff --git a/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp b/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp index 9d011ce..0366659 100644 --- a/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp +++ b/deployment/puppet/openstack_tasks/manifests/sahara/sahara.pp @@ -51,8 +51,8 @@ class openstack_tasks::sahara::sahara { $sahara_user = pick($sahara_hash['user'], 'sahara') $sahara_password = pick($sahara_hash['user_password']) $tenant = pick($sahara_hash['tenant'], 'services') - $max_pool_size = min($::processorcount * 5 + 0, 30 + 0) - $max_overflow = min($::processorcount * 5 + 0, 60 + 0) + $max_pool_size = min($::os_workers * 5 + 0, 30 + 0) + $max_overflow = min($::os_workers * 5 + 0, 60 + 0) $max_retries = '-1' $idle_timeout = '3600' diff --git a/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp b/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp index 81d64a2..8a68acd 100644 --- a/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp +++ b/deployment/puppet/openstack_tasks/manifests/swift/parts/proxy.pp @@ -26,7 +26,7 @@ class openstack_tasks::swift::parts::proxy ( 'account_quotas', 'slo', 'proxy-server'], - $proxy_workers = $::processorcount, + $proxy_workers = $::os_workers, $proxy_port = '8080', $proxy_allow_account_management = true, $proxy_account_autocreate = true, diff --git a/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp b/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp index a221baf..77f4ba1 100644 --- a/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp +++ b/deployment/puppet/openstack_tasks/manifests/swift/proxy_storage.pp @@ -30,7 +30,7 @@ class openstack_tasks::swift::proxy_storage { $keystone_user = pick($swift_hash['user'], 'swift') $keystone_password = pick($swift_hash['user_password'], 'passsword') $keystone_tenant = pick($swift_hash['tenant'], 'services') - $workers_max = hiera('workers_max', 16) + $workers_max = hiera('workers_max', $::os_workers) $service_workers = pick($swift_hash['workers'], min(max($::processorcount, 2), $workers_max)) $ssl_hash = hiera_hash('use_ssl', {}) $rabbit_hash = hiera_hash('rabbit') diff --git a/deployment/puppet/osnailyfacter/lib/facter/os_workers.rb b/deployment/puppet/osnailyfacter/lib/facter/os_workers.rb new file mode 100644 index 0000000..404fb90 --- /dev/null +++ b/deployment/puppet/osnailyfacter/lib/facter/os_workers.rb @@ -0,0 +1,20 @@ +# +# We've found that using $::processorcount for workers/threads can lead to +# unexpected memory or process counts for people deploying on baremetal or +# if they have large number of cpus. This fact allows us to tweak the formula +# used to determine number of workers in a single place but use it across all +# modules. +# +# The value for os_workers is max between '(<# processors> / 2)' and '2' with +# a cap of 12. +# +# This fact can be overloaded by an external fact from /etc/factor/facts.d if +# a user would like to provide their own default value. +# +Facter.add(:os_workers) do + has_weight 100 + setcode do + processors = Facter.value('processorcount') + [ [ (processors.to_i / 2), 2 ].max, 12 ].min + end +end diff --git a/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp b/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp index 51bc327..70a654a 100644 --- a/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp +++ b/deployment/puppet/osnailyfacter/manifests/apache_mpm.pp @@ -11,7 +11,7 @@ class osnailyfacter::apache_mpm inherits ::osnailyfacter::apache { if ($::processorcount + 0) <= 2 { $startservers = 2 } else { - $startservers = $::processorcount + $startservers = $::os_workers } $maxrequestsperchild = 0 diff --git a/deployment/puppet/osnailyfacter/manifests/globals/globals.pp b/deployment/puppet/osnailyfacter/manifests/globals/globals.pp index f9e8ccb..6eee21e 100644 --- a/deployment/puppet/osnailyfacter/manifests/globals/globals.pp +++ b/deployment/puppet/osnailyfacter/manifests/globals/globals.pp @@ -320,14 +320,14 @@ class osnailyfacter::globals::globals { # The default value assumes there are 20 different types of workers limited by 100Mb each. $workers_ratio = hiera('workers_ratio', 2000) # Defines the maximum allowed number of workers for each service by RAM limits. Cannot exceed the value of 30. - $workers_max = inline_template("<%= [(@memorysize_mb.to_i / @workers_ratio.to_i).floor + 1, 30].min %>") + $workers_max = inline_template("<%= [(@memorysize_mb.to_i / @workers_ratio.to_i).floor + 1, $::os_workers].min %>") $node_name_prefix_for_messaging = hiera('node_name_prefix_for_messaging', 'messaging-') # MySQL and SQLAlchemy backend configuration $custom_mysql_setup_class = hiera('custom_mysql_setup_class', 'galera') - $max_pool_size = hiera('max_pool_size', min($::processorcount * 5 + 0, 30 + 0)) - $max_overflow = hiera('max_overflow', min($::processorcount * 5 + 0, 60 + 0)) + $max_pool_size = hiera('max_pool_size', min($::os_workers * 5 + 0, 30 + 0)) + $max_overflow = hiera('max_overflow', min($::os_workers * 5 + 0, 60 + 0)) $max_retries = hiera('max_retries', '-1') $idle_timeout = hiera('idle_timeout','3600') $nova_db_password = $nova_hash['db_password']