<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Has NYTProf helped you? Tell me how&#8230;</title>
	<atom:link href="http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/</link>
	<description>Listen. Reflect. Explore. Solve.</description>
	<lastBuildDate>Sun, 14 Apr 2013 08:36:20 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: brunov</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-963</link>
		<dc:creator><![CDATA[brunov]]></dc:creator>
		<pubDate>Fri, 19 Jun 2009 03:32:14 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-963</guid>
		<description><![CDATA[Devel::NYTProf has helped me tremendously. By iteratively profiling a long-running app of mine, I detected and fixed:

* wrong data structure choices that compromised scalability
* very hot, very short and very simple subroutines that were rewritten in C using Inline::C
* targets for memoization, using the Memoize module
* excessive type checking
* small issues like checking existence in scalar instead of void context and minor algorithm improvements.

Last but not least, it put the last nail in the &quot;Moose is slow&quot; coffin, since never any Moose:: nor Class::MOP:: subroutine appeard at the top in the profiling reports. It was as if I had coded the thing in barebones OO Perl.

I&#039;ve mailed you a more detailed explanation of this, as well as links to the most important diffs that made speed improvements. Hope it helps!]]></description>
		<content:encoded><![CDATA[<p>Devel::NYTProf has helped me tremendously. By iteratively profiling a long-running app of mine, I detected and fixed:</p>
<p>* wrong data structure choices that compromised scalability<br />
* very hot, very short and very simple subroutines that were rewritten in C using Inline::C<br />
* targets for memoization, using the Memoize module<br />
* excessive type checking<br />
* small issues like checking existence in scalar instead of void context and minor algorithm improvements.</p>
<p>Last but not least, it put the last nail in the &#8220;Moose is slow&#8221; coffin, since never any Moose:: nor Class::MOP:: subroutine appeard at the top in the profiling reports. It was as if I had coded the thing in barebones OO Perl.</p>
<p>I&#8217;ve mailed you a more detailed explanation of this, as well as links to the most important diffs that made speed improvements. Hope it helps!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yuval Kogman</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-948</link>
		<dc:creator><![CDATA[Yuval Kogman]]></dc:creator>
		<pubDate>Mon, 15 Jun 2009 13:42:45 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-948</guid>
		<description><![CDATA[It was pretty intricate, I didn&#039;t have time to investigate deeply.

Other instances of use constant worked fine, but that constant invoked as a method on the class was mysteriously no longer callable when running under -d:NYTProf.

I&#039;ll try to reproduce it stably later today.

As for the actual changes - most of them were applied to Class::MOP on August 14th 2008. They are pretty involved (code generation, order sensitive operation during the Class::MOP bootstrap. Basically it came down to lots of the meta objects not being immutable early enough or not having their bootstrap constructors overwritten, so constructing meta objects was slower than it needed to be).]]></description>
		<content:encoded><![CDATA[<p>It was pretty intricate, I didn&#8217;t have time to investigate deeply.</p>
<p>Other instances of use constant worked fine, but that constant invoked as a method on the class was mysteriously no longer callable when running under -d:NYTProf.</p>
<p>I&#8217;ll try to reproduce it stably later today.</p>
<p>As for the actual changes &#8211; most of them were applied to Class::MOP on August 14th 2008. They are pretty involved (code generation, order sensitive operation during the Class::MOP bootstrap. Basically it came down to lots of the meta objects not being immutable early enough or not having their bootstrap constructors overwritten, so constructing meta objects was slower than it needed to be).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Zawodny</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-917</link>
		<dc:creator><![CDATA[Jeremy Zawodny]]></dc:creator>
		<pubDate>Thu, 11 Jun 2009 15:13:40 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-917</guid>
		<description><![CDATA[Yeah, let me see if I can capture the essence of the change in a diff.  It was across a few files, IIRC.  But maybe it&#039;s easy...]]></description>
		<content:encoded><![CDATA[<p>Yeah, let me see if I can capture the essence of the change in a diff.  It was across a few files, IIRC.  But maybe it&#8217;s easy&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TimBunce</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-916</link>
		<dc:creator><![CDATA[TimBunce]]></dc:creator>
		<pubDate>Thu, 11 Jun 2009 09:50:36 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-916</guid>
		<description><![CDATA[I took a look at the &quot;use constant&quot; change you linked to but I couldn&#039;t reproduce any problems.
(Though I don&#039;t know what problem you had as the comment just says &quot;use constant broke NYTProf&quot;)
If you can reproduce a problem with the current NYTProf let me know and I&#039;ll fix it ASAP.]]></description>
		<content:encoded><![CDATA[<p>I took a look at the &#8220;use constant&#8221; change you linked to but I couldn&#8217;t reproduce any problems.<br />
(Though I don&#8217;t know what problem you had as the comment just says &#8220;use constant broke NYTProf&#8221;)<br />
If you can reproduce a problem with the current NYTProf let me know and I&#8217;ll fix it ASAP.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TimBunce</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-915</link>
		<dc:creator><![CDATA[TimBunce]]></dc:creator>
		<pubDate>Thu, 11 Jun 2009 09:37:46 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-915</guid>
		<description><![CDATA[Hi Yuval. &quot;30% off of Moose’s startup time&quot; is a nice sound-bite :) 
NYTProf is getting a lot of love, but I&#039;m getting few offers of actual real-world diffs.
Could you send me some diffs of the changes you made? Or perhaps just a range of revision numbers so I can get the diffs.]]></description>
		<content:encoded><![CDATA[<p>Hi Yuval. &#8220;30% off of Moose’s startup time&#8221; is a nice sound-bite :)<br />
NYTProf is getting a lot of love, but I&#8217;m getting few offers of actual real-world diffs.<br />
Could you send me some diffs of the changes you made? Or perhaps just a range of revision numbers so I can get the diffs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yuval Kogman</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-913</link>
		<dc:creator><![CDATA[Yuval Kogman]]></dc:creator>
		<pubDate>Thu, 11 Jun 2009 04:08:26 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-913</guid>
		<description><![CDATA[You probably remember when Jesse kept bringing up issues with profiling load time. I was the one he was giving profile output to, and using his app&#039;s code I was able to shave about 30% off of Moose&#039;s startup time and the startup time of Moose based code if memory serves me right.

Devel::NYTProf has two big advantages over all the other profilers as far as I&#039;m concerned:

1. It seldom breaks. Many code bases break the other profilers, so an app big enough to need profiling is usually big enough to be unprofilable with other tools (though I have seen some strange things happen: http://github.com/nothingmuch/kiokudb/commit/0cc86555aebc8be8b17c26fc32af36dc07260e0b )

2. the output is very clear and very useful. by using a clean layout you can easily focus on the important data]]></description>
		<content:encoded><![CDATA[<p>You probably remember when Jesse kept bringing up issues with profiling load time. I was the one he was giving profile output to, and using his app&#8217;s code I was able to shave about 30% off of Moose&#8217;s startup time and the startup time of Moose based code if memory serves me right.</p>
<p>Devel::NYTProf has two big advantages over all the other profilers as far as I&#8217;m concerned:</p>
<p>1. It seldom breaks. Many code bases break the other profilers, so an app big enough to need profiling is usually big enough to be unprofilable with other tools (though I have seen some strange things happen: <a href="http://github.com/nothingmuch/kiokudb/commit/0cc86555aebc8be8b17c26fc32af36dc07260e0b" rel="nofollow">http://github.com/nothingmuch/kiokudb/commit/0cc86555aebc8be8b17c26fc32af36dc07260e0b</a> )</p>
<p>2. the output is very clear and very useful. by using a clean layout you can easily focus on the important data</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TimBunce</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-910</link>
		<dc:creator><![CDATA[TimBunce]]></dc:creator>
		<pubDate>Wed, 10 Jun 2009 14:05:11 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-910</guid>
		<description><![CDATA[Hi Jeremy! (long time no chat)

Any chance you could email me some diffs?

You make a good point re &#039;understanding the code flow&#039;. I used it in that way when I started at a Shopzilla and found it invaluable for understanding the flow in the code base I was working on. I&#039;ll add a note about that to the talk. Thanks.]]></description>
		<content:encoded><![CDATA[<p>Hi Jeremy! (long time no chat)</p>
<p>Any chance you could email me some diffs?</p>
<p>You make a good point re &#8216;understanding the code flow&#8217;. I used it in that way when I started at a Shopzilla and found it invaluable for understanding the flow in the code base I was working on. I&#8217;ll add a note about that to the talk. Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TimBunce</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-909</link>
		<dc:creator><![CDATA[TimBunce]]></dc:creator>
		<pubDate>Wed, 10 Jun 2009 13:59:12 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-909</guid>
		<description><![CDATA[Hi Ask! That&#039;s great. Any chance you could email me some diffs?

Re inclusive times... The annotations injected into the source as comments show inclusive times. When looking at the report for a source file you can click on the columns of the subroutine summary table at the top to sort by inclusive time. Same goes for the &#039;subroutine index&#039; page. Is that what you&#039;re looking for? (It&#039;s not obvious that they&#039;re clickable.)]]></description>
		<content:encoded><![CDATA[<p>Hi Ask! That&#8217;s great. Any chance you could email me some diffs?</p>
<p>Re inclusive times&#8230; The annotations injected into the source as comments show inclusive times. When looking at the report for a source file you can click on the columns of the subroutine summary table at the top to sort by inclusive time. Same goes for the &#8216;subroutine index&#8217; page. Is that what you&#8217;re looking for? (It&#8217;s not obvious that they&#8217;re clickable.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ask Bjørn Hansen</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-907</link>
		<dc:creator><![CDATA[Ask Bjørn Hansen]]></dc:creator>
		<pubDate>Wed, 10 Jun 2009 07:43:12 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-907</guid>
		<description><![CDATA[Hi Tim!

I used it recently to optimize one of our batch processes.  With the clear and &quot;actionable&quot; information I had it going ~15-50% faster (depending on the dataset) within a few hours.  Since it&#039;s a process that can take days (or more!) to run, the speedup was significant.

One thing I wish it had was an easy way to see all the timestamps as &quot;inclusive&quot;.   For my use at least I&#039;m more often than not looking at those timestamps and right now I have to &quot;hunt&quot; for them manually (unless there&#039;s an option I missed!).

 
  - ask]]></description>
		<content:encoded><![CDATA[<p>Hi Tim!</p>
<p>I used it recently to optimize one of our batch processes.  With the clear and &#8220;actionable&#8221; information I had it going ~15-50% faster (depending on the dataset) within a few hours.  Since it&#8217;s a process that can take days (or more!) to run, the speedup was significant.</p>
<p>One thing I wish it had was an easy way to see all the timestamps as &#8220;inclusive&#8221;.   For my use at least I&#8217;m more often than not looking at those timestamps and right now I have to &#8220;hunt&#8221; for them manually (unless there&#8217;s an option I missed!).</p>
<p>  &#8211; ask</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Zawodny</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-897</link>
		<dc:creator><![CDATA[Jeremy Zawodny]]></dc:creator>
		<pubDate>Sun, 07 Jun 2009 16:06:29 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-897</guid>
		<description><![CDATA[Tim:

Several months back I managed to get nytprof running on one of our development web servers at Craigslist to figure out why the code that renders our search result pages used so much CPU time.  It just didn&#039;t add up in my head.

After a few runs and some data analysis, I found that the CPAN module we used to help with time conversion (to display date/time in the user&#039;s local time) was terribly inefficient and was getting called literally thousands of times per second.  I found a better way to do this that used all built-in Perl features and it radically reduced the load on those boxes.

Ever since then I&#039;ve been a big fan.  nytprof presented that data in a way that made it *very* easy for me to understand the code flow in code I was still fairly new to at the time.

If memory serves, this shaved about 20ms (or 20%) off our typical response time in search, not to mention increasing overall capacity.]]></description>
		<content:encoded><![CDATA[<p>Tim:</p>
<p>Several months back I managed to get nytprof running on one of our development web servers at Craigslist to figure out why the code that renders our search result pages used so much CPU time.  It just didn&#8217;t add up in my head.</p>
<p>After a few runs and some data analysis, I found that the CPAN module we used to help with time conversion (to display date/time in the user&#8217;s local time) was terribly inefficient and was getting called literally thousands of times per second.  I found a better way to do this that used all built-in Perl features and it radically reduced the load on those boxes.</p>
<p>Ever since then I&#8217;ve been a big fan.  nytprof presented that data in a way that made it *very* easy for me to understand the code flow in code I was still fairly new to at the time.</p>
<p>If memory serves, this shaved about 20ms (or 20%) off our typical response time in search, not to mention increasing overall capacity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Using NYTProf to understand why not to do something. &#171; Elliot Loves Perl</title>
		<link>http://blog.timbunce.org/2009/06/05/has-nytprof-helped-you-tell-me-how/#comment-894</link>
		<dc:creator><![CDATA[Using NYTProf to understand why not to do something. &#171; Elliot Loves Perl]]></dc:creator>
		<pubDate>Sat, 06 Jun 2009 17:32:52 +0000</pubDate>
		<guid isPermaLink="false">http://timbunce.wordpress.com/?p=278#comment-894</guid>
		<description><![CDATA[[...] Benchmark, DateTime, Devel::NYTProf, modules    Mr. Bunce is asking for examples of how NYTProf told you what to fix with poorly performing [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Benchmark, DateTime, Devel::NYTProf, modules    Mr. Bunce is asking for examples of how NYTProf told you what to fix with poorly performing [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
