Andy, did this on a vagrant box with eyaml and file backends. The hierarchy has 7 levels.
Debug: PROFILE [apply] 1 Setup server facts for compiling: took 0.0000 seconds Debug: PROFILE [apply] 2.1 Compile: Set node parameters: took 0.0000 seconds Debug: PROFILE [apply] 2.2 Compile: Created settings scope: took 0.0100 seconds Debug: hiera(): [eyaml_backend]: Hiera eYAML backend starting Debug: hiera(): [eyaml_backend]: Set option: datadir = /vagrant/hiera/ Debug: hiera(): [eyaml_backend]: Set option: pkcs7_private_key = /vagrant/keys/private_key.pkcs7.pem Debug: hiera(): [eyaml_backend]: Set option: pkcs7_public_key = /vagrant/keys/public_key.pkcs7.pem Debug: hiera(): [eyaml_backend]: Looking up somekey in eYAML backend Debug: hiera(): [eyaml_backend]: Looking for data source it-mil1/dev/nodes/dnsns001 Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/nodes/dnsns001.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source it-mil1/dev/roles/dnsns Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/roles/dnsns.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source it-mil1/dev/global Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/global.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source nodes/dnsns001 Debug: hiera(): [eyaml_backend]: Looking for data source roles/dnsns Debug: hiera(): Cannot find datafile /vagrant/hiera/roles/dnsns.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source dev Debug: hiera(): Cannot find datafile /vagrant/hiera/dev.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source global Debug: hiera(): Hiera File backend starting Debug: hiera(): Looking up somekey in File backend Debug: hiera(): Hiera File_backend: looking for data source 'it-mil1/dev/nodes/dnsns001' Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/nodes/dnsns001.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'it-mil1/dev/roles/dnsns' Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/roles/dnsns.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'it-mil1/dev/global' Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/global.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'nodes/dnsns001' Debug: hiera(): Cannot find datafile /vagrant/hiera/nodes/dnsns001.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'roles/dnsns' Debug: hiera(): Cannot find datafile /vagrant/hiera/roles/dnsns.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'dev' Debug: hiera(): Cannot find datafile /vagrant/hiera/dev.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'global' Debug: PROFILE [apply] 2.3.1 Called hiera: took 0.0336 seconds Debug: hiera(): [eyaml_backend]: Set option: datadir = /vagrant/hiera/ Debug: hiera(): [eyaml_backend]: Set option: pkcs7_private_key = /vagrant/keys/private_key.pkcs7.pem Debug: hiera(): [eyaml_backend]: Set option: pkcs7_public_key = /vagrant/keys/public_key.pkcs7.pem Debug: hiera(): [eyaml_backend]: Looking up otherkey in eYAML backend Debug: hiera(): [eyaml_backend]: Looking for data source it-mil1/dev/nodes/dnsns001 Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/nodes/dnsns001.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source it-mil1/dev/roles/dnsns Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/roles/dnsns.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source it-mil1/dev/global Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/global.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source nodes/dnsns001 Debug: hiera(): [eyaml_backend]: Looking for data source roles/dnsns Debug: hiera(): Cannot find datafile /vagrant/hiera/roles/dnsns.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source dev Debug: hiera(): Cannot find datafile /vagrant/hiera/dev.eyaml, skipping Debug: hiera(): [eyaml_backend]: Looking for data source global Debug: hiera(): Looking up otherkey in File backend Debug: hiera(): Hiera File_backend: looking for data source 'it-mil1/dev/nodes/dnsns001' Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/nodes/dnsns001.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'it-mil1/dev/roles/dnsns' Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/roles/dnsns.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'it-mil1/dev/global' Debug: hiera(): Cannot find datafile /vagrant/hiera/it-mil1/dev/global.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'nodes/dnsns001' Debug: hiera(): Cannot find datafile /vagrant/hiera/nodes/dnsns001.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'roles/dnsns' Debug: hiera(): Cannot find datafile /vagrant/hiera/roles/dnsns.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'dev' Debug: hiera(): Cannot find datafile /vagrant/hiera/dev.d, skipping Debug: hiera(): Hiera File_backend: looking for data source 'global' Debug: PROFILE [apply] 2.3.2 Called hiera: took 0.0156 seconds On Friday, May 16, 2014 6:29:28 PM UTC+2, Andy Parker wrote: > > On Thu, May 15, 2014 at 10:24 PM, David Schmitt <da...@dasz.at<javascript:> > > wrote: > >> Hi, >> >> >> On 16.05.2014 02:17, Alessandro Franceschi wrote: >> >>> >>> >>> On Thursday, May 15, 2014 9:55:05 PM UTC+2, John Bollinger wrote: >>> >>> I am concerned about the impact. It is already somewhat costly for >>> Puppet to evaluate data bindings for class parameters, and adding >>> bindings for resource parameters (even just for resources of defined >>> types) will magnify that. Note that the cost scales with the >>> aggregate number of defined parameters for all declared resources, >>> independent whether any data are actually bound. In fact, the cases >>> were no data are bound are the most costly, because hiera must then >>> search the entire hierarchy. >>> >>> >>> Yes, these are valid and convincing points. >>> Anyway if we find data binding useful for classes and can bear the >>> performance overhead, I suppose we can do the same for defined types. >>> >> >> I very much like the idea for data binding on all parameters, but this >> statement is really not universally true. I've got catalogs with only tens >> of classes but thousands of resources. That works out to 100x more hiera >> calls. :-/ >> >> > John makes a very good point about the performance cost. The impact of > putting data bindings on everything is made even worse by the fact that it > is an all or nothing price you have to pay, there isn't any way to use it > for just a subset of your catalog. > > As a little number collection, would some of you mind doing a little > experiment and posting the numbers? > > Run "puppet apply -e 'notice(hiera("somekey", 1), hiera("otherkey", 1))' > --profile --debug" > > Make sure that it is using your real hiera config with your real data > files or else it won't be an accurate reflection of the cost. You'll get > output that should contain something like this: > > Debug: PROFILE [apply] 2.2 Compile: Created settings scope: took 0.0103 > seconds > Debug: hiera(): Hiera YAML backend starting > Debug: hiera(): Looking up somekey in YAML backend > Debug: hiera(): Looking for data source common > Debug: hiera(): Cannot find datafile /var/lib/hiera/common.yaml, skipping > Debug: PROFILE [apply] 2.3.1 Called hiera: took 0.0019 seconds > Debug: hiera(): Looking up otherkey in YAML backend > Debug: hiera(): Looking for data source common > Debug: hiera(): Cannot find datafile /var/lib/hiera/common.yaml, skipping > Debug: PROFILE [apply] 2.3.2 Called hiera: took 0.0002 seconds > > I don't have hiera setup on this machine so it didn't do anything, but you > can see how much overhead *per-parameter* data bindings introduces. So in a > system with no hierarchy, and no data files (and in fact no hiera config) > it adds about 2 usec per parameter. > > If some of you could post results as well as estimates of the number of > defined types and parameters that you have in a catalog that would be great. > > >> >> Regards, David >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Developers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to puppet-dev+...@googlegroups.com <javascript:>. >> To view this discussion on the web visit https://groups.google.com/d/ >> msgid/puppet-dev/5375A109.7020209%40dasz.at. >> >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Andrew Parker > a...@puppetlabs.com <javascript:> > Freenode: zaphod42 > Twitter: @aparker42 > Software Developer > > *Join us at PuppetConf 2014 <http://www.puppetconf.com/>, September > 22-24 in San Francisco* > *Register by May 30th to take advantage of the Early Adopter discount > <http://links.puppetlabs.com/puppetconf-early-adopter> **—**save $349!* > -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/63ce435d-0f8a-447d-ac3c-9999c3b2874a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.