<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Retina Technology Blog &#187; peformance</title>
	<atom:link href="http://www.retina.net/tech/category/peformance/feed" rel="self" type="application/rss+xml" />
	<link>http://www.retina.net/tech</link>
	<description>John Adams' views on emerging technologies, software engineering, and various hacks</description>
	<lastBuildDate>Fri, 16 Sep 2011 09:06:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
	<!-- podcast_generator="podPress/8.8.10.2" -->
	<copyright>2006-2007 </copyright>
	<managingEditor>jna@retina.net (John Adams)</managingEditor>
	<webMaster>jna@retina.net (John Adams)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>http://www.retina.net/tech/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Retina Technology Blog &#187; peformance</title>
		<link>http://www.retina.net/tech</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>John Adams' views on emerging technologies, software engineering, and various hacks</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Technology" />
	<itunes:category text="Technology">
		<itunes:category text="Tech News" />
	</itunes:category>
	<itunes:author>John Adams</itunes:author>
	<itunes:owner>
		<itunes:name>John Adams</itunes:name>
		<itunes:email>jna@retina.net</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.retina.net/tech/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Memcached and MySQL &#8211; What good is it?</title>
		<link>http://www.retina.net/tech/memcached-and-mysql-what-good-is-it.html</link>
		<comments>http://www.retina.net/tech/memcached-and-mysql-what-good-is-it.html#comments</comments>
		<pubDate>Sun, 17 May 2009 19:56:42 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[peformance]]></category>
		<category><![CDATA[social networking]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[systems administration]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[Relational database]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=222</guid>
		<description><![CDATA[I posted this in response to a post on GigaOM, but it was such a long comment, I felt that it was worthy as a post on it&#8217;s own. The workloads of social networking sites fall mostly into the &#8216;read lots, write once&#8217; class (most of the web exists within this paradigm.) Regardless of the [...]]]></description>
			<content:encoded><![CDATA[<p>I posted this in response to <a href="http://gigaom.com/2009/05/17/memcached-and-an-ailing-mysql/">a post on GigaOM</a>, but it was such a long comment, I felt that it was worthy as a post on it&#8217;s own.<br />
</em></p>
<p>The workloads of <a id="aptureLink_5gGWByWM0M" href="http://en.wikipedia.org/wiki/Social%20Networking">social networking</a> sites fall mostly into the &#8216;read lots, write once&#8217; class (most of the web exists within this paradigm.) Regardless of the database company that&#8217;s responsible for the software, the main idea in scaling this read heavy workload is to remove the burden from the database and move it to distributed memory stores. </p>
<p>As an engineer, you want applications to pull from the same cache pool to reduce I/O pressure. To ensure that every machine isn&#8217;t replicating data in individual caches, you have to go distributed. That&#8217;s the win with memcached.</p>
<p>Putting a distributed cache between the application and the database increases performance and shares data across your application servers, something that the database cannot do on it&#8217;s own. The database has on-disk and in memory caching, but eventually you&#8217;ll run out of memory on a single host if your working set exceeds the host&#8217;s memory.</p>
<p>Memcached also covers up replication lag (MySQL is terrible at replication, Oracle not so much) in large environments by putting data into the distributed cache (Write-through caching) before the slave database has finished it&#8217;s writing. Data is available immediately to clients, before the replication has completed. </p>
<p>It will also provide a large amount of savings when you&#8217;re constantly executing that O(n x m) query to find out who is friends with whom on your social networking site. </p>
<p>This comes with a cost, though. Relational database functions, like joining across large data sets, and atomic operations, become very difficult to execute. Memcached becomes the central server, and there is always a fear that an important key will drop out of cache because of a random eviction. </p>
<p>It&#8217;s not without risk, either. Dependence on the cache can hurt you severely if lots of memcached servers fail (and they do fail), Leaving you in a &#8216;cold cache&#8217; situation where it can take hours to repopulate your working set back into the cache pool. </p>
<p>Don&#8217;t question MySQL&#8217;s performance &#8212; relational databases are great, but they are not the only solution to storage problems. the two problems that are being solved here are, highly orthogonal. </p>
<p>I&#8217;d also like to state that the majority of alternate key-value store databases <a href="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/">listed in Richard Jones&#8217; article </a> and in <a href="http://randomfoo.net/2009/04/20/some-notes-on-distributed-key-stores">Lenoard Lin&#8217;s</a> blog are really not ready for high production loads (with maybe the exception of Tokyo Cabinet, HDFS,  and Cassandra).  There is still a ton of &#8216;secret sauce&#8217; the large sites are keeping quiet about in order to make these into effective data stores. </p>
<p>Lin states this in his review as well: &#8220;Your comfort-level running in prod may vary, but for most sane people, I doubt you’d want to.&#8221;</p>
<p>Tread lightly. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/memcached-and-mysql-what-good-is-it.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Network performance measurement</title>
		<link>http://www.retina.net/tech/network-performance-measurement.html</link>
		<comments>http://www.retina.net/tech/network-performance-measurement.html#comments</comments>
		<pubDate>Sun, 23 Nov 2008 09:55:54 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[peformance]]></category>
		<category><![CDATA[systems administration]]></category>
		<category><![CDATA[caida]]></category>
		<category><![CDATA[gigabit network]]></category>
		<category><![CDATA[iperf]]></category>
		<category><![CDATA[network performance]]></category>
		<category><![CDATA[performance measurement]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=164</guid>
		<description><![CDATA[After building a new gigabit network here, we wanted to know exactly what our performance was like.  I turned to CAIDA, the Cooperative Association for Internet Data Analysis, which has long been a provider of excellent network performance tools. Their research focuses on developing tools to measure the Internet in many amazing ways, such as this [...]]]></description>
			<content:encoded><![CDATA[<p>After building a new gigabit network here, we wanted to know exactly what our performance was like. </p>
<p>I turned to <a href="http://www.caida.org/home/">CAIDA</a>, the Cooperative Association for Internet Data Analysis, which has long been a provider of excellent network performance tools. Their research focuses on developing tools to measure the Internet in many amazing ways, such as this <a href="http://www.caida.org/research/topology/as_core_network/pics/ascore-simple.2008_big.png">map of interconnections</a> between the all Autonomous Systems (AS) of the Internet. </p>
<p>There&#8217;s many tools available, but the unofficial standard for bandwidth measurement is <a href="http://sourceforge.net/projects/iperf">iperf</a>. It&#8217;s a simple tool to show the maximum possible bandwidth between two points. One machine runs a server, using &#8216;iperf -s&#8217;. The client connects to the server (using iperf -c server) and as much data as can be sent in a single interval is sent. </p>
<p>Between two of my machines running OS X 10.5.5, I get great results:</p>
<pre>
retina:/tmp jna$ ./iperf -c hackintosh -i 1
------------------------------------------------------------
Client connecting to hackintosh, TCP port 5001
TCP window size:   129 KByte (default)
------------------------------------------------------------
[  3] local 10.1.1.15 port 52150 connected with 10.1.1.20 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec    107 MBytes    894 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  1.0- 2.0 sec    109 MBytes    912 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  2.0- 3.0 sec    107 MBytes    901 Mbits/sec
</pre>
<p>The situation is not so wonderful between my laptop, An Intel Macbook Pro, on 802.11N wireless via a Netgear WNR3500.</p>
<pre>
dhcp-102:iperf-2.0.4 jna$ src/iperf -i 1 -c hackintosh
------------------------------------------------------------
Client connecting to hackintosh, TCP port 5001
TCP window size:   129 KByte (default)
------------------------------------------------------------
[  3] local 10.1.1.102 port 49518 connected with 10.1.1.20 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  2.45 MBytes  20.6 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  1.0- 2.0 sec  2.59 MBytes  21.8 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  2.0- 3.0 sec  2.36 MBytes  19.8 Mbits/sec
</pre>
<p>I don&#8217;t believe wireless sales materials anymore (when did I ever?) regarding the maximum speed of these devices. I have five bars on Apple&#8217;s wireless icon here, the Macbook Pro supports 802.11N,  and I can&#8217;t get more than 21.8 Mbits/sec to local machines here. On my Comcast cable, my maximum download speed is around 13 Mbits/sec, so I probably have the best speed possible for downloading from the Internet, but moving files across the local LAN via wireless is a different story. It&#8217;s much slower and I&#8217;ll go directly to the gigabit, hard wired connection for movies and music.</p>
<p>Interestingly enough, 21.8 Mbits/s is well within 802.11g&#8217;s allocation of 25 Mbits/s per client. My 802.11N configuration is no better than 802.11g, even though Apple&#8217;s Network Utility reports a link speed of 130Mbits/second and that I have the 802.11 a/b/g/n Network adapter installed.</p>
<p>I&#8217;m unsure as to why the network configuration disagrees with the achieved bandwidth, though. It&#8217;ll be something I research in the next few days.</p>
<p>I&#8217;d also like to take a moment here and condemn Belkin&#8217;s entire line of wireless devices. They use a piece of Javascript with breaks the RFC standards in so many ways. If you attempt to configure these devices using CIDR, such as &#8220;10.1.1.0/24&#8243;, which is what my home network is, their devices force you to a netmask of &#8220;255.0.0.0&#8243; because the javascript in the setup form sees 10.0.0.0/8 as a class A network. Classless notation in network allocation is the standard these days, and Class A, B, and C notation is a thing of the past.</p>
<p>This broke my network for hours until I was frustrated enough to bring the device back to Best Buy and purchase the WGR3500. At least I didn&#8217;t have to deal with an online return!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/network-performance-measurement.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving Javascript Load Times using Google AJAX API</title>
		<link>http://www.retina.net/tech/improving-javascript-load-times-using-google-ajax-api.html</link>
		<comments>http://www.retina.net/tech/improving-javascript-load-times-using-google-ajax-api.html#comments</comments>
		<pubDate>Mon, 22 Sep 2008 20:12:26 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[peformance]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pageload]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=123</guid>
		<description><![CDATA[If your site uses common AJAX libraries like jQuery, jQuery UI, mootools, prototype, script.aculo.us, or dojo, the first thing that you&#8217;ll notice is that these libraries are quite large and impact page load time. For a browser with a completely empty cache, the browser will load the requested library (and block all other requests during [...]]]></description>
			<content:encoded><![CDATA[<p>If your site uses common AJAX libraries like jQuery, jQuery UI, mootools, prototype, script.aculo.us, or dojo, the first thing that you&#8217;ll notice is that these libraries are quite large and impact page load time.</p>
<p>For a browser with a completely empty cache, the browser will load the requested library (and block all other requests during the load). For every site the user visits, the library is loaded again and again because the cache does not work across sites. Loading site1.com/jquery.js and site2.com/jquery.js takes the same amount of time.</p>
<p>Google&#8217;s come up with a clever solution to this problem. Instead of pointing to your local copy of whatever AJAX library you want, you point to Google&#8217;s copy using their <a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#script_aculo_us">AJAX Libraries API</a>.</p>
<p>There&#8217;s many advantages to this. If the user has been to Gmail or any Google property recently, the library is already loaded in their browser, ready to execute. If the user goes to other sites which use the API, their cache is already primed and does not need to be loaded again. </p>
<p>We&#8217;ve just put this in place over at <a href="http://www.twitter.com">Twitter</a>, and it should improve page load times dramatically.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/improving-javascript-load-times-using-google-ajax-api.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ack!</title>
		<link>http://www.retina.net/tech/ack.html</link>
		<comments>http://www.retina.net/tech/ack.html#comments</comments>
		<pubDate>Thu, 17 Jul 2008 07:43:33 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[peformance]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[systems administration]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=71</guid>
		<description><![CDATA[I&#8217;ve been experimenting with a few things this week while trying to wade my way through Twitter&#8217;s infrastructure. One tool that&#8217;s been of extreme help in digging through source code and an extensive set of configuration files has been ack! It&#8217;s the only piece of software I know of that has &#8216;&#8211;thpppt&#8217; as an option [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been experimenting with a few things this week while trying to wade my way through <a href="http://www.twitter.com">Twitter&#8217;s</a> infrastructure. One tool that&#8217;s been of extreme help in digging through source code and an extensive set of configuration files has been <a href="http://petdance.com/ack/">ack!</a></p>
<p>It&#8217;s the only piece of software I know of that has &#8216;&#8211;thpppt&#8217; as an option (Install it, and you&#8217;ll see.) It&#8217;s an optimized replacement for many of your favorite awk | grep | sed combinations, and includes syntax highlighting. </p>
<p>In other news, I&#8217;ve resolved a number of bugs and issued new code for running <a href="http://code.google.com/p/modtelemetry">mod_telemetry</a> on 64-bit Linux. Check out the SVN trunk for the latest branch. The data that this module has been providing to me has been invaluable for researching slow points in the back end.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/ack.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

