SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
R.I.Pienaar
February 2015
Puppet Performance
Profiling
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Who am I?
• Puppet user since 0.22.x
• Blog at http://devco.net
• Tweets at @ripienaar
• Volcane on IRC
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Why?
• Unit and Integration testing
• Cloud based scaling
• Maintenance windows and fast feedback
• Resource usage on the master
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Agent Life Cycle
• Agent gather facts using facter *
• Agent submit facts and request catalog
• Master compiles catalog, sends to agent *
• Agent stores catalog
• Agent applies catalog *
• Agent submits report
• Master processes report
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Facter
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Shows per fact timings
$ facter —timing
lsbdistid: 56.06ms
operatingsystem: 57.21ms
osfamily: 58.54ms
macaddress: 0.29ms
ipaddress6: 18.36ms
ipaddress6_lo: 31.41ms
mtu_dummy0: 29.82ms
vlans: 0.20ms
selinux: 11.91ms
mtu_ip_vti0: 29.09ms
Timing Facts
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Shows per fact timings…but only the setcode part
FREEGEOURL = “http://freegeoip.net/json/"
geoipinfo = JSON.parse(open(FREEGEOURL).read)
geoipinfo.each do |k, v|
next if k == "ip"
Facter.add("geo_#{k.downcase}") { setcode { v } }
end
Timing Facts
geo_latitude: 0.02ms
geo_region_name: 0.04ms
geo_metro_code: 0.04ms
geo_time_zone: 0.03ms
geo_country_code: 0.02ms
geo_country_name: 0.02ms
geo_zip_code: 0.02ms
geo_region_code: 0.04ms
geo_city: 0.04ms
geo_longitude: 0.03ms
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Restructuring fact to do the slow work in setcode
geoipinfo = nil
["country_code", “country_name”…].each do |key|
Facter.add(“geo_%s” % key.downcase) do
setcode do
geoipinfo ||= JSON.parse(open(FREEGEOURL).read)
["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key]
end
end
end
Timing Facts
geo_zipcode: 7174.49ms
geo_metro_code: 0.04ms
geo_country_code: 0.03ms
geo_region_name: 0.04ms
geo_latitude: 0.05ms
geo_area_code: 0.04ms
geo_country_name: 0.03ms
geo_city: 0.04ms
geo_longitude: 0.04ms
geo_region_code: 0.04ms
Fetch once per run
and re-use
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Add a local cache, now only the first invoke is slow
def geoip_cached_fetch
store = PStore.new(File.join(Dir.tmpdir, “fgeoip_fact.pstore"))
store.transaction do
store[:freegeoip] ||= JSON.parse(open(FREEGEOURL).read)
end
end
geoipinfo = nil
["country_code", “country_name”…].each do |key|
Facter.add(“geo_%s” % key.downcase) do
setcode do
geoipinfo ||= geoip_cached_fetch
["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key]
end
end
end
Timing Facts
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Catalog Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
Needs to find the file
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
Compilation
$ strace puppet parser validate
test.pp 2>&1 |grep stat|wc -l
10546
$ strace puppet parser validate
test.pp 2>&1 |egrep '((stat|open).
+modules)'|wc -l
217
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
hiera(“apache::version”, “present”)
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
:hierarchy:
- 01_Nodes/%{::fqdn}
- 02_Domain/%{::domain}
- 03_Perimeter/%{::perimeter}/%{::datacenter}
- 03_Perimeter/%{::perimeter}
- 04_DC/%{::datacenter}
- 05_OS/%{::operatingsystem}/%{::hardwareisa}
- 05_OS/%{::operatingsystem}
- 06_Manufacturer/%{::manufacturer}
- 07_RealTime/%{::real_time}
- 09_Mco_Teams/%{::team}
- 50_Teams/%{team}/01_Nodes/%{::fqdn}
- 50_Teams/HPCE/%{::hpce_env}/%{::hpce_type}
- 50_Teams/HPCE/%{::hpce_env}/common
- 50_Teams/%{::team}/common
- common
Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
Compilation
$ puppet apply test.pp 2>&1|grep
"Looking for data source"|wc -l
3562
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
ruby code, similar issues as the fact
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
also speeds up finding
the class internally
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# /etc/puppet/modules/apache/init.pp
class apache($version=present) {
validate_string($version)
class{“::apache::package”:
version => $version
}
}
Compilation
No hiera lookup,
authoritative value supplied
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
Profiling Compilation
$ puppet apply test.pp —profile
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
importing ‘..epel/manifests/init.pp’
importing ‘..epel/manifests/params.pp’
importing ‘..epel/manifests/rpm_gpg_key.pp’
importing ‘..puppetdb/manifests/init.pp’
importing ‘..puppetdb/manifests/params.pp’
PROFILE [apply] 2.3.1 Called defined: took 0.0001 seconds
PROFILE [apply] 2.3.2 Called downcase: took 0.0000 seconds
PROFILE [apply] 2.3.3 Called validate_re: took 0.0000 seconds
PROFILE [apply] 2.3.4 Called downcase: took 0.0000 seconds
PROFILE [apply] 2.3.5 Called validate_re: took 0.0000 seconds
PROFILE [apply] 2.3.6 Called downcase: took 0.0001 seconds
PROFILE [apply] 2.3.7 Called validate_re: took 0.0000 seconds
importing ‘..puppetdb/manifests/server.pp’ in environment production
PROFILE [apply] 2.3.8 Called downcase: took 0.0000 seconds
PROFILE [apply] 2.3.9 Called validate_re: took 0.0000 seconds
Profiling Compilation
class {'epel': } ->
class {'puppetdb': } ->
class {'puppet::master':
storeconfigs => true
}
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Scope(Apache::Vhost[default]): Retrieving template apache/
vhost.conf.erb
template[…vhost.conf.erb]: Bound template variables for …
vhost.conf.erb in 0.00 seconds
template[…vhost.conf.erb]: Interpolated template …vhost.conf.erb in
0.05 seconds
Profiling Compilation
define apache::vhost(…) {
file { “${priority_real}-${filename}.conf":
content => template(‘apache/vhost.conf.erb’)
}
}
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
AGGREGATE PROFILING RESULTS:
compiler -> compile: 5.800916 ms (1 calls)
compiler -> evaluate_resource: 1.53646 ms (79 calls)
compiler -> evaluate_resource -> Apache::Vhost[…]: 0.148923 ms
functions: 1.892293 ms (562 calls)
functions -> include: 1.091945 ms (41 calls)
functions -> template: 0.754388 ms (137 calls)
Profiling Compilation
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Catalog apply phase
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# puppet agent —test —evaltrace
Class[Postgresql::Server::Reload]: Starting to evaluate
Class[Postgresql::Server::Reload]: Evaluated in 0.00 seconds
Class[Postgresql::Server::Config]: Starting to evaluate
Class[Postgresql::Server::Config]: Evaluated in 0.00 seconds
Class[Postgresql::Server::Service]: Starting to evaluate
Class[Postgresql::Server::Service]: Evaluated in 0.00 seconds
Apache::Vhost[puppet-localhost]: Starting to evaluate
Apache::Vhost[puppet-localhost]: Evaluated in 0.00 seconds
Package[mailcap]: Starting to evaluate
Package[mailcap]/ensure: created
Package[mailcap]: Evaluated in 65.36 seconds
Profiling the Agent
Tracing the catalog apply phase
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
# report_print.rb —count 5 —report 201411101110.yaml
Report for localhost at Wed Nov 10 11:10:54 +0000 2014
Report File: /var/…/last_run_report.yaml
Report Kind: apply
Puppet Version: 3.7.3
Report Format: 4
Configuration Version: 1416395447
UUID: d4a9fac9-…-7db61b0dfa89
Log Lines: 2 (show with —log)
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Report Metrics:
Changes:
Total: 2
Events:
Total: 2
Success: 2
Failure: 0
Resources:
Total: 213
Out of sync: 2
Changed: 2
Scheduled: 0
Skipped: 0
Failed to restart: 0
Failed: 0
Restarted: 0
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Time:
Total: 28.44
Package: 15.55
Config retrieval: 7.71
File: 1.43
Exec: 1.33
Puppetdb conn validator: 0.87
Service: 0.73
Postgresql psql: 0.66
Augeas: 0.07
Ini setting: 0.04
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Resources by resource type:
107 File
38 Ini_setting
13 Exec
12 Postgresql_psql
9 Package
6 Yumrepo
6 Anchor
6 Schedule
4 Service
3 Postgresql_conf
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Slowest 5 resources by evaluation time:
15.55 Package[mailcap]
0.88 Puppetdb_conn_validator[puppetdb_conn]
0.66 File[/usr…/validate_postgresql_connection.sh]
0.31 Exec[validate postgres connection]
0.30 Service[puppetmaster]
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
5 largest managed files (only those that are readable)
3.85 KB /var/…/bin/concatfragments.sh
1.65 KB /etc/puppet/rack/config.ru
1.61 KB /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
1.23 KB /etc/puppet/puppet.conf
849.00 B /etc/httpd/conf/httpd.conf
Profiling the Agent
Processing reports for performance metrics
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Questions?
twitter: @ripienaar
email: rip@devco.net
blog: www.devco.net
github: ripienaar
freenode: Volcane
geo fact: http://srt.ly/hx
report processor: http://srt.ly/gq

Más contenido relacionado

La actualidad más candente

Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Riccardo Terrell
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Chef
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Chef
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Chef
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Chef
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadBram Vogelaar
 
Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)Ivan Rossi
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Chef
 
What\'s new in Rails 2.1
What\'s new in Rails 2.1What\'s new in Rails 2.1
What\'s new in Rails 2.1Keith Pitty
 
Hacking ansible
Hacking ansibleHacking ansible
Hacking ansiblebcoca
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - IntroductionVagmi Mudumbai
 
把鐵路開進視窗裡
把鐵路開進視窗裡把鐵路開進視窗裡
把鐵路開進視窗裡Wei Jen Lu
 
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecMartin Etmajer
 
Automating Infrastructure with Chef
Automating Infrastructure with ChefAutomating Infrastructure with Chef
Automating Infrastructure with ChefJennifer Davis
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13Rafael Dohms
 
Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)Martin Schütte
 

La actualidad más candente (20)

Getting Started With Aura
Getting Started With AuraGetting Started With Aura
Getting Started With Aura
 
Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomad
 
Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)Introduction to Ansible (Pycon7 2016)
Introduction to Ansible (Pycon7 2016)
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 
What\'s new in Rails 2.1
What\'s new in Rails 2.1What\'s new in Rails 2.1
What\'s new in Rails 2.1
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Hacking ansible
Hacking ansibleHacking ansible
Hacking ansible
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
 
把鐵路開進視窗裡
把鐵路開進視窗裡把鐵路開進視窗裡
把鐵路開進視窗裡
 
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpecTest-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
Test-Driven Infrastructure with Ansible, Test Kitchen, Serverspec and RSpec
 
Automating Infrastructure with Chef
Automating Infrastructure with ChefAutomating Infrastructure with Chef
Automating Infrastructure with Chef
 
Composer for busy developers - DPC13
Composer for busy developers - DPC13Composer for busy developers - DPC13
Composer for busy developers - DPC13
 
Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)Writing Ansible Modules (DENOG11)
Writing Ansible Modules (DENOG11)
 

Similar a Puppet Performance Profiling - CM Camp 2015

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Deliveryripienaar
 
Introduction to MCollective - SF PUG
Introduction to MCollective - SF PUGIntroduction to MCollective - SF PUG
Introduction to MCollective - SF PUGPuppet
 
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014Puppet
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010Puppet
 
Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resquehomanj
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Masahiro Nagano
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Yuriy Senko
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGIMike Pittaro
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and MaintenanceJazkarta, Inc.
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5Darren Craig
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Managementripienaar
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Herokuronnywang_tw
 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with BackstageOpsta
 
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppet
 
OSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga TeamOSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga TeamNETWAYS
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastMichelangelo van Dam
 

Similar a Puppet Performance Profiling - CM Camp 2015 (20)

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Delivery
 
Introduction to MCollective - SF PUG
Introduction to MCollective - SF PUGIntroduction to MCollective - SF PUG
Introduction to MCollective - SF PUG
 
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
Performance Tuning Your Puppet Infrastructure - PuppetConf 2014
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010
 
Background Jobs with Resque
Background Jobs with ResqueBackground Jobs with Resque
Background Jobs with Resque
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
 
Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)Python from zero to hero (Twitter Explorer)
Python from zero to hero (Twitter Explorer)
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGI
 
Nginx3
Nginx3Nginx3
Nginx3
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
What's Rio 〜Standalone〜
What's Rio 〜Standalone〜What's Rio 〜Standalone〜
What's Rio 〜Standalone〜
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Management
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with Backstage
 
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
 
OSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga TeamOSMC 2009 | Icinga by Icinga Team
OSMC 2009 | Icinga by Icinga Team
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfast
 

Último

Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 

Último (20)

Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 

Puppet Performance Profiling - CM Camp 2015

  • 2. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Who am I? • Puppet user since 0.22.x • Blog at http://devco.net • Tweets at @ripienaar • Volcane on IRC
  • 3. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Why? • Unit and Integration testing • Cloud based scaling • Maintenance windows and fast feedback • Resource usage on the master
  • 4. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Agent Life Cycle • Agent gather facts using facter * • Agent submit facts and request catalog • Master compiles catalog, sends to agent * • Agent stores catalog • Agent applies catalog * • Agent submits report • Master processes report
  • 5. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Facter
  • 6. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Shows per fact timings $ facter —timing lsbdistid: 56.06ms operatingsystem: 57.21ms osfamily: 58.54ms macaddress: 0.29ms ipaddress6: 18.36ms ipaddress6_lo: 31.41ms mtu_dummy0: 29.82ms vlans: 0.20ms selinux: 11.91ms mtu_ip_vti0: 29.09ms Timing Facts
  • 7. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Shows per fact timings…but only the setcode part FREEGEOURL = “http://freegeoip.net/json/" geoipinfo = JSON.parse(open(FREEGEOURL).read) geoipinfo.each do |k, v| next if k == "ip" Facter.add("geo_#{k.downcase}") { setcode { v } } end Timing Facts geo_latitude: 0.02ms geo_region_name: 0.04ms geo_metro_code: 0.04ms geo_time_zone: 0.03ms geo_country_code: 0.02ms geo_country_name: 0.02ms geo_zip_code: 0.02ms geo_region_code: 0.04ms geo_city: 0.04ms geo_longitude: 0.03ms
  • 8. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Restructuring fact to do the slow work in setcode geoipinfo = nil ["country_code", “country_name”…].each do |key| Facter.add(“geo_%s” % key.downcase) do setcode do geoipinfo ||= JSON.parse(open(FREEGEOURL).read) ["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key] end end end Timing Facts geo_zipcode: 7174.49ms geo_metro_code: 0.04ms geo_country_code: 0.03ms geo_region_name: 0.04ms geo_latitude: 0.05ms geo_area_code: 0.04ms geo_country_name: 0.03ms geo_city: 0.04ms geo_longitude: 0.04ms geo_region_code: 0.04ms Fetch once per run and re-use
  • 9. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Add a local cache, now only the first invoke is slow def geoip_cached_fetch store = PStore.new(File.join(Dir.tmpdir, “fgeoip_fact.pstore")) store.transaction do store[:freegeoip] ||= JSON.parse(open(FREEGEOURL).read) end end geoipinfo = nil ["country_code", “country_name”…].each do |key| Facter.add(“geo_%s” % key.downcase) do setcode do geoipinfo ||= geoip_cached_fetch ["", nil].include?(geoipinfo[key]) ? "unknown" : geoipinfo[key] end end end Timing Facts
  • 10. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Catalog Compilation
  • 11. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation
  • 12. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation Needs to find the file
  • 13. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true } Compilation $ strace puppet parser validate test.pp 2>&1 |grep stat|wc -l 10546 $ strace puppet parser validate test.pp 2>&1 |egrep '((stat|open). +modules)'|wc -l 217
  • 14. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation hiera(“apache::version”, “present”)
  • 15. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar :hierarchy: - 01_Nodes/%{::fqdn} - 02_Domain/%{::domain} - 03_Perimeter/%{::perimeter}/%{::datacenter} - 03_Perimeter/%{::perimeter} - 04_DC/%{::datacenter} - 05_OS/%{::operatingsystem}/%{::hardwareisa} - 05_OS/%{::operatingsystem} - 06_Manufacturer/%{::manufacturer} - 07_RealTime/%{::real_time} - 09_Mco_Teams/%{::team} - 50_Teams/%{team}/01_Nodes/%{::fqdn} - 50_Teams/HPCE/%{::hpce_env}/%{::hpce_type} - 50_Teams/HPCE/%{::hpce_env}/common - 50_Teams/%{::team}/common - common Compilation
  • 16. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true } Compilation $ puppet apply test.pp 2>&1|grep "Looking for data source"|wc -l 3562
  • 17. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation ruby code, similar issues as the fact
  • 18. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation also speeds up finding the class internally
  • 19. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # /etc/puppet/modules/apache/init.pp class apache($version=present) { validate_string($version) class{“::apache::package”: version => $version } } Compilation No hiera lookup, authoritative value supplied
  • 20. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true } Profiling Compilation $ puppet apply test.pp —profile
  • 21. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar importing ‘..epel/manifests/init.pp’ importing ‘..epel/manifests/params.pp’ importing ‘..epel/manifests/rpm_gpg_key.pp’ importing ‘..puppetdb/manifests/init.pp’ importing ‘..puppetdb/manifests/params.pp’ PROFILE [apply] 2.3.1 Called defined: took 0.0001 seconds PROFILE [apply] 2.3.2 Called downcase: took 0.0000 seconds PROFILE [apply] 2.3.3 Called validate_re: took 0.0000 seconds PROFILE [apply] 2.3.4 Called downcase: took 0.0000 seconds PROFILE [apply] 2.3.5 Called validate_re: took 0.0000 seconds PROFILE [apply] 2.3.6 Called downcase: took 0.0001 seconds PROFILE [apply] 2.3.7 Called validate_re: took 0.0000 seconds importing ‘..puppetdb/manifests/server.pp’ in environment production PROFILE [apply] 2.3.8 Called downcase: took 0.0000 seconds PROFILE [apply] 2.3.9 Called validate_re: took 0.0000 seconds Profiling Compilation class {'epel': } -> class {'puppetdb': } -> class {'puppet::master': storeconfigs => true }
  • 22. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Scope(Apache::Vhost[default]): Retrieving template apache/ vhost.conf.erb template[…vhost.conf.erb]: Bound template variables for … vhost.conf.erb in 0.00 seconds template[…vhost.conf.erb]: Interpolated template …vhost.conf.erb in 0.05 seconds Profiling Compilation define apache::vhost(…) { file { “${priority_real}-${filename}.conf": content => template(‘apache/vhost.conf.erb’) } }
  • 23. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar AGGREGATE PROFILING RESULTS: compiler -> compile: 5.800916 ms (1 calls) compiler -> evaluate_resource: 1.53646 ms (79 calls) compiler -> evaluate_resource -> Apache::Vhost[…]: 0.148923 ms functions: 1.892293 ms (562 calls) functions -> include: 1.091945 ms (41 calls) functions -> template: 0.754388 ms (137 calls) Profiling Compilation
  • 24. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Catalog apply phase
  • 25. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # puppet agent —test —evaltrace Class[Postgresql::Server::Reload]: Starting to evaluate Class[Postgresql::Server::Reload]: Evaluated in 0.00 seconds Class[Postgresql::Server::Config]: Starting to evaluate Class[Postgresql::Server::Config]: Evaluated in 0.00 seconds Class[Postgresql::Server::Service]: Starting to evaluate Class[Postgresql::Server::Service]: Evaluated in 0.00 seconds Apache::Vhost[puppet-localhost]: Starting to evaluate Apache::Vhost[puppet-localhost]: Evaluated in 0.00 seconds Package[mailcap]: Starting to evaluate Package[mailcap]/ensure: created Package[mailcap]: Evaluated in 65.36 seconds Profiling the Agent Tracing the catalog apply phase
  • 26. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar # report_print.rb —count 5 —report 201411101110.yaml Report for localhost at Wed Nov 10 11:10:54 +0000 2014 Report File: /var/…/last_run_report.yaml Report Kind: apply Puppet Version: 3.7.3 Report Format: 4 Configuration Version: 1416395447 UUID: d4a9fac9-…-7db61b0dfa89 Log Lines: 2 (show with —log) Profiling the Agent Processing reports for performance metrics
  • 27. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Report Metrics: Changes: Total: 2 Events: Total: 2 Success: 2 Failure: 0 Resources: Total: 213 Out of sync: 2 Changed: 2 Scheduled: 0 Skipped: 0 Failed to restart: 0 Failed: 0 Restarted: 0 Profiling the Agent Processing reports for performance metrics
  • 28. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Time: Total: 28.44 Package: 15.55 Config retrieval: 7.71 File: 1.43 Exec: 1.33 Puppetdb conn validator: 0.87 Service: 0.73 Postgresql psql: 0.66 Augeas: 0.07 Ini setting: 0.04 Profiling the Agent Processing reports for performance metrics
  • 29. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Resources by resource type: 107 File 38 Ini_setting 13 Exec 12 Postgresql_psql 9 Package 6 Yumrepo 6 Anchor 6 Schedule 4 Service 3 Postgresql_conf Profiling the Agent Processing reports for performance metrics
  • 30. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Slowest 5 resources by evaluation time: 15.55 Package[mailcap] 0.88 Puppetdb_conn_validator[puppetdb_conn] 0.66 File[/usr…/validate_postgresql_connection.sh] 0.31 Exec[validate postgres connection] 0.30 Service[puppetmaster] Profiling the Agent Processing reports for performance metrics
  • 31. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar 5 largest managed files (only those that are readable) 3.85 KB /var/…/bin/concatfragments.sh 1.65 KB /etc/puppet/rack/config.ru 1.61 KB /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 1.23 KB /etc/puppet/puppet.conf 849.00 B /etc/httpd/conf/httpd.conf Profiling the Agent Processing reports for performance metrics
  • 32. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Questions? twitter: @ripienaar email: rip@devco.net blog: www.devco.net github: ripienaar freenode: Volcane geo fact: http://srt.ly/hx report processor: http://srt.ly/gq