Details
-
Task
-
Status: Closed
-
Normal
-
Resolution: Won't Do
-
None
-
None
-
None
-
Coremunity
-
Platform Core KANBAN
-
Enhancement
-
Reduces the amount of file IO and time needed to load puppet, especially on Windows where puppet loads 33% faster.
-
Needs Assessment
Description
Our compiled ruby's default LOAD_PATH contains:
# /opt/puppetlabs/puppet/bin/ruby -e 'require "pp"; pp $:'
|
["/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.7.0",
|
"/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.7.0/x86_64-linux",
|
"/opt/puppetlabs/puppet/lib/ruby/site_ruby",
|
"/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/2.7.0",
|
"/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/2.7.0/x86_64-linux",
|
"/opt/puppetlabs/puppet/lib/ruby/vendor_ruby",
|
"/opt/puppetlabs/puppet/lib/ruby/2.7.0",
|
"/opt/puppetlabs/puppet/lib/ruby/2.7.0/x86_64-linux"]
|
On Windows:
C:\>ruby -e "require 'pp'; pp $LOAD_PATH"
|
["C:/Program Files/Puppet Labs/Puppet/puppet/lib",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/site_ruby/2.7.0",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/site_ruby/2.7.0/x64-msvcrt",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/site_ruby",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/vendor_ruby/2.7.0",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/vendor_ruby/2.7.0/x64-msvcrt",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/vendor_ruby",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/2.7.0",
|
"C:/Program Files/Puppet Labs/Puppet/puppet/lib/ruby/2.7.0/x64-mingw32"]
|
As a result the site_ruby directories are scanned first, but are never used. This results in many thousands of failed stat/lstats since we never put anything in those directories:
# strace -f -e trace=file puppet --version 2>&1 > /dev/null | grep site_ruby | wc -l
|
2277
|
On Windows, it results in 2766 calls out of 37257 total.
Perhaps we should compile ruby with --with-sitedir=no.