On 2015-30-06 16:17, Romain F. wrote:
I've already benchmarked and profiled Catalog's from_data_hash and
to_data_hash methods using the benchmark framework.
Most of the time is spent in the from_data_hash (we already knew it) but
there is no big "pitfalls" where Ruby loses his time.
My callgrind file shows that the top 5 (in self time) is :
- Array.flatten (55000 calls)
- Array..each (115089 calls)
- Puppet::Resource.initialize (15000 calls)
- String.=~ (65045 calls)
- Hash[]= (115084 calls)
This top 5 is taking ~30% of the total time .
As you can see, it can be dificult to optimize this. IMHO, the
"benchmark -> tweak -> benchmark" way of optimizing is not sufficient
here. I think the way it (de)serialize a catalog needs a deep refactor.
There is probably lots of duplicated work going on at the levels above
and those are causing those generic methods to light up (except
Puppet::Resource.initialize).
There is both the deserialization process as such to optimize, but also
the Resource implementation itself which is far from optimal.
The next thing would be to focus on Resource.initialize/from_data_hash
I think it is also relevant to establish some kind of "world record" -
say serializing and deserializing a hash using MsgPack; a hash of data
cannot be transported faster across the wire than that (unless also not
using Ruby objects to represent the data - with a lot of extra complexity).
I mean, a hash of some complexity will always consume quite a bit of
processing and memory to get across the wire. Is it hitting the "world
record" enough?
- henrik
Cheers,
Le mardi 30 juin 2015 04:23:42 UTC+2, henrik lindberg a écrit :
On 2015-29-06 22:41, Trevor Vaughan wrote:
> If you get a profiling suite together (aka, bunch of random patches)
> could you release it?
>
It is not difficult actually. Look at the benchmarks in the puppet code
base. Many of them are suitable for profiling with a ruby profiler.
I don't think we have any benchmarks targeting the agent side
though, so
the first thing to do (for someone) is to write one.
What is more difficult is coming up with a benchmark that does not
involve real/complex resources - but deserialization and up to actually
applying should be possible to work with in a simple way.
Profiling is then just running that benchmark with the ruby profiler
turned on and analyzing the result, make changes, run again... (repeat
until happy).
- henrik
> I've been curious about this for quite some time but never quite got
> around to dealing with it.
>
> My concern is very much client side performance since the more you
> managing a client, the less the client gets to do it's actual job.
>
> Thanks,
>
> Trevor
>
> On Mon, Jun 29, 2015 at 4:35 PM, Henrik Lindberg
> <[email protected] <javascript:>
<mailto:[email protected] <javascript:>>>
> wrote:
>
> On 2015-29-06 16 <tel:2015-29-06%2016>:48, Romain F. wrote:
>
> Hi everyone,
>
> I try to optimize our Puppet runs by running some
benchmarks and
> patching the puppet core (if possible).. But I have some
difficulties
> around the catalog serialization/deserialization.
>
> In fact, in 3.7.5 or 3.8.x, the Config Retrieval takes
roughly
> 7secs and
> only 4 secs is on the master side. Same fact in 4.2 but
with 9
> secs of
> config retrieval and still 4 secs on the master side.
>
> My first thoughts was "Okay, time to try MsgPack". No
improvements.
>
> I've instrumented a bit the code in the master branch around
> this, and
> I've found out that, on my 9secs of config retrieval,
3.61secs
> is lost
> in catalog deserialization, 2 secs is the catalog
conversion..
> But it's
> not the "real" deserialization (PSON to Hash) that takes
ages,
> it's the
> creation of the Catalog object itself (Hash to catalog).
Benchmarks
> shows that the time to deserialize MsgPack (or PSON) is
negligible
> compared to the catalog deserialization time.
>
> So here is my question : Is that a known issue ? Is there
any
> reason of
> the regression in 4.x (Future parser creating more
objects, ...) ?
>
> The parser=future setting only makes a difference when
compiling the
> catalog - the catalog itself does not contain more or
different data
> (except possibly using numbers instead of strings for some
attributes).
>
> The best way to optimize this is to write a benchmark using the
> benchmark framework and measure the time it takes to
deserialize a
> given catalog. Then run that benchmark with Ruby profiling
turned on.
>
> There are quite a few things going on at the agent side in
addition
> to taking the catalog PSON and turning it into a catalog that
it can
> apply (loading types, resolving providers, etc). Make sure to
> benchmark these separately if possible.
>
> Regards
> - henrik
>
> Cheers,
>
> --
> 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 [email protected] <javascript:>
> <mailto:puppet-dev%[email protected]
<javascript:>>
> <mailto:[email protected]
<javascript:>
> <mailto:puppet-dev%[email protected]
<javascript:>>>.
> To view this discussion on the web visit
>
https://groups.google.com/d/msgid/puppet-dev/a5bf7422-6119-43ee-ba11-44001c1ce097%40googlegroups.com
<https://groups.google.com/d/msgid/puppet-dev/a5bf7422-6119-43ee-ba11-44001c1ce097%40googlegroups.com>
>
<https://groups.google.com/d/msgid/puppet-dev/a5bf7422-6119-43ee-ba11-44001c1ce097%40googlegroups.com?utm_medium=email&utm_source=footer
<https://groups.google.com/d/msgid/puppet-dev/a5bf7422-6119-43ee-ba11-44001c1ce097%40googlegroups.com?utm_medium=email&utm_source=footer>>.
> For more options, visit
https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
>
>
>
> --
>
> Visit my Blog "Puppet on the Edge"
> http://puppet-on-the-edge.blogspot.se/
<http://puppet-on-the-edge.blogspot.se/>
>
> --
> 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 [email protected] <javascript:>
> <mailto:puppet-dev%[email protected]
<javascript:>>.
> To view this discussion on the web visit
>
https://groups.google.com/d/msgid/puppet-dev/mmsa75%24edc%241%40ger.gmane.org
<https://groups.google.com/d/msgid/puppet-dev/mmsa75%24edc%241%40ger.gmane.org>.
>
> For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
>
>
>
>
> --
> Trevor Vaughan
> Vice President, Onyx Point, Inc
> (410) 541-6699
>
> -- This account not approved for unencrypted proprietary
information --
>
> --
> 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 [email protected] <javascript:>
> <mailto:[email protected] <javascript:>>.
> To view this discussion on the web visit
>
https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoXoa3sShf%2Bs9n4Pn9NJvbhDxJLNEe%3DeyO%2BCdjuvHLoNEg%40mail.gmail.com
<https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoXoa3sShf%2Bs9n4Pn9NJvbhDxJLNEe%3DeyO%2BCdjuvHLoNEg%40mail.gmail.com>
>
<https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoXoa3sShf%2Bs9n4Pn9NJvbhDxJLNEe%3DeyO%2BCdjuvHLoNEg%40mail.gmail.com?utm_medium=email&utm_source=footer
<https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoXoa3sShf%2Bs9n4Pn9NJvbhDxJLNEe%3DeyO%2BCdjuvHLoNEg%40mail.gmail.com?utm_medium=email&utm_source=footer>>.
> For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/
<http://puppet-on-the-edge.blogspot.se/>
--
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 [email protected]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-dev/5f33371f-98e3-429c-8906-8db54b1de717%40googlegroups.com
<https://groups.google.com/d/msgid/puppet-dev/5f33371f-98e3-429c-8906-8db54b1de717%40googlegroups.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-dev/mmv3pn%247c6%241%40ger.gmane.org.
For more options, visit https://groups.google.com/d/optout.