<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	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>Performance Blog</title>
	<atom:link href="http://perfwork.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://perfwork.wordpress.com</link>
	<description>On Workloads, Performance and Open Source</description>
	<lastBuildDate>Mon, 17 Oct 2011 02:21:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='perfwork.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/72482a68485ca02545b2b7b1a1e57e92?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Performance Blog</title>
		<link>http://perfwork.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://perfwork.wordpress.com/osd.xml" title="Performance Blog" />
	<atom:link rel='hub' href='http://perfwork.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Olio on github</title>
		<link>http://perfwork.wordpress.com/2011/07/27/olio-on-github/</link>
		<comments>http://perfwork.wordpress.com/2011/07/27/olio-on-github/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 18:52:14 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[web2.0]]></category>
		<category><![CDATA[Workloads]]></category>
		<category><![CDATA[olio; performance]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=196</guid>
		<description><![CDATA[Olio was developed by Sun Microsystems as a way to compare, measure and analyze the performance of various web2.0 technology stacks. We had a great collaboration with the RADLab in UC Berkeley and gave this project to Apache. However, with the take-over by Oracle, Sun was no longer willing to support the project. Many users [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=196&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Olio was developed by Sun Microsystems as a way to compare, measure and analyze the performance of various web2.0 technology stacks. We had a great collaboration with the RADLab in UC Berkeley and gave this project to Apache. However, with the take-over by Oracle, Sun was no longer willing to support the project. Many users continued to find and use Olio but no one (including big-name companies like VMWare who used it for their own benchmark) was willing to contribute to it. I&#8217;ve always felt that open source works only when there is big corporation support, but I digress.</p>
<p>Anyway, I&#8217;ve asked for the Apache Olio project to be wound down. For those who may still be interested in using it, I have now copied over the repository to <a title="olio github" href="http://github.com/shanti/olio" target="_blank">github </a>- feel free to fork it. I have also moved some of the documentation to the <a title="Olio wiki" href="https://github.com/shanti/olio/wiki/_pages" target="_blank">wiki</a>.</p>
<p>For anyone considering moving a svn repository to git, git-svn was mostly painless. It preserves the history of the edits which is really great.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=196&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/07/27/olio-on-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Velocity 2011</title>
		<link>http://perfwork.wordpress.com/2011/06/20/velocity-2011/</link>
		<comments>http://perfwork.wordpress.com/2011/06/20/velocity-2011/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 17:45:32 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[velocityconf]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=188</guid>
		<description><![CDATA[Yet another year has gone by marked by yet another Velocity conference last week. This year the crowds were even bigger &#8211; if this conference continues to grow in this manner, it will soon have to be held in Moscone! I gave myself the week-end to sleep over this instead of rushing to publish ASAP [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=188&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yet another year has gone by marked by yet another Velocity conference last week. This year the crowds were even bigger &#8211; if this conference continues to grow in this manner, it will soon have to be held in Moscone!</p>
<p>I gave myself the week-end to sleep over this instead of rushing to publish ASAP so that I could gather my notes and reflect on the conference.</p>
<h2><strong>The high order bits</strong></h2>
<h4>Mobile</h4>
<p>For me, the best day was the workshop day on Tuesday, specifically the mobile workshops in the afternoon.  I did not attend <a href="http://velocityconf.com/velocity2011/public/schedule/detail/19976" target="_blank">Maximiliano&#8217;s session</a> last year so I am very glad I did this year. I learned a ton and hope to put it to use as I increase my focus on the mobile web. It was clear from this as well as the earlier <a href="http://velocityconf.com/velocity2011/public/schedule/detail/19967" target="_blank">session by Ariya</a> that the Velocity audience has not yet started to grapple with optimizing the mobile experience.  Lots of very useful, meaty information in both these sessions, so check them out.</p>
<h3>Statistics</h3>
<p>It was refreshing to see the emphasis on statistics with the two sessions by John Rauser of Amazon. John is obviously a very seasoned speaker and his <a href="http://velocityconf.com/velocity2011/public/schedule/detail/19974" target="_blank">workshop </a>was very well received.  It would be great to see a workshop next year that takes this a step further into a practical workshop on  how to apply statistics in analyzing performance data, including a discussion of confidence intervals.</p>
<p>I would be amiss if I did not also mention the <a href="http://velocityconf.com/velocity2011/public/schedule/detail/21110" target="_blank">Ignite session on Little&#8217;s Law</a>. It was a great way to present this topic for those who have never heard of it, so do check it out.</p>
<h4>Dynamic Optimization</h4>
<p>It seems the list of companies and products entering this market is growing day by day. These products optimize your site using a variety of technologies. Last year, Strangeloop led the pack but this year there were many more. I was particularly impressed by Cotendo. The company seems to have made a rapid rise in a very short time with advanced functionality that only very large sites have. Ditto for CloudFlare &#8211; I liked the CEO&#8217;s Ignite talk as well. If you are in the market for these type of products, I definitely recommend checking them out.</p>
<h2>The low order bits</h2>
<h3>Sponsored keynotes</h3>
<p>The myriad sponsored talks. It is one thing to have a sponsored session track (in fact many sessions in this track were well worth attending), but another to have them be part of the Keynote sessions. Considering that keynotes took up half the day on both days, I found a big chunk of them were worthless.</p>
<h3>The language</h3>
<p>This conference also gets a low score for language. From when did it become okay to use foul language in conferences and especially in keynotes that were being steamed live? It seemed to start with Artur Bergman and many speakers after that seemed to think it was okay to drop the f-word every few minutes.</p>
<h3>The number of women</h3>
<p>If you looked around the room, there were very few women &#8211; I would estimate the female audience to be well less than 10%. I counted exactly 3 women speakers. At the Velocity summit earlier this year, the claim was that they wanted to increase the participation of women and minorities; I can&#8217;t help wonder what steps were taken to do that. With the new standards for foul language, good luck in pulling more women in.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=188&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/06/20/velocity-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Measuring Page Performance</title>
		<link>http://perfwork.wordpress.com/2011/03/24/measuring-page-performance/</link>
		<comments>http://perfwork.wordpress.com/2011/03/24/measuring-page-performance/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 17:27:51 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[above the fold]]></category>
		<category><![CDATA[perceived performance]]></category>
		<category><![CDATA[response time]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=181</guid>
		<description><![CDATA[Web pages today are becoming increasingly complex and it is now well recognized that simply measuring page load time does not represent the  response time of a page. But what exactly do we mean by response time? Terms such as time to interactivity, perceived performance, above the fold performance etc. have come into vogue. Let&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=181&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Web pages today are becoming increasingly complex and it is now well recognized that simply measuring page load time does not represent the  response time of a page.</p>
<p>But what exactly do we mean by response time? Terms such as time to interactivity, perceived performance, above the fold performance etc. have come into vogue. Let&#8217;s examine these in turn.</p>
<h3>Time To Interactivity</h3>
<p>In last year&#8217;s Velocity Conference, <a title="Nicholas' Home Page" href="http://www.nczonline.net/" target="_blank">Nicholas Zakas</a> of Yahoo! gave an excellent <a href="http://assets.en.oreilly.com/1/event/44/Building%20Performance%20Into%20the%20New%20Yahoo_%20Homepage%20Presentation.pdf" target="_blank">presentation </a>on how the Yahoo! Front Page responsiveness was improved in which he focused on <em>time to interactivity</em>. In other words, when can a user actually interact with a page (say click on a link) is more important than ensuring that the entire page gets rendered. With pages increasingly containing animated multi-media content which the user may not care about, this definition may make sense. However,  imagine a page whose primary purpose is to serve up links to other pages (e.g. news) and loads lots of images <em>after </em>onload. All the links appear first which means the user can interact with the site, yet the page has lots of white space where the images go &#8211; can we truly just measure the time to interactivity and claim this to be the response time of a page?</p>
<h3>Perceived Performance</h3>
<p>Another popular term, perceived performance is defined loosely as the time that the user <em>perceives</em> it takes for the page. This means that all the major elements of the page that the user can easily see must  be rendered. By definition, this measurement is highly subjective. Perceptions differ &#8211; for e.g. one user may not miss the Chat pane in gmail while for another this is a very important feature. Further, again by definition, this metric is application dependent. Nevertheless, for a particular web application, it is possible for developers and performance engineers to agree on a definition of what is perceived performance and work towards measuring/improving it.</p>
<h3>Above The Fold Performance</h3>
<p>In the <a href="http://en.oreilly.com/velocity-mar2011/" target="_blank">Velocity Online</a> conference last week, Jake Brutlag of google proposed <strong> <a href="http://assets.en.oreilly.com/1/event/62/Above%20the%20Fold%20Time_%20Measuring%20Web%20Page%20Performance%20Visually%20Presentation.pdf" target="_blank">&#8220;Above the Fold Time&#8221;</a></strong><a href="http://assets.en.oreilly.com/1/event/62/Above%20the%20Fold%20Time_%20Measuring%20Web%20Page%20Performance%20Visually%20Presentation.pdf"> (AFT)</a> as a method of measuring a more meaningful response time. This was defined as the time taken to render all of the static elements in the visible portion of the browser window. Jake and others have put in some serious thought and defined the algorithm to distinguish between the static and dynamic (e.g. ads) content on a page.</p>
<p>Clearly, one part of the AFT proposal is valid -  one doesn&#8217;t really care about the content on the page that is not visible initially and which the user can only get to by scrolling. But measuring everything above the fold has its issues as well. Take for instance the new <a href="http://features.mail.yahoo.com/whatsinside" target="_blank">Yahoo! Mail Beta</a>. Y! Mail now has extensive social features to enable one to connect to Facebook, Twitter, Messenger and endless third-party applications. It is arguable whether the user will expect all of these third-party links to be on the page before he &#8220;perceives&#8221; that his request is complete.  The page still looks finished without those links.</p>
<p>In my opinion, we need to distinguish between the <em>essential </em>parts of the page vs the <em>optional </em>ones (A caveat here &#8211; although no one would argue that an ad is essential, it <em>is </em>essential for the page to look complete).  Looking at just static vs dynamic pixels misses this point. The difficulty of course is that there is no uniform way to define what is essential &#8211; it once again becomes application/page specific.</p>
<p>But for now, that&#8217;s the way I am going &#8211; defining &#8220;perceived performance&#8221; on a case by case basis.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=181&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/03/24/measuring-page-performance/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing faban.org</title>
		<link>http://perfwork.wordpress.com/2011/02/15/announcing-faban-org/</link>
		<comments>http://perfwork.wordpress.com/2011/02/15/announcing-faban-org/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 19:57:52 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[faban]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=178</guid>
		<description><![CDATA[As many of you know, Faban is a free and open source benchmark development and automation framework. It was originally developed at Sun Microsystems, Inc. which made it available to the community under the CDDL license. With the architect and lead developer Akara Sucharitakul and myself no longer working at Oracle (not to mention the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=178&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As many of you know, Faban is a free and open source benchmark development and automation framework. It was originally developed at Sun Microsystems, Inc. which made it available to the community under the <a title="CDDL " href="http://en.wikipedia.org/wiki/Common_Development_and_Distribution_License" target="_blank">CDDL</a> license.</p>
<p>With the architect and lead developer Akara Sucharitakul and myself no longer working at Oracle (not to mention the demise of the project website without notice), we decided to host it at <a title="faban.org" href="http://www.faban.org" target="_blank">http://www.faban.org</a>. The website isn&#8217;t pretty but at least it hosts all the documentation,  a downloadable kit and a pointer to the source on github.  In the coming weeks, I will work on organizing the site. A big thanks to all the folks who expressed concern about the future of this project. With your help, we can continue to support it.</p>
<p>If you are a faban user, please do join the new Faban Users forum at <a title="Faban forum" href="http://groups.google.com/group/faban-users" target="_blank">http://groups.google.com/group/faban-users</a>.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/178/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/178/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/178/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=178&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/02/15/announcing-faban-org/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>A lesson in Analysis</title>
		<link>http://perfwork.wordpress.com/2011/02/11/a-lesson-in-analysis/</link>
		<comments>http://perfwork.wordpress.com/2011/02/11/a-lesson-in-analysis/#comments</comments>
		<pubDate>Fri, 11 Feb 2011 22:21:23 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[nslookup]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web performance]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=171</guid>
		<description><![CDATA[I thought I&#8217;d continue the theme of my last post &#8220;A lesson in Validation&#8221; with a lesson in analysis. This one is mostly focused on networking &#8211; one of my primary new focus areas but anyone can benefit from the process and lessons learned. Recently, I was analyzing the results of  some tests run against [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=171&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I thought I&#8217;d continue the theme of my last post &#8220;<a href="http://perfwork.wordpress.com/2011/01/28/a-lesson-in-validation/">A lesson in Validation</a>&#8221; with a lesson in analysis. This one is mostly focused on networking &#8211; one of my primary new focus areas but anyone can benefit from the process and lessons learned.</p>
<p>Recently, I was analyzing the results of  some tests run against Yahoo&#8217;s <a href="http://malaysia.yahoo.com" target="_blank">Malaysia Front Page</a>. The response times were incredibly high and on digging down, it soon became apparent why. The time taken to retrieve the static objects was more than 100 times what it should have been.</p>
<h3>CDN Magic</h3>
<p>Like most websites, Yahoo! uses geographically distributed CDNs to serve static content. Malaysia gets served out of Singapore which is pretty darned close so there should be no reason for extra long hops. A large response time to retrieve a static object can mean one of two things: the object is not being cached or it is getting routed to the wrong location.</p>
<p>Sure enough, <em>nslookup </em>showed that the ip address being used to access all the static objects was located in the USA. It was therefore no surprise that it was taking so long. Satisfied that I had found a routing problem, I contacted the DNS team and they said &#8230; you guessed it. &#8220;It&#8217;s not our problem&#8221;. They ran some of their own tests and stated that Malaysia was getting routed correctly to Singapore, therefore the problem must be with my tests.</p>
<h3>Dig(1) to the rescue</h3>
<p>Since I was using a third-party tool, I contacted the vendor to see if they could help. The support engineer promptly ran <a title="dig man page" href="http://linux.die.net/man/1/dig" target="_blank"><em>dig </em></a>and found that all the requests were being resolved (but didn&#8217;t care that they weren&#8217;t being resolved correctly!)  Here is the output of dig:</p>
<pre>&lt;&lt;&gt;&gt; DiG 9.3.4 &lt;&lt;&gt;&gt; l1.yimg.com @GPNKULDB01 A +notrace +recurse
; (1 server found)
;; global options: printcmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 1442
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 2, ADDITIONAL: 2 

;; QUESTION SECTION:
;l1.yimg.com.	 IN	A 

;; ANSWER SECTION:
l1.yimg.com.	 3068	IN	CNAME	geoycs-l.gy1.b.yahoodns.net.
geoycs-l.gy1.b.yahoodns.net. 3577 IN	CNAME	fo-anyycs-l.ay1.b.yahoodns.net.
fo-anyycs-l.ay1.b.yahoodns.net.	210 IN	A	98.137.88.34
fo-anyycs-l.ay1.b.yahoodns.net.	210 IN	A	98.137.88.84
fo-anyycs-l.ay1.b.yahoodns.net.	210 IN	A	98.137.88.83
fo-anyycs-l.ay1.b.yahoodns.net.	210 IN	A	98.137.88.37
fo-anyycs-l.ay1.b.yahoodns.net.	210 IN	A	98.137.88.36
fo-anyycs-l.ay1.b.yahoodns.net.	210 IN	A	98.137.88.35 

;; AUTHORITY SECTION:
ay1.b.yahoodns.net.	159379	IN	NS	yf1.yahoo.com.
ay1.b.yahoodns.net.	159379	IN	NS	yf2.yahoo.com. 

;; ADDITIONAL SECTION:
yf2.yahoo.com.	 1053	IN	A	68.180.130.15
yf1.yahoo.com.	 1053	IN	A	68.142.254.15 

;; Query time: 0 msec
;; SERVER: 172.16.37.138#53(172.16.37.138)
;; WHEN: Wed Jan 12 11:15:42 2011
;; MSG SIZE rcvd: 270</pre>
<p>We now had the ip address of the DNS Resolver &#8211; 172.16.37.138. Where was this located? nslookup showed:</p>
<pre>** server can't find 138.37.16.172.in-addr.arpa.: NXDOMAIN</pre>
<p><em></em>No luck &#8211; this was a private IP address. Back I went to Tech Support:  &#8220;Can you please let me know what the public IP address is where this private IP is NATed to?&#8221;</p>
<p>And here&#8217;s what I got:  &#8220;I confirmed with our NOC team that the public IP Address of the DNS  server located at &#8220;Kuala Lumpur, Malaysia &#8211; VNSL&#8221; site is <em>a.b.c.d</em>.  Hope this is helpful for you.&#8221;</p>
<p>(I replaced the actual ip address above for security).  I promptly did another nslookup which showed the host name with <strong>KaulaLumpur </strong>in it. So it seemed that there was no problem on the testing side after all.  But not so fast &#8230; hostnames can be bogus!</p>
<h3>Geo-Locating a Server</h3>
<p>We had to find out where exactly this ip address was located in the world. So the ip address was plugged into <a title="Geo-locate IP" href="http://whatismyipaddress.com/ip-lookup" target="_blank">http://whatismyipaddress.com/ip-lookup </a>and it came back with:</p>
<pre>
<h2 id="Geolocation-Information">Geolocation Information</h2>
<table>
<tbody>
<tr>
<th>Country:</th>
<td>Canada <img src="http://whatismyipaddress.com/images/flags/ca.png" alt="ca flag" /></td>
</tr>
<tr>
<th>State/Region:</th>
<td>Quebec</td>
</tr>
<tr>
<th>City:</th>
<td>Montreal</td>
</tr>
<tr>
<th>Latitude:</th>
<td>45.5</td>
</tr>
<tr>
<th>Longitude:</th>
<td>-73.5833</td>
</tr>
<tr>
<th>Area Code:</th>
<td></td>
</tr>
<tr>
<th>Postal Code:</th>
<td>h3c6w2</td>
</tr>
</tbody>
</table>
</pre>
<p>The test server was actually located in Canada, while appearing to be from KaulaLampur!  No wonder our DNS servers were routing the requests to the US.</p>
<p>What seemed to be a problem with our routing, turned out to be a problem of the tool&#8217;s routing !</p>
<p>Moral of the story: Don&#8217;t trust any tool and validate, validate, validate!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=171&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/02/11/a-lesson-in-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>

		<media:content url="http://whatismyipaddress.com/images/flags/ca.png" medium="image">
			<media:title type="html">ca flag</media:title>
		</media:content>
	</item>
		<item>
		<title>A lesson in validation</title>
		<link>http://perfwork.wordpress.com/2011/01/28/a-lesson-in-validation/</link>
		<comments>http://perfwork.wordpress.com/2011/01/28/a-lesson-in-validation/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 21:44:37 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[web performance]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=163</guid>
		<description><![CDATA[Those who have worked with me know how much  I stress the importance of validation: validate your tools, workloads and measurements. Recently, an incident brought home yet again the importance of this tenet and I hope my narrating this story will prove useful to you as well. For the purposes of keeping things confidential, I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=163&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Those who have worked with me know how much  I stress the importance of validation: validate your tools, workloads and measurements. Recently, an incident brought home yet again the importance of this tenet and I hope my narrating this story will prove useful to you as well.</p>
<p>For the purposes of keeping things confidential, I will use fictional names. We were tasked with running some performance measurements on a new version of a product called X. The product team had made considerable investment into speeding things up and now wanted to see what the fruits of their labor had produced. The initial measurements seemed good but since performance is always relative, they wanted to see comparisons against another version Y. So similar tests were spun up on Y and sure enough X was faster than Y. The matter would have rested there, if it weren&#8217;t for the fact that the news quickly spread and we were soon asked for more details.</p>
<h4>Firebug to the rescue</h4>
<p>At this point, we took a pause and wondered: Are we absolutely sure X is faster than Y? I decided to do some manual validation. That night, connecting via my local ISP from home, I used firefox to do the same operations that were being performed in the automated performance tests. I launched firebug and started looking at waterfalls in the Net panel.</p>
<p>As you can probably guess, what I saw was surprising. The first request returned a page that caused a ton of object retrievals. The onload time reported by firebug was only a few seconds, yet there was no page complete time!</p>
<p>The page seemed complete and I could interact with it. But the fact that firebug could not determine Page Complete was a little disconcerting. I repeated the exercise using <a title="HttpWatch" href="http://httpwatch.com">HttpWatch</a> just to be certain and it reported exactly the same thing.</p>
<p>Time to dig down deeper. Taking a look at the individual object requests, one in particular was using the <a title="Comet model" href="http://en.wikipedia.org/wiki/Comet_(programming)" target="_blank">Comet</a> model and it never completed. On waiting a little longer, there were other requests being sent by the browser periodically. Neither of these request types however had any visual impact on the page. Since requests were continuing to be made, firebug obviously thought that the page was not complete.</p>
<h4>Page Complete or Not?</h4>
<p>This begged the question: how did the automated tests run and how did they determine when the page was done? There was a timeout set for each request, but if the request was terminating because of the timeout, we surely would have noticed since the response times reported would have been the timeout value. In fact, the response time being reported was less than half the timeout value.</p>
<p>So we started digging into the waterfalls of some of the automated test results. Lo and behold &#8211; a significant component of the response time was the <a title="Push Technology" href="http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push" target="_blank">HTTP Push</a> (also known as HTTP Streaming) one.  There were also several of the sporadic requests that were being made well after the page was complete. This resulted in arbitrary response times for Y being reported.</p>
<p>It turned out that the automated tool was actually quite sophisticated. It doesn&#8217;t just use a standard timeout for the entire request. Instead it monitors the network and if no activity is detected for 3 seconds, it considers the request complete. So it captured some of the streaming and other post-PageComplete requests and returned when the pause between them was more than 3 seconds. That is why we thought we were seeing &#8220;valid&#8221; response times which looked reasonable and had us fooled!</p>
<p>Of course, this leads to the big discussion of when exactly do we consider  a http request as complete? I don&#8217;t want to get into that now as my primary purpose of this article is to point out the importance of validation in performance testing. If we had taken the time to validate the results of the initial test runs, this problem would have been detected a long time ago and lots of cycles could have been saved (not to mention the embarrassment of admitting to others that the initial results reported were wrong !)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=163&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/01/28/a-lesson-in-validation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Tools for Web Performance Analysis</title>
		<link>http://perfwork.wordpress.com/2011/01/21/tools-for-web-performance-analysis/</link>
		<comments>http://perfwork.wordpress.com/2011/01/21/tools-for-web-performance-analysis/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 04:33:24 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=155</guid>
		<description><![CDATA[At Yahoo!, I&#8217;m currently focused on analysis of end user performance. This is a little different than what I&#8217;ve worked on in the past, which was mainly server-side performance and scalability. The new focus requires a new list of tools so I thought I&#8217;d use this post to share the tools I&#8217;ve been learning and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=155&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At Yahoo!, I&#8217;m currently focused on analysis of end user performance. This is a little different than what I&#8217;ve worked on in the past, which was mainly server-side performance and scalability. The new focus requires a new list of tools so I thought I&#8217;d use this post to share the tools I&#8217;ve been learning and using in the past couple of months.</p>
<h3>HttpWatch</h3>
<p>This made the top of my list and I use it almost every day. Although it has features very similar to <a title="Firebug" href="http://getfirebug.com" target="_blank">firebug</a>, it has two features that I find very useful &#8211; the ability to save the waterfall data directly to a csv file and a stand-alone HttpWatch Studio tool that easily loads previously saved data and reconstructs the waterfall ( I know you can <a title="Netexport" href="http://getfirebug.com/releases/extensions.html#netexport" target="_blank">export Net data</a> from firebug, but only in <a title="HAR specification" href="http://groups.google.com/group/http-archive-specification/web/har-1-2-spec" target="_blank">HAR</a> format). And best of all, HttpWatch works with both IE and Firefox. The downside is that it works only on Windows and it&#8217;s not free.</p>
<h3>Firebug</h3>
<p>This is everyone&#8217;s favorite tool and I love it too. Great for debugging as well as performance analysis. It is a little buggy though &#8211; I get frustrated when after starting Firebug, I go to a URL expecting it to capture my requests, only to find that it disappears on me. I end up keeping firebug on all the time and this can get annoying.</p>
<h3>HttpAnalyzer</h3>
<p>This is also a Windows-only commercial tool &#8211; it is similar to Wireshark. It&#8217;s primary focus is http however, so it is easier to use than Wireshark. Since it sits at the OS level, it captures all traffic, irrespective of which browser or application is making the http request. As such, it&#8217;s a great tool for analyzing non-browser based http client applications.</p>
<h3>Gomez</h3>
<p>Yet another commercial tool, but considering our global presence and the dozens of websites that need to  be tested from different locations, we need a robust, commercial tool that can meet our synthetic testing and monitoring requirements. Gomez has pretty good coverage across the world.</p>
<p>I have a love-hate relationship with Gomez. I love the fact that I can do the testing I want at both <a title="Gomez Backbone monitoring" href="http://www.gomez.com/products-solutions/products/web-performance-management/backbone-active-monitoring/" target="_blank">backbone</a> and  <a title="Gomez last mile monitoring" href="http://www.gomez.com/products-solutions/products/web-performance-management/last-mile-active-monitoring" target="_blank">last mile</a>, but I hate it&#8217;s user interface and limited data visualization. We have to resort to extracting the data using web services and do the analysis and visualization ourselves. I really can&#8217;t complain too much &#8211; since I didn&#8217;t have to build these tools myself !</p>
<h3>Command-line tools</h3>
<p>Last, but not the least, I rely heavily on standard Unix command-line tools like nslookup, DIG, curl, ifconfig, netstat, etc. And my favorite text processing tools remain sed and awk. Every time I say that, people shake their heads or roll their eyes. But we can agree to dis-agree without getting into language wars I think.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=155&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2011/01/21/tools-for-web-performance-analysis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Starting anew</title>
		<link>http://perfwork.wordpress.com/2010/10/22/starting-anew/</link>
		<comments>http://perfwork.wordpress.com/2010/10/22/starting-anew/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 00:31:42 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[sun]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=150</guid>
		<description><![CDATA[After 18 years at Sun (the last 6 at Oracle), I finally called it quits. Last week, I began anew at Yahoo!  I will still be focused on performance, but this time on end user performance. At Sun, we were extremely focused on server-side performance. Our primary metric was throughput. We worried about scalability. Does [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=150&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After 18 years at Sun (the last 6 at Oracle), I finally called it quits. Last week, I began anew at Yahoo!  I will still be focused on performance, but this time on end user performance.</p>
<p>At Sun, we were extremely focused on server-side performance. Our primary metric was throughput. We worried about scalability. Does Solaris scale on the maximum number of CPUs/threads that our largest system had ? What about the JVM ? And the appserver, and the webserver &#8230; you get the idea.</p>
<p>In the web world, things are quite different. The primary metric is response time. One could care less what the throughput on a particular server is &#8211; tens of thousands of servers are being deployed anyway. This mindset and architecture fascinate me. How do these large internet sites handle performance ? So I decided to find out. What better way, then to be part of one of the sites that sees the most traffic on the internet (<a href="http://finance.yahoo.com/news/comScore-Media-Metrix-Ranks-prnews-260479378.html?x=0&amp;.v=1" target="_blank">see ComScore report)</a>.</p>
<p>I am part of the <a title="Exceptional Performance" href="http://http://developer.yahoo.com/performance/" target="_blank">Exceptional Performance Team</a> at Yahoo! This is the team that first brought YSlow to the community and is responsible for a whole host of tools to measure and analyze performance. I hope to contribute to this effort as well and of course, I will continue to blog about interesting performance issues that I encounter. Please do let me know if there are particular topics you would like to see on the Exceptional Performance blog.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/150/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=150&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2010/10/22/starting-anew/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Velocity 2010 Impressions</title>
		<link>http://perfwork.wordpress.com/2010/06/24/velocity-2010-impressions/</link>
		<comments>http://perfwork.wordpress.com/2010/06/24/velocity-2010-impressions/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 05:14:57 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[velocityconf]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=147</guid>
		<description><![CDATA[Velocity 2010 came to an end today. I attended all 3 days &#8211; it was a great conference. I did not attend last year, but the crowds this year must have been at least 3 times that of 2008, when I first presented at Velocity. Here are some of my thoughts on the conference. Performance [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=147&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Velocity 2010 came to an end today. I attended all 3 days &#8211; it was a great conference. I did not attend last year, but the crowds this year must have been at least 3 times that of 2008, when I first presented at Velocity. Here are some of my thoughts on the conference.</p>
<h3><strong>Performance</strong></h3>
<p>Being a performance person, I am naturally biased towards performance topics. So, I&#8217;ll cover this first. All of the performance sessions at the conference can be summed up thus :</p>
<p><strong>The biggest performance issue is the time it takes for the browser to load a web page (aka page load times). Here is technique <em>x</em> and trick <em>y</em> and hack <em>z</em> to help you fix this problem.</strong></p>
<p>I learned a lot about how to optimize css, javascript, http headers etc. But I was still disappointed that there was hardly a whisper about how to optimize the server side. The claim is that of the total response time, the server takes tens or at most 100&#8242;s of milliseconds where as the client takes several seconds.  So where do you want to focus your energy on ? I can accept that. But that seems to pre-suppose that all web applications have a scalable architecture and have solved their server-side performance and scalability issues. I find that a little hard to believe.</p>
<h3><strong>Operations</strong></h3>
<p>As expected, the details of how Facebook, Yahoo and twitter run their operations was of great interest to the audience. With so much media now being served, I was surprised to see only one session on optimizing Video serving and even that was not well attended. There was hardly any talk about optimizing infrastructure. I can&#8217;t help wondering why web operations wouldn&#8217;t be interested in optimizing their infrastructure costs. After all, we&#8217;ve been hearing a lot lately about the cost of power, how data centers are going green, more efficient etc. Aren&#8217;t these things applicable to the web world as well (not just enterprise IT) ? Even more surprising, a very small portion of the audience said they were deployed on the cloud.</p>
<p><a href="http://perfdynamics.com/">Neil Gunther</a> and I presented a session <a href="http://perfdynamics.com"></a> on <a href="http://en.oreilly.com/velocity2010/public/schedule/detail/13046">Hidden Scalability Gotchas in Memcached and Friends.</a></p>
<p>We had a great audience with some folks squatting on the floor in the front and a standing-room only audience in the back. There was tremendous interest in applying the <a href="http://www.perfdynamics.com/Manifesto/USLscalability.html">USL Model</a> to accurate data to quantify scalability. If anyone has additional feedback or comments, I would love to hear them.</p>
<h3><strong>Tools</strong></h3>
<p>I was blown away by the plethora of tools, a good many of which I had never heard of. Firebug with various add-ons (YSlow, PageSpeed) set the trend on browser-side monitoring and now even commercial vendors have versions of their product (available for free !) to do the same. This is great news for developers. If you haven&#8217;t heard of <a href="http://httpwatch.com">HttpWatch</a>, <a title="Show Slow" href="http://showslow.com">showslow.com</a>, <a title="WebPageTest" href="http://webpagetest.org">webpagetest</a>, check them out.DynaTrace announced a free end user response time monitoring tool as well.</p>
<h3><strong>Products</strong></h3>
<p>One real cool product I came across was <a href="http://www.strangeloopnetworks.com/">Strangeloop</a> &#8211; this is an appliance that sits in front of your web server and optimizes the response page. It&#8217;s amazing that it can do so much javascript optimization resulting in dramatic reduction in latency. I can&#8217;t help wondering why browsers don&#8217;t do this ? Surely, Mozilla and Google have enough smart engineers to come up with a an optimized javascript interpreter. It will be interesting to watch.</p>
<p>The usual monitoring vendors were all there &#8211; Keynote, Gomez (now part of Compuware), Webmetrics, AppDynamics etc.</p>
<h3><strong>Misc</strong>.</h3>
<p>Tuesday was billed as &#8220;Workshop&#8221; day. However, there really weren&#8217;t any workshops &#8211; they were all just regular sessions just longer. I guess it&#8217;s hard to do workshops with several hundred people in the room. If Velocity really wants to do workshops, they need to have at least a dozen of them scheduled and they need to be longer.</p>
<p>On the whole, the conference was a great success, with sold out crowds, well attended and delivered sessions and lots of new products. Hope I can make it to Velocity 2011.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=147&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2010/06/24/velocity-2010-impressions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	</item>
		<item>
		<title>Quick Throughput Experiment</title>
		<link>http://perfwork.wordpress.com/2010/06/21/quick-throughput-experiment/</link>
		<comments>http://perfwork.wordpress.com/2010/06/21/quick-throughput-experiment/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 05:05:01 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[throughput]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=134</guid>
		<description><![CDATA[How to conduct a performance test to measure maximum throughput<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=134&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the first things we performance engineers do with a new server application is to conduct a quick throughput experiment. The goal is to find the maximum throughput that the server can deliver. In many cases, it is important that the server be capable of delivering this throughput with a certain response time bound. Thus, we always qualify the throughput with an average and 90th percentile response time (i.e. we want 90% of the requests to execute within the stated time). Any decent workload should therefore measure both the throughput and response time.</p>
<p>Let us assume we have such a workload. How best to estimate the maximum throughput within the required response time bounds ? The easiest way to conduct such an experiment is to run a bunch of clients (emulated users, virtual users or vusers) to drive load against the target server without any think time. Here is how the flow from a vuser will look like :</p>
<pre>Create Request ==&gt; Send Request ==&gt; Receive Response ==&gt; Log statistics</pre>
<p>This sequence of operations is executed repeatedly (without any pauses in between i.e. no think times) for a sufficient length of time to get statistically valid results. So, to find the maximum throughput, run a series of tests, each time increasing the number of clients. Simple, isn&#8217;t it ?</p>
<p>A little while ago, I realized that if one doesn&#8217;t have the proper training, this isn&#8217;t that simple. I came across such an experiment with the following results :</p>
<table style="page-break-before:always;" border="1" cellspacing="3" cellpadding="3" width="262">
<col width="96"></col>
<col width="143"></col>
<tbody>
<tr valign="TOP">
<th width="96">VUsers</th>
<th width="143">Throughput</p>
<p>Requests/sec</th>
</tr>
<tr valign="TOP">
<td width="96" height="22">5000</td>
<td width="143">88318</td>
</tr>
<tr valign="TOP">
<td width="96">10000</td>
<td width="143">88407</td>
</tr>
<tr valign="TOP">
<td width="96">20000</td>
<td width="143">88309</td>
</tr>
<tr valign="TOP">
<td width="96">25000</td>
<td width="143">88429</td>
</tr>
<tr valign="TOP">
<td width="96">30000</td>
<td width="143">88392</td>
</tr>
<tr valign="TOP">
<td width="96">35000</td>
<td width="143">88440</td>
</tr>
</tbody>
</table>
<p>What is wrong with these results ?<br />
Firstly, the throughput is roughly the same at all loads. This probably means that the system saturated even below the base load level of 5,000 Vusers. Recall, that the workload does not have a think time. When you have this many users repeatedly submitting requests, the server is certain to be overloaded. I must mention that the server in this case is a single system with 12 cores having hyper-threading enabled. A multi-threaded server application typically will use one or more threads to receive requests from the network, then hand the request to a worker thread for processing. Considering the context-switching, waiting, locking etc. one can assume that at most one can run 4x the number of  cores or in this case about 96 server threads. Since each Vuser submits a request and waits for a response, it probably requires 2-2.5x the number of Vusers as the number of server threads to saturate a system. Using this rule of thumb, one would need to run a maximum of 200-250 Vusers.</p>
<h3>Throughput with Correct Vusers</h3>
<p>After I explained the above, the tests were re-run with the following results:</p>
<table style="page-break-inside:avoid;" border="1" cellspacing="3" cellpadding="3" width="263">
<col width="95"></col>
<col width="145"></col>
<tbody>
<tr valign="TOP">
<td width="95"><strong>VUsers</strong></td>
<td width="145"><strong>Throughput</strong></td>
</tr>
<tr valign="TOP">
<td width="95">1</td>
<td width="145">1833</td>
</tr>
<tr valign="TOP">
<td width="95" height="38">10</td>
<td width="145">18226</td>
</tr>
<tr valign="TOP">
<td width="95">50</td>
<td width="145">74684</td>
</tr>
<tr valign="TOP">
<td width="95">100</td>
<td width="145">86069</td>
</tr>
<tr valign="TOP">
<td width="95">200</td>
<td width="145">88455</td>
</tr>
<tr valign="TOP">
<td width="95">300</td>
<td width="145">88375</td>
</tr>
</tbody>
</table>
<p>Notice that the maximum throughput is still nearly the same as from the previous set, but it has been achieved with a much lower number of Vusers (aka clients). So does it really matter ? Doesn&#8217;t it look better to say that the server could handle 35000 connections rather than 300 ? No, it doesn&#8217;t. The reason becomes obvious if we take a look at the response times.</p>
<h3>The Impact of Response Times</h3>
<p>The graph below shows how the 90% Response Time varied for both sets of experiments :</p>
<p style="text-align:center;"><a href="http://perfwork.files.wordpress.com/2010/06/thrutestrt1_html_6ffa880c.gif"><img class="size-full wp-image-138 aligncenter" title="90% RT for large Vusers" src="http://perfwork.files.wordpress.com/2010/06/thrutestrt1_html_6ffa880c.gif?w=277&#038;h=241" alt="" width="277" height="241" /></a></p>
<p style="text-align:center;"><a href="http://perfwork.files.wordpress.com/2010/06/thrutestrt2_html_450a43e1.gif"><img class="size-full wp-image-139 aligncenter" title="90% Response Time (Minimal Vusers)" src="http://perfwork.files.wordpress.com/2010/06/thrutestrt2_html_450a43e1.gif?w=277&#038;h=243" alt="90% Response Time (Minimal Vusers)" width="277" height="243" /></a></p>
<p>The response times for the first experiment with very large number of Vusers ranges in the hundreds of millisecs. When the number of Vusers was pared down to just reach saturation, the server responded hundred times faster ! Intuitively too, this makes sense. If the server is inundated with requests, they are just going to queue up. The longer a request waits for processing, the larger is it&#8217;s response time.</p>
<h3>Summary</h3>
<p>When doing throughput performance experiments, it is important to take into consideration the type of server application, the hardware characteristics etc. and run appropriate load levels. Otherwise, although you may be able to find out what the maximum throughput is, you will have no idea what the response time is.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&amp;blog=9610556&amp;post=134&amp;subd=perfwork&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2010/06/21/quick-throughput-experiment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>

		<media:content url="http://perfwork.files.wordpress.com/2010/06/thrutestrt1_html_6ffa880c.gif" medium="image">
			<media:title type="html">90% RT for large Vusers</media:title>
		</media:content>

		<media:content url="http://perfwork.files.wordpress.com/2010/06/thrutestrt2_html_450a43e1.gif" medium="image">
			<media:title type="html">90% Response Time (Minimal Vusers)</media:title>
		</media:content>
	</item>
	</channel>
</rss>
