<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Performance Blog</title>
	
	<link>http://perfwork.wordpress.com</link>
	<description>On Workloads, Performance and Open Source</description>
	<lastBuildDate>Mon, 21 May 2012 05:18:08 +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&amp;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" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ShantiBlog" /><feedburner:info uri="shantiblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://perfwork.wordpress.com/?pushpress=hub" /><item>
		<title>Measuring web application performance</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/DPG1CQ_zHCg/</link>
		<comments>http://perfwork.wordpress.com/2012/04/22/measuring-web-application-performance/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 02:16:47 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[loadtesting]]></category>
		<category><![CDATA[response time]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[throughput]]></category>
		<category><![CDATA[web performance]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=226</guid>
		<description><![CDATA[Going by the many posts in various LinkedIn groups and blogs, there seems to be some confusion about how to measure and analyze a web application&#8217;s performance. This article tries to clarify the different aspects of web performance and how to go about measuring it, explaining key terms and concepts along the way. Web Application [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=226&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Going by the many posts in various LinkedIn groups and blogs, there seems to be some confusion about how to measure and analyze a web application&#8217;s performance. This article tries to clarify the different aspects of web performance and how to go about measuring it, explaining key terms and concepts along the way.</p>
<p><strong>Web Application Architecture</strong></p>
<p>The diagram below shows a high-level view of typical architectures of web applications.</p>
<p><a href="http://testnscale.com/blog/wp-content/uploads/2011/07/WebAppArch2.jpg"><img title="WebAppArch" src="http://testnscale.com/blog/wp-content/uploads/2011/07/WebAppArch2-300x220.jpg" alt="" width="300" height="220" /></a></p>
<p>The simplest applications have the web and app tiers combined while more complex ones may have multiple application tiers (called &#8220;middleware&#8221;) as well as multiple datastores.</p>
<p>The <em><strong>Front end</strong></em> refers to the web tier that generates the html response for the browser.</p>
<p>The <em><strong>Back end</strong></em> refers to the server components that are responsible for the business logic.</p>
<p>Note that in architectures where a single web/app server tier is responsible for both the front and back ends, it is still useful to think of them as logically separate for the purposes of performance analysis.</p>
<p><strong>Front End Performance</strong></p>
<p>When measuring front end performance, we are primarily concerned with understanding the response time that the user (sitting in front of a browser) experiences. This is typically measured as the time taken to load a web page. Performance of the front end depends on the following:</p>
<ul>
<li>Time taken to generate the base page</li>
<li>Browser parse time</li>
<li>Time to download all of the components on the page (css,js,images,etc.)</li>
<li>Browser render time of the page</li>
</ul>
<p>For most applications, the response time is dominated by the 3rd bullet above i.e. time spent by the browser in retrieving all of the components on a page. As pages have become increasingly complex, their sizes have mushroomed as well &#8211; it is not uncommon to see pages of 0.5 MB or more. Depending on where the user is located, it can take a significant amount of time for the browser to fetch components across the internet.</p>
<p><strong>Front end Performance Tools</strong></p>
<p>Front-end performance is typically viewed as waterfall charts produced by tools such as the Firebug Net Panel. During development, firebug is an invaluable tool to understand and fix client-side issues. However, to get a true measure of end user experience on production systems, performance needs to be measured from points on the internet where your customers typically are. Many tools are available to do this and they vary in price and functionality. Do your research to find a tool that fits your needs.</p>
<p><strong>Back End Performance</strong></p>
<p>The primary goal of measuring back end performance is to understand the maximum <em><strong>throughput</strong></em> that it can sustain.Traditionally, enterprises perform &#8220;<em>load testing</em>&#8221; of their applications to ensure they can scale. I prefer to call this &#8220;<em>scalability testing</em>&#8220;. Test clients drive load via bare-bones HTTP clients and measure the throughput of the application i.e. the number of requests per second they can handle. To increase the throughput, the number of client drivers need to be increased until the point where throughput stops to increase or worse stops to drop-off.</p>
<p>For complex multi-tier architectures, it is beneficial to break-up the back end analysis by testing the scalability of individual tiers. For example,  database scalability can be measured by running a workload just on the database. This can greatly help identify problems and also provides developers and QA engineers with tests they can repeat during subsequent product releases.</p>
<p>Many applications are thrown into production before any scalability testing is done. Things may seem fine until the day the application gets hit with increased traffic (good for business!). If the application crashes and burns because it cannot handle the load, you may not get a second chance.</p>
<p><strong>Back End Performance Tools</strong></p>
<p>Numerous load testing tools exist with varying functionality and price. There are also a number of open source tools available. Depending on resources you have and your budget, you can also outsource your entire scalability testing.</p>
<p><strong>Summary</strong></p>
<p>Front end performance is primarily concerned with measuring end user response times while back end performance is concerned with measuring throughput and scalability.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/226/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=226&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2012/04/22/measuring-web-application-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>

		<media:content url="http://testnscale.com/blog/wp-content/uploads/2011/07/WebAppArch2-300x220.jpg" medium="image">
			<media:title type="html">WebAppArch</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2012/04/22/measuring-web-application-performance/</feedburner:origLink></item>
		<item>
		<title>Response time metric for SLA</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/XXSLuZB5e1E/</link>
		<comments>http://perfwork.wordpress.com/2012/04/09/response-time-metric-for-sla/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 17:32:44 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[measurement]]></category>
		<category><![CDATA[perceived performance]]></category>
		<category><![CDATA[response time]]></category>
		<category><![CDATA[SLA]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=221</guid>
		<description><![CDATA[Service Level Agreements (SLAs) usually specify a response time criteria that must be met. Although SLAs can have a wide range of metrics like throughput, up time, availability etc., we will focus on response times in this article. We often hear phrases like the following : &#8220;The response time was 5 seconds&#8221; &#8220;This product&#8217;s performance [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=221&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Service Level Agreements (SLAs) usually specify a response time criteria that must be met. Although SLAs can have a wide range of metrics like throughput, up time, availability etc., we will focus on response times in this article.</p>
<p>We often hear phrases like the following :</p>
<ul>
<li>&#8220;The response time was 5 seconds&#8221;</li>
<li>&#8220;This product&#8217;s performance is much worse than slowpoke&#8217;s. It takes longer to respond.&#8221;</li>
<li>&#8220;Our whizbang product can perform 100 transactions/sec with a response time of 10 seconds or less&#8221;</li>
</ul>
<p>Do you see anything wrong in these statements? Although they sound fine for general conversation, anyone interested in performance should really be asking what exactly do they mean.</p>
<p>Let&#8217;s take the first statement above and make the assumption that it refers to a particular page in a web application. When someone says that the response time is 5 seconds, does it mean that when this user typed in the URL of this page, the browser took 5 seconds to respond? Or does it mean that in an automated test repeatedly accessing this page, the <em>average</em> response time was 5 seconds? Or perhaps, the median response time was 5 seconds?</p>
<p>You get the idea. For some reason, people tend to talk loosely about response times. Without going into  details of how to measure the response time (that&#8217;s a separate topic), this article will focus on what is a meaningful response time metric.</p>
<p>For purposes of this discussion, let us assume we are measuring the response time of a transaction (which can be anything &#8211; web, database, cache etc.) What is the most meaningful measure for the response time of a transaction?</p>
<h3>Mean Response Time</h3>
<p>This is the most common measure of response time, but alas, usually is the most flawed as well. The mean or average response time simply adds up all the individual response times taken from multiple measurements and divides it by the number of samples to get an average. This may be fine if the measurements are fairly evenly distributed over a narrow range as in Figure 1.</p>
<div>
<dl>
<dt><img title="constant_RT" src="http://testnscale.com/blog/wp-content/uploads/2011/02/constant_RT.gif" alt="Steady Response Times" width="365" height="170" /></dt>
<dd>Figure 1: Steady Response Times</dd>
</dl>
</div>
<div>
<dl>
<dt><img title="Varying Response Times" src="http://testnscale.com/blog/wp-content/uploads/2011/02/variable_RT-300x162.gif" alt="Figure 2: Varying Response Times" width="300" height="162" /></dt>
<dd>Figure 2: Varying Response Times</dd>
</dl>
</div>
<h3></h3>
<h3></h3>
<h3></h3>
<h3></h3>
<h3></h3>
<h3></h3>
<p>But if the measurements vary quite a bit over a large range like in Figure 2, the average response time is not meaningful. Both figures have the same scale and show response times on the y axis for samples taken over a period of time (x axis).</p>
<h3>Median Response Time</h3>
<p>If the average is not a good representation of a distribution, perhaps the median is? After all, the median marks the 50th percentile of a distribution. The median is useful when the response times do have a normal distribution but have a few outliers. In this case, the median helps to weed out the outliers.The key here is <em>few</em> outliers. It is important to realize that if 50% of the transactions are within the specified time, that means the remaining 50% have a <em>higher</em> response time.  Surely, a response time specification that leaves out half the population cannot be a good measure.</p>
<h3>90th or 95th percentile Response Time</h3>
<p>In standard benchmarks, it is common to see 90th percentile response times used. The benchmark may specify that the 90th percentile response time of a transaction should be within <em>x</em> seconds. This means that only 10% of the transactions have a response time higher than x seconds and can therefore be a meaningful measure. For web applications, the requirements are usually even higher &#8211; after all, if 10% of your users are dissatisfied with the site performance, that could be a significant number of users. Therefore, it is common to see 95th percentile used for SLAs in web applications.</p>
<p>A word of caution &#8211; web page response times can vary dramatically if measured at the last mile (i.e. real users computers that are connected via cable or DSL to the internet). Figure 3 shows the distribution of response times for such a measurement.</p>
<div>
<dl>
<dt><img title="RT_histogram" src="http://testnscale.com/blog/wp-content/uploads/2011/02/RT_histogram-300x143.gif" alt="Figure 3: Response Time Histogram" width="300" height="143" /></dt>
<dd>Figure 3: Response Time Histogram</dd>
</dl>
</div>
<p>It uses the same data as in Figure 2. The mean response time for this data set is 12.9 secs and the median is even lower at 12.3 secs. Clearly neither of these measures covers any significant range of the actual response times. The 90th percentile is 17.3 and the 95th is 18.6. These are much better measures for the response time of this distribution and will work better as the SLA.</p>
<p>To summarize, it is important to look at the distribution of response times before attempting to define an SLA. Like many other metrics, a one size fits all approach does not work. Response time measurements on the server side tend to vary a lot less than on the client. A 90th or 95th percentile response time requirement is a good choice to ensure that the vast majority of clients are covered.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=221&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2012/04/09/response-time-metric-for-sla/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>

		<media:content url="http://testnscale.com/blog/wp-content/uploads/2011/02/constant_RT.gif" medium="image">
			<media:title type="html">constant_RT</media:title>
		</media:content>

		<media:content url="http://testnscale.com/blog/wp-content/uploads/2011/02/variable_RT-300x162.gif" medium="image">
			<media:title type="html">Varying Response Times</media:title>
		</media:content>

		<media:content url="http://testnscale.com/blog/wp-content/uploads/2011/02/RT_histogram-300x143.gif" medium="image">
			<media:title type="html">RT_histogram</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2012/04/09/response-time-metric-for-sla/</feedburner:origLink></item>
		<item>
		<title>Scalability Testing</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/Iuwxe7XbcnM/</link>
		<comments>http://perfwork.wordpress.com/2012/03/14/scalability-testing/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 19:04:34 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=218</guid>
		<description><![CDATA[We often hear the terms Load Testing or Performance Testing, but no one talks much about Scalability Testing. Before I go further, let me define these terms so you know what I am talking about : Load Testing refers to the kind of testing usually done by QA organizations to ensure that the application can handle a certain load [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=218&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We often hear the terms <em>Load Testing</em> or <em>Performance Testing</em>, but no one talks much about Scalability Testing. Before I go further, let me define these terms so you know what I am talking about :</p>
<ul>
<li><strong><em>Load Testing</em></strong> refers to the kind of testing usually done by QA organizations to ensure that the application can handle a certain load level. Criteria are set to ensure that releases of a product meet certain conditions like the number of users they can support while delivering a certain response time.</li>
<li><strong><em>Performance Testing</em></strong> on the other hand, refers to testing done to analyze and improve the performance of an application. The focus here is on optimization of resource consumption by analyzing data collected during testing. Performance Testing to a certain extent should be done by developers but more elaborate, large scale testing may be conducted by a separate performance team. In some organizations, the performance team is a part of the QA function.</li>
<li><strong><em>Scalability Testing</em></strong> refers to performance testing that is focused on understanding how an application scales as it is deployed on larger systems and/or more systems or as more load is applied to it. The goal is to understand at what point the application stops scaling and identify the reasons for this. As such scalability testing can be viewed as a kind of performance testing.</li>
</ul>
<p>In this article, we will consider how scalability testing should be done to ensure that the results are meaningful.</p>
<h4><strong>Workload Definition</strong></h4>
<p>The first requirement for any performance testing is a well-designed workload. See my <a title="Workload Design Paper" href="http://faban.org/docs/WorkloadDesign.pdf" target="_blank">Workload Design paper</a> for details on how to properly design a workload. Many developers and QA engineers typically craft a workload quickly by focusing on a couple of different operations (e.g. if testing a web application, a recording tool is used to create one or two scenarios). I will point out the pitfalls of this method in another post. So take care while creating your workload. Extra time invested in this step will more than pay off in the long run. Remember, your test results are only as good as the tests you create!</p>
<h4>Designing Scalability Tests</h4>
<p>Scalability tests should be planned and executed in a systematic manner to ensure that all relevant information is collected. The parameter by which load is increased obviously depends on the type of app &#8211; for web apps, this would typically be the number of simultaneous users making requests of the site. Think about what other parameters might change for your application. If the application accesses a database, will the size of the db change in some relation to the number of users accessing it? If it uses a caching tier, might it be reasonable to expect that the size of this cache will expand ? Consider the data accessed by your workload &#8211; how is this likely to change? Both the data generator and load generator drivers need to be implemented in a way that supports workload and data scaling.</p>
<h4>Collecting Performance Data</h4>
<p>When running the tests, ensure you can collect sufficient performance metrics so as to be able to understand what exactly is happening on the application infrastructure. One set of metrics is from the system infrastructure &#8211; cpu, memory, swap, network and disk i/o data. Another is from the software infrastructure &#8211; web,application, caching (memcached) and database servers all provide access to performance data. Don&#8217;t forget to collect data on the load driver systems as well. I have seen many a situation in which the driver ran out of memory or swap and it took awhile to figure this out because no one was looking at the driver stats ! All performance metrics should be collected for the same duration as the test run.</p>
<h4>Running Scalability Tests</h4>
<p>With planning done, it is time to run the performance tests. You want to start at a comfortable scale factor &#8211; say 100 users and increment by the same factor every time (e.g. 100 users at a time). Some tools let you run a single test while varying the load &#8211; although this may be acceptable for load testing, I would discourage such short-cuts for scalability testing. The goal is not just to get to the maximum load but to understand how the system behaves at every step. Without the detailed performance data, it is difficult to do scalability analysis. Do scaling runs to a point a little beyond when the system stops scaling (i.e throughput stays flat or worse starts to fall) or you run out of system resources.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/218/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=218&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2012/03/14/scalability-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2012/03/14/scalability-testing/</feedburner:origLink></item>
		<item>
		<title>Load Testing: Emulated or real browsers?</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/w-a8PS-9d0c/</link>
		<comments>http://perfwork.wordpress.com/2012/02/15/load-testing-emulated-or-real-browsers/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 23:24:46 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=212</guid>
		<description><![CDATA[Enterprise applications are typically tested for load, performance and scalability using a driver that emulates a real client by sending requests to the applications similar to what a real user would. For web applications, the client is usually a browser and the driver is a simple Http client. The emulated http clients can be extremely [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=212&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Enterprise applications are typically tested for load, performance and scalability using a driver that emulates a real client by sending requests to the applications similar to what a real user would. For web applications, the client is usually a browser and the driver is a simple Http client. The emulated http clients can be extremely light-weight allowing one to run several hundred or even thousand (depending on the think time) driver agents on a single box. Of course, tools vary widely &#8211; some tools can be quite heavy-weight so it&#8217;s important to do a thorough evaluation first. But I digress.</p>
<p>As web pages got larger and incorporated more components, performance testing tools started including a recording tool which could capture the http requests as a user navigates the application using a regular browser. The driver agent would then &#8220;playback&#8221; the captured requests. Many tools also allow modification of the requests to allow for unique logins, cookies etc. to correctly emulate multiple users. Such a &#8220;record-and-playback&#8221;  methodology  is part of most enterprise load testing tools.</p>
<p>Today&#8217;s web applications are complex and sophisticated with tons of javascript that track and handle all sorts of mouse movements, multiple XHR  requests on the same page, persistent connections using the Comet model, etc. If javascript generates dynamic requests, composing the URLs on the fly, the recorded scripts will fail. Of course, if the performance testing tool provides a rich interface allowing the tester full flexibility to modify the load driver, it is still possible to create a driver that can drive these rich web2.0 applications.</p>
<p><strong>Browser Agents</strong></p>
<p>Increasingly, many in the performance community are abandoning the old-style http client drivers in favor of browser agents i.e. an agent/driver that runs an actual full-featured browser. The obvious advantage to going this route is the dramatic simplification of test scripts &#8211; you can give it a single URL and the browser will automatically fetch all of the components on the page.  If the page contains javascript that in turn generates more requests &#8211; no problem. The browser will handle it all.</p>
<p><strong>But at what cost?</strong></p>
<p>If you&#8217;re thinking that this sounds too easy, what&#8217;s the catch &#8230; you&#8217;re right. There is a price to pay for this ease of use in both CPU and memory resources on the test driver systems. A real browser can consume 10s to 100s of megabytes of memory and significant CPU resources as well. And this is just for driving a single user! Realistically, how many browsers can you run on a typical machine, especially considering that driver boxes are typically older, slower hardware?</p>
<p>So what can we do to mitigate this problem?</p>
<p><strong>Emulated Browsers with Real Javascript Engine</strong></p>
<p>A compromise solution is to use a thin browser that does not have all of the functionality of a real browser but does include a real javascript engine. An example is <a title="HtmlUnit" href="http://htmlunit.sourceforge.net" target="_blank">HtmlUnit</a>, which is a Java library that is lighter-weight than a real browser like IE or Firefox. The caveat here is that your performance testing tool must provide the capability to make calls to arbitrary third-party libraries. Many tools have very simplistic scripting capability which may not allow using HtmlUnit.</p>
<p><strong>Summary</strong></p>
<p>Many people seem to think that just because they have javascript or XHR requests, they need to use a real browser for scalability testing. This is untrue &#8211; in almost all but the most complex cases, you can still use an emulated client (the exception is if you have requests that are generated from javascript based on complex logic that is not easy to reproduce). Keep in mind that the purpose of load/scalability testing is to measure throughput. To do so, you want the lightest possible client so you can run the maximum number of emulated users with the minimum amount of hardware. Using a real browser should be the last option to consider.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=212&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2012/02/15/load-testing-emulated-or-real-browsers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2012/02/15/load-testing-emulated-or-real-browsers/</feedburner:origLink></item>
		<item>
		<title>Re-launched Faban site</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/kb2qwi8rsiU/</link>
		<comments>http://perfwork.wordpress.com/2012/02/06/re-launched-faban-site/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 19:24:48 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=210</guid>
		<description><![CDATA[I finally found some time to re-design the Faban site. For those of you who haven&#8217;t heard of it, Faban is a performance test automation tool and framework. The new site is obviously not the best in terms of design, aesthetics, consistency, etc. but at least it didn&#8217;t take a whole lot of time. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=210&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I finally found some time to re-design the <a title="Faban" href="http://faban.org" target="_blank">Faban site</a>. For those of you who haven&#8217;t heard of it, Faban is a performance test automation tool and framework.</p>
<p>The new site is obviously not the best in terms of design, aesthetics, consistency, etc. but at least it didn&#8217;t take a whole lot of time.</p>
<p>The one thing that I have found hard to learn is css. That&#8217;s probably one of the reasons I have put off doing the site for so long. But guess what? I still don&#8217;t know much css and yet was able to fairly quickly put together this site. Many thanks go to <a href="http://freehtml5templates.com" target="_blank">http://freehtml5templates.com</a>. I started with the <a href="http://freehtml5templates.com/cleancontent-html5-and-css3-template/" target="_blank">CleanContent</a> template and tweaked it a bit to incorporate the banner and colors. But beyond that, it was just a matter of editing the text. I used <a href="http://www.seamonkey-project.org/" target="_blank">SeaMonkey</a> for that as I have found it to be pretty safe (unlike Microsoft Word) in not adding a whole lot of junk to the html. My goal was to keep the html really simple &#8211; check it out.</p>
<p>The Documentation style is now completely different &#8211; I did not dare touch it. There are just too many pages and I don&#8217;t want to go edit them. If someone has a suggestion on how  to improve the site without too much mucking around (or better yet provide the code!) I&#8217;d happy to go make improvements.</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=210&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2012/02/06/re-launched-faban-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2012/02/06/re-launched-faban-site/</feedburner:origLink></item>
		<item>
		<title>Estimating maximum users that an application can support</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/1odPxHe3g_s/</link>
		<comments>http://perfwork.wordpress.com/2012/02/01/estimating-maximum-users-that-an-application-can-support/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 22:57:51 +0000</pubDate>
		<dc:creator>perfwork</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[arrival rate]]></category>
		<category><![CDATA[little's law]]></category>
		<category><![CDATA[maximum throughput]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[simultaneous users]]></category>

		<guid isPermaLink="false">http://perfwork.wordpress.com/?p=203</guid>
		<description><![CDATA[When load testing an application, the first set of tests should focus on measuring the maximum throughput. This is especially true of multi-user, interactive applications like web applications. The maximum throughput is best measured by running a few emulated users with zero think time. This means that each emulated user sends a request, receives a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=203&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When load testing an application, the first set of tests should focus on measuring the maximum throughput. This is especially true of multi-user, interactive applications like web applications. The maximum throughput is best measured by running a few emulated users with zero think time. This means that each emulated user sends a request, receives a response and immediately loops back to send the next request. Although this is artificial, it is the best way to quickly determine the maximum performance of the server infrastructure.<br />
&lt;h2&gt;Little&#8217;s Law&lt;/h2&gt;<br />
Once you have that throughput (say X), we can use <a title="Little's Law" href="http://en.wikipedia.org/wiki/Little%27s_law" target="_blank">Little&#8217;s Law</a> to estimate the number of real simultaneous users that the application can support. In simple terms, Little&#8217;s Law states that :</p>
<p>N = X  / λ</p>
<p>where N is the number of concurrent users,  λ is the average arrival rate and X is the throughput. Note that the arrival rate is the inverse of the inter-arrival time i.e. the time between requests.</p>
<p>To understand this better, let&#8217;s take a concrete example from some tests I ran on a basic PHP script deployed in an apache server. The maximum throughput obtained was 2011.763 requests/sec with an average response time of 6.737 ms, an average think time of 0.003 secs when running 20 users. The arrival rate is the inverse of the inter-arrival time which is the sum of the response time and think time. In this case, X is .2011.763 and λ is 1/(0.006737 + 0.003). Therefore,</p>
<p>N = X / λ  = 2011.763 * 0.009737 = 19.5885</p>
<p>This is pretty close to the actual number of emulated users which is 20.</p>
<p>&nbsp;</p>
<h2>Estimating Concurrent Users</h2>
<p>This is all well and good, but how does this help us in estimating the number of real concurrent users (with non-zero think time) that the system can support ? Using the same example as above, let us assume that if this were a real application, the average inter-arrival time is 5 seconds. Using Little&#8217;s Law, we can now compute N as :</p>
<p>N = X /λ  = 2011.763 *  5 = 10058 users.</p>
<p>In other words, this application running on this same infrastructure can support more than 10,000 concurrent users with an inter-arrival time of 5 seconds.</p>
<p>What does this say for think times ? If we assume that the application (and infrastructure) will continue to perform in the same manner as the number of connected users increase (i.e it maintains the average response time of 0.006737 seconds), the the average think time is 4.993 seconds. If the response time degrades as load goes up (which is usually the case after a certain point), then the number of users supported will also correspondingly decrease.</p>
<p>A well-designed application can scale linearly to support 10&#8242;s or 100&#8242;s of thousands of users. In the case of large websites like Facebook , Ebay and Flickr, the applications scale to handle millions of users. But obviously, these companies have invested tremendously to ensure that their applications and software infrastructure can scale.</p>
<p>Little&#8217;s Law can be used to estimate the <em>maximum</em> number of concurrent users that your application can support. As such, it is a handy tool to get a quick, rough idea. For example, if Little&#8217;s Law indicates that the application can only support 10,000 users but your target is really 20,000 users, you know you have work to do to improve basic performance.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/perfwork.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/perfwork.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/perfwork.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/perfwork.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/perfwork.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/perfwork.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/perfwork.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/perfwork.wordpress.com/203/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=perfwork.wordpress.com&#038;blog=9610556&#038;post=203&#038;subd=perfwork&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://perfwork.wordpress.com/2012/02/01/estimating-maximum-users-that-an-application-can-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2012/02/01/estimating-maximum-users-that-an-application-can-support/</feedburner:origLink></item>
		<item>
		<title>Olio on github</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/lFFdCaj9lyQ/</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&#038;blog=9610556&#038;post=196&#038;subd=perfwork&#038;ref=&#038;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&#038;blog=9610556&#038;post=196&#038;subd=perfwork&#038;ref=&#038;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>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cea045ce6c3d3483ac473f4850184d78?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2011/07/27/olio-on-github/</feedburner:origLink></item>
		<item>
		<title>Velocity 2011</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/PC_5WgSZd_M/</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&#038;blog=9610556&#038;post=188&#038;subd=perfwork&#038;ref=&#038;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&#038;blog=9610556&#038;post=188&#038;subd=perfwork&#038;ref=&#038;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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2011/06/20/velocity-2011/</feedburner:origLink></item>
		<item>
		<title>Measuring Page Performance</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/LbkdZy69LwQ/</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&#038;blog=9610556&#038;post=181&#038;subd=perfwork&#038;ref=&#038;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&#038;blog=9610556&#038;post=181&#038;subd=perfwork&#038;ref=&#038;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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2011/03/24/measuring-page-performance/</feedburner:origLink></item>
		<item>
		<title>Announcing faban.org</title>
		<link>http://feedproxy.google.com/~r/ShantiBlog/~3/qxfzVZbbmsc/</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&#038;blog=9610556&#038;post=178&#038;subd=perfwork&#038;ref=&#038;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&#038;blog=9610556&#038;post=178&#038;subd=perfwork&#038;ref=&#038;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&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">perfwork</media:title>
		</media:content>
	<feedburner:origLink>http://perfwork.wordpress.com/2011/02/15/announcing-faban-org/</feedburner:origLink></item>
	</channel>
</rss>

