On Friday, January 25, 2013 9:29:00 AM UTC-6, asq wrote:
>
> W dniu piątek, 25 stycznia 2013 16:07:43 UTC+1 użytkownik jcbollinger 
> napisał:
>>
>>
>> To be clear, it looks like you are talking about counts of defined type *
>> instances*, not counts of distinct defined types.  Is that right?
>>
>
> yes. it's test::rule() and test::rule_inline() in linked manifest.
>  
>
>> I am inclined to suspect that the problem is not defined types in 
>> general, but rather the specific defined types you are using.  Indeed, your 
>> data seem to support that inasmuch as inlining definitions doesn't cut your 
>> compilation times very much.
>>
>>
> we're talking about 5m33s and 4m13s difference in compile. this *is* a lot.
>


The version using more defined-type instances has more total resources.  
The time per resource is very nearly the same.  Your compile times 
certainly will scale with the total number of resources declared.

Do not confuse defined types with macros.  They are bona fide resource 
types, functioning like native types in most ways.

 

>  
>
>> I can think of several things might cause long compilation times:
>>
>>    - evaluating many templates, especially complex ones
>>    - making many hiera lookups if your hierarchy definition uses 
>>    interpolated non-global variables
>>    - repetition of anything requiring network access, such as syncing 
>>    files with a version-control repository, accessing files on a remote file 
>>    system, or performing name resolutions.
>>    - calling generate() a lot
>>
>> That's not an exhaustive list.
>>
>
> please check define rule_inline() in linked pp file - it's nothing fancy.
>


Fanciness is not the question.  Even very simple manifests can make 
declarations that are costly to compile.

 

>
> - 3 static files
> - 1 erb (35 lines with 5 variables substitution and 1 if/else clause)
>


The erb evaluation is probably more costly than everything else about that 
particular File declaration, combined.  Especially so in that it requires 
(in that particular case) up to four separate probes of the file system 
just to find the template file.

 

> - 1 hiera call
>


I believe hiera caches data to the extent that it can do, but depending on 
how your hierarchy is defined and how your data are arranged, it could 
still be that each one of those hiera() calls involves filesystem probes 
and possibly reading and parsing YAML.  That's not particularly cheap even 
if your data are simple.

 

> - 1 exported resource
>


I must have overlooked that, but it's not especially cheap, either, 
inasmuch as it involves connecting to and querying a DB.  It's practically 
expensive if the underlying DB is not local, as that then would involve 
network activity.

 

> - 4 calls to custom type (firewall)
>


Which are probably cheap(ish), but that's not certain.

 

>  
> no generates or other puppetmaster functions, no network stuff, no 
> dns-related stuff or anything i haven't already hashed-out to test if it 
> will affect compile times significantly.
>
> Anyway, I think filing a bug now would be premature.  It may be that there 
>> is a bona fide performance problem, but if so then I don't think it has 
>> been pinpointed yet.
>>
>>
> i filed a bug #18880 anyway, as i sense it might be some design error in 
> puppet - i can't really see why number of define() calls should relate to 
> compile times. as they are not "real" resources, there should be no reason 
> for them to be included in catalog, which also might relate to apply times.
>
>

Definition instances certainly are real resources in most ways that 
matter.  In any event, your compilation times even for the "inline" version 
of your manifests seem unreasonably high, which is why I suggested that you 
look at other possible performance drags.

In addition to the manifest-specific issues I discussed above, you should 
also look at how your master is provisioned and loaded.  Puppet is a bit of 
a memory hog, so if the available physical RAM is low then Puppet may 
perform a lot of expensive swaps between physical and virtual RAM.  If the 
master is sharing hardware with other services (even other masters in, for 
example, a passenger setup), then contention for the disk subsystem could 
slow everything, especially if you have SATA (or worse) disks instead of 
SCSI.  There are many other such possibilities.

On the other hand, I don't mean to suggest that declaration of defined-type 
instances is free or cheap.  As I said, defined types are not macros, but 
rather bona fide resource types.  Declaring a defined-type instance 
involves more work than simply making all the declarations that appear in 
the definition body.


John

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To post to this group, send email to puppet-users@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to