diff --git a/lib/facter/os_workers.rb b/lib/facter/os_workers.rb index 404fb901..f6c9c64c 100644 --- a/lib/facter/os_workers.rb +++ b/lib/facter/os_workers.rb @@ -11,10 +11,40 @@ # 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 +Facter.add(:os_workers_small) do has_weight 100 setcode do processors = Facter.value('processorcount') [ [ (processors.to_i / 4), 2 ].max, 8 ].min end end + +# +# The value above for os_workers performs 3x worse in many cases compared to +# the prevuous default of $::processorcount. +# +# Based on performance data [1], the following calculation is within 1-2%. +# +# The value for os_workers is max between '(<# processors> / 2)' and '2' with +# a cap of 12. +# +# [1] http://elk.browbeatproject.org:80/goto/a23307fd511e314b975dedca6f65425d +# +Facter.add(:os_workers) do + has_weight 100 + setcode do + processors = Facter.value('processorcount') + [ [ (processors.to_i / 2), 2 ].max, 12 ].min + end +end + +# +# For cases where services are not co-located together (ie monolithic). +# +Facter.add(:os_workers_large) do + has_weight 100 + setcode do + processors = Facter.value('processorcount') + [ (processors.to_i / 2) ] + end +end diff --git a/releasenotes/notes/os_workers-fact-0ce731f0536c2792.yaml b/releasenotes/notes/os_workers-fact-0ce731f0536c2792.yaml new file mode 100644 index 00000000..0335c74a --- /dev/null +++ b/releasenotes/notes/os_workers-fact-0ce731f0536c2792.yaml @@ -0,0 +1,12 @@ +--- +features: + - Moved existing $::os_workers to $::os_workers_small + - Updated $::os_workers to have a value between '2' and '12'. + The value of this fact is the larger value between '2' + and the number of processors divided by '2' but will not + exceed '12'. + - Created fact $::os_workers_large to have a value of number + of processors divided by '2' +fixes: + - bug 1650424 The current calculation for os_workers negatively + impacts api response times