<?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; systems administration</title>
	<atom:link href="http://www.retina.net/tech/category/systems-administration/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; systems administration</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>Damn Small Linux: Making bootable USB drives on Mac OS X</title>
		<link>http://www.retina.net/tech/damn-small-linux-making-bootable-usb-drives-on-mac-os-x.html</link>
		<comments>http://www.retina.net/tech/damn-small-linux-making-bootable-usb-drives-on-mac-os-x.html#comments</comments>
		<pubDate>Mon, 20 Jun 2011 23:20:12 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[operations]]></category>
		<category><![CDATA[systems administration]]></category>
		<category><![CDATA[Damn Small Linux]]></category>
		<category><![CDATA[LiveDistro]]></category>
		<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[USB flash drive]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/.html</guid>
		<description><![CDATA[Recently I had a need to log into a machine with no cdrom and I decided to use Damn Small Linux to get enough of a shell to access the machine. It&#8217;s a very small, 50MB distribution of linux that is not that easy to install if you don&#8217;t have a linux box to start [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had a need to log into a machine with no cdrom and I decided to use <a href="http://www.damnsmalllinux.org/">Damn Small Linux</a> to get enough of a shell to access the machine.</p>
<p>It&#8217;s a very small, 50MB distribution of linux that is not that easy to install if you don&#8217;t have a linux box to start with. Despite the large number of Linux boxes that I once owned, I&#8217;ve replaced all of them with Mac OS. Fortunately, there is a simple way to install DSL on a USB boot drive from Mac OS, using VMWare Fusion.</p>
<p>You&#8217;ll need a 1GB USB drive. The smaller the drive is, the better. Some systems cannot boot off of very large USB drives. 512MB or 1GB is recommended.</p>
<p>Here&#8217;s the how to&#8230;</p>
<p><strong>Download the latest copy of DSL from a mirror.</strong></p>
<p>Do not use syslinux, but get the ISOLINUX version. This is the ISO named dsl-x.x.x where x.x.x is a version number. I used <a href="http://ftp.heanet.ie/mirrors/damnsmalllinux.org/current/dsl-4.4.10.iso">dsl-4.4.10.iso</a>, although in retrospect I should have used the VMWare VMX Image. Either works.</p>
<p><Strong>Insert the pendrive and format it.</strong></p>
<p>Mac OS will auto mount the pendrive. Open Disk Utiilty.<br />
Format the device as MS DOS FAT and MBR.<br />
One Partition.</p>
<p>Important: Unmount the pendrive before starting VMWare Fusion.</p>
<p><strong>Create a new VMWare Fusion Virtual Machine</strong></p>
<p>The general idea here is to create an empty VM using fusion, and to boot off of the ISO you have just downloaded.<br />
It can be reasonably small. You do not need to allocate disk space on your HD.<br />
Configure the VM as Linux/Ubuntu and to mount the CD.</p>
<p>Mount the pendrive as an &#8220;Alcor Micro Mass Storage&#8221; device. It will appear to your VM as /dev/sda. </p>
<p><strong>Install DSL</strong></p>
<p>When DSL boots up, at the &#8220;boot:&#8221; prompt, type &#8220;install&#8221;<br />
Then, select &#8220;5&#8243; for &#8220;USB Pendrive HDB boot install&#8221;</p>
<p>Answer yes to all prompts, and the install will (hopefully) complete.</p>
<p><strong>Now What?</strong></p>
<p>You&#8217;re done. DSL is great for password recovery, emergency repair, or system rescue. So long as your system supports booting from USB drives, you&#8217;re good to go!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/damn-small-linux-making-bootable-usb-drives-on-mac-os-x.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>Velocity Preview</title>
		<link>http://www.retina.net/tech/velocity-preview.html</link>
		<comments>http://www.retina.net/tech/velocity-preview.html#comments</comments>
		<pubDate>Thu, 07 May 2009 18:36:12 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[systems administration]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=212</guid>
		<description><![CDATA[There&#8217;s a small interview with me in today&#8217;s O&#8217;Reilly radar, where I talk about some of the things that I&#8217;ll be presenting as part of my Velocity 2009 talk. You can listen to, and read the transcript here:]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a small interview with me in today&#8217;s O&#8217;Reilly radar, where I talk about some of the things that I&#8217;ll be presenting as part of my Velocity 2009 talk. You can <a href="http://radar.oreilly.com/2009/05/velocity-preview---keeping-twi.html">listen to, and read the transcript here</a>:</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/velocity-preview.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding usernames through iTunes DAAP</title>
		<link>http://www.retina.net/tech/finding-usernames-with-daap-and-itunes.html</link>
		<comments>http://www.retina.net/tech/finding-usernames-with-daap-and-itunes.html#comments</comments>
		<pubDate>Tue, 13 Jan 2009 22:20:00 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[application security]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[systems administration]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=194</guid>
		<description><![CDATA[Often on our local network, someone will start using up all of our outbound Internet bandwidth, and this leads to the network administrator&#8217;s dilemma: How do we find the user in question so we can thump them on the head to make them stop? This is a basic exercise in information gathering. For the most [...]]]></description>
			<content:encoded><![CDATA[<p>Often on our local network, someone will start using up all of our outbound Internet bandwidth, and this leads to the network administrator&#8217;s dilemma: </p>
<p>How do we find the user in question so we can thump them on the head to make them stop?</p>
<p>This is a basic exercise in information gathering. For the most part, we&#8217;ll have the user&#8217;s IP address, and we&#8217;re a mac shop with many users running iTunes. If the user is sharing their library, you can use iTunes as a covert means of determining a user&#8217;s name, as iTunes will use the local computer&#8217;s name as the library name. </p>
<p>Telnet to the machines DAAP port, and issue:</p>
<pre>

John-adamss-macbook-pro:~ jna$ telnet x.x.x.x 3689
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
GET /server-info HTTP/1.1
Host: x.x.x.x
Client-DAAP-Version: 3.7
User-Agent: iTunes/8.0.2 (Macintosh; N; Intel)
Accept-Language: en-us, en;q=0.50

HTTP/1.1 200 OK
Date: Tue, 13 Jan 2009 21:26:38 GMT
DAAP-Server: iTunes/8.0.2 (Mac OS X)
Content-Type: application/x-dmap-tagged
Content-Length: 280

msrvmstt?mproaproaeSVaeFPatedmsedmsmlmsmOk?[minmUSER NAME’s LibrarymslrmstmsalmsasmsupmspimsexmsbrmsqymsixmsrsmsdcmstcImmsto???
</pre>
<p>Other options for this include attempting to sign on to the server with Apple-K if AFP on TCP port 548 is active (which will reveal the computer&#8217;s name) and using nmap with service detection to glean information about the host.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/finding-usernames-with-daap-and-itunes.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netgear fixes WGR3500 bandwidth issues, somewhat.</title>
		<link>http://www.retina.net/tech/netgear-fixes-wgr3500-bandwidth-issues-somewhat.html</link>
		<comments>http://www.retina.net/tech/netgear-fixes-wgr3500-bandwidth-issues-somewhat.html#comments</comments>
		<pubDate>Sun, 11 Jan 2009 02:22:41 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[systems administration]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=187</guid>
		<description><![CDATA[On this page, Netgear releases Firmware version 1.0.30 for the WNR3500 router.  In my previous Apple Macbook Pro to Local network host (Mac Mini) testing, my top connection speed was around 2.4 Mbps. After the upgrade, it&#8217;s between 4.65Mbps and 7.5Mbps. Nothing near the promised speeds of 802.11N (300Mbit/sec), but I suspect that this is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kbserver.netgear.com/release_notes/d103383.asp">On this page</a>, Netgear releases Firmware version 1.0.30 for the WNR3500 router. </p>
<p>In my previous Apple Macbook Pro to Local network host (Mac Mini) testing, my top connection speed was around 2.4 Mbps. After the upgrade, it&#8217;s between 4.65Mbps and 7.5Mbps. Nothing near the promised speeds of 802.11N (300Mbit/sec), but I suspect that this is because of an incompatibility between Apple&#8217;s hardware and Netgear&#8217;s Hardware.</p>
<pre>
------------------------------------------------------------
Client connecting to 10.1.1.15, TCP port 5001
TCP window size:   129 KByte (default)
------------------------------------------------------------
[  3] local 10.1.1.70 port 51617 connected with 10.1.1.15 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  8.59 MBytes  7.19 Mbits/sec
</pre>
<p><strong>Update:</strong></p>
<p>After disassociating and reassociating with the AP, speeds went way up:</p>
<pre>
retina:~ jna$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[  4] local 10.1.1.15 port 5001 connected with 10.1.1.70 port 52865
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  34.8 MBytes  29.1 Mbits/sec
</pre>
<p>With other devices on the WLAN, speeds go down. My current theory is that 802.11g devices on the same wireless network (such as the older Macbooks that we have) drag 802.11n speeds down,  but I&#8217;m yet to be able to prove that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/netgear-fixes-wgr3500-bandwidth-issues-somewhat.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Outgoing blacklists, or, stop the bouncing.</title>
		<link>http://www.retina.net/tech/outgoing-blacklists-or-stop-the-bouncing.html</link>
		<comments>http://www.retina.net/tech/outgoing-blacklists-or-stop-the-bouncing.html#comments</comments>
		<pubDate>Sat, 13 Dec 2008 02:14:02 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[systems administration]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[bounce handling]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=175</guid>
		<description><![CDATA[At Twitter, we have many users which sign up for the service and mistype or enter invalid email addresses. Our product group doesn&#8217;t want us to use email verification, and for the most part, we cannot because we accept signups via mobile (through the 40404 SMS short-code.) If we bounce too many messages for any [...]]]></description>
			<content:encoded><![CDATA[<p>At Twitter, we have many users which sign up for the service and mistype or enter invalid email addresses. Our product group doesn&#8217;t want us to use email verification, and for the most part, we cannot because we accept signups via mobile (through the 40404 SMS short-code.)  If we bounce too many messages for any major provider with a clue (think: hotmail, gmail, yahoo&#8230;) they&#8217;ll turn us off. If a user signs up for the service with an invalid email service, there&#8217;s a fair chance that we could be sending email to a dead address.  What do we do?!</p>
<p>There&#8217;s two things. First, on outgoing mail, we convert the address to a special VERP address. An email address of &#8220;user@example.com&#8221; becomes &#8220;twitter-<em>welcome</em>-user=example.com@postmaster.twitter.com&#8221;. We usually replace &#8220;welcome&#8221; with something topical so we can track the origin of the message.</p>
<p>Why <a href="http://en.wikipedia.org/wiki/Variable_envelope_return_path">VERP</a>?</p>
<p>If the mail bounces, the mailer-daemon on the other end will bounce the message back to the <em>postmaster</em> machine, which is a transport method in our inbound Postfix server pool. If an MTA along the transit path destroys the original destination email address, we can recover it from the To: address on the bounce. DJB first devised this for use with qMail, but it works great here.</p>
<p>That server runs a Ruby (originally written in perl) script, that pushes data to an internal API that increments the email address with a <em>bounce score </em>. Get too many points in the bounce score table, and we disable sending to your account. If you change your email address in our database, or ask us to try again, we clear the bounce score. We also clear the bounce score after 30 days or by admin request.</p>
<p>We identify and score bounced emails through the use of a simple regexp based scoring mechanism and/or use the DSN if a Delivery Status Notice is available.  A &#8220;5&#8243; indicates &#8220;hard fail, &#8220;2&#8243; = soft fail, and &#8220;1&#8243; = we don&#8217;t know. Anyone scoring over five is disabled. If it&#8217;s the &#8220;welcome to twitter&#8221; message, we mark it as 10 immediately. Your first mail has to go through, period.</p>
<p>Disabling is accomplished through a <em>reverse blacklist</em> through Postfix&#8217;s <strong>smtp_recipient_restrictions</strong> configuration directive and MySQL via proxymap.</p>
<p>The directives to do this under Postfix 2.5 are pretty simple.</p>
<p>In main.cf, On the central outgoing server(or servers&#8230;), Add:</p>
<pre># bounce handling
bouncehandler_destination_recipient_limit = 1
transport_maps = btree:/etc/postfix/transport

smtpd_delay_reject = yes
smtpd_recipient_restrictions = \
  check_recipient_access mysql:/etc/postfix/reject-bouncing.cf, \
        permit_mynetworks, \
        reject_unauth_destination</pre>
<p>/etc/postfix/reject-bouncing.cf:</p>
<pre>user = your_db_username
password = your_db_password
dbname = your_db_name
hosts = your_db_host
query = SELECT 'DISCARD in_bouncers_table' FROM bouncers WHERE email='%s' AND score &gt;= 5</pre>
<p>In master.cf, on the incoming server, add:</p>
<pre>bouncehandler  unix  -       n       n       -       -       pipe
  flags=DRhu user=nobody argv=/etc/postfix/bouncehandler.pl</pre>
<p>I use the following function to calculate severity of a bounce. It&#8217;s not perfect:</p>
<pre>sub get_severity {
    my ($es) = @_;
    my $body = $es-&gt;body;
    my $subject = $es-&gt;header("Subject");
    my $score = 1;

    # DSN Failures
    if ($body =~ /Action: failed/) {
	$score = 5;
    }

    # check through body of message and try to score the bounce.
    # temp failures.
    if ($body =~ /connection refused|host unreachable|host or domain not found/mi) {
	$score = 5;
    } 

    if ($body =~ /quota|mail(box|folder)* is full/mi) {
	# mailbox full, not as bad, we'll try up to 4 times.
	$score = 2;
    } 

    # wierd temporary failures
    if ($body =~ /(junk mail|spam) try again later/mi) {
	$score = 1;
    }

    # temp.
    return $score;
}</pre>
<p>I leave it to you to write bouncehandler.pl, including the above code, and the database schema. It&#8217;s very simple. Parse the message, create rules, insert/update a record in your database. I used Email::Simple for parsing, and DBI/Mysql for database access.</p>
<p>The DB Schema needs to contain these columns (at a minimum): The email address, a score column, created_at, and updated_at.</p>
<p>My queries look something like this:</p>
<pre># prepare SQL statements for later use
# last times are based on our receipt, not theirs.
$findemail_sth = $dbh-&gt;prepare('SELECT id, score FROM bouncers WHERE email=?');
$insert_sth    = $dbh-&gt;prepare('INSERT INTO bouncers (email,score,updated_at,user_id) VALUES (?,?,now(),?)');
$update_sth    = $dbh-&gt;prepare('UPDATE bouncers SET score=?, updated_at=now(),user_id=? where id=?');</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/outgoing-blacklists-or-stop-the-bouncing.html/feed</wfw:commentRss>
		<slash:comments>4</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>Upgrading your home network to Gigabit Ethernet</title>
		<link>http://www.retina.net/tech/upgrading-your-home-network-to-gigabit-ethernet.html</link>
		<comments>http://www.retina.net/tech/upgrading-your-home-network-to-gigabit-ethernet.html#comments</comments>
		<pubDate>Sun, 23 Nov 2008 04:56:14 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[systems administration]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[Ethernet]]></category>
		<category><![CDATA[Gigabit Ethernet]]></category>
		<category><![CDATA[home network]]></category>
		<category><![CDATA[internal network]]></category>
		<category><![CDATA[wireless hub]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=159</guid>
		<description><![CDATA[This afternoon was a chaotic adventure in upgrading my home network to Gigabit Ethernet. I upgraded my wireless hub from 802.11g to 802.11N, and our internal network from 100mbit to GigE so I can move videos and music around the network faster. From cabling issues to configuration problems, here&#8217;s some tips so that you never [...]]]></description>
			<content:encoded><![CDATA[<p>This afternoon was a chaotic adventure in upgrading my home network to Gigabit <a class="zem_slink" title="Ethernet" rel="wikipedia" href="http://en.wikipedia.org/wiki/Ethernet">Ethernet</a>. I upgraded my wireless hub from 802.11g to 802.11N, and our internal network from 100mbit to <a class="zem_slink" title="Gigabit Ethernet" rel="wikipedia" href="http://en.wikipedia.org/wiki/Gigabit_Ethernet">GigE</a> so I can move videos and music around the network faster.</p>
<p>From cabling issues to configuration problems, here&#8217;s some tips so that you never have to go through the troubles that I did.</p>
<p>1. Adventures in Layer one:  Don&#8217;t use home made cables!</p>
<p>If you must make them, ensure that you are crimping the ends of the cables to the same spec and that all four pairs of the cable are working correctly. I had a run coming from the studio, far away from where the main router is with a bad crimp. One dead pair caused the connection to fall back to 100mbit/s instead of 1000mbit/s, eliminating any advantage I&#8217;d gain from the new hardware.</p>
<p>Always purchase good quality, store bought, category five cables wired to the <a class="zem_slink" title="Telecommunications Industry Association" rel="wikipedia" href="http://en.wikipedia.org/wiki/Telecommunications_Industry_Association">TIA</a> 568A or B spec.</p>
<p>2. Always check the lower levels of the network before blaming higher ones.</p>
<p>In order of verification, your checks should go:</p>
<p>1. Layer one &#8211; Physical. Check your wiring.<br />
2. Layer two &#8211; Ethernet. Make sure you have link, and that both sides of the link are at 1000 mbit<br />
3. Layer four &#8211; IP: Make sure you have the right <a class="zem_slink" title="IP address" rel="wikipedia" href="http://en.wikipedia.org/wiki/IP_address">IP addresses</a> in your network, and netmask. Ping hosts on your <a class="zem_slink" title="Local area network" rel="wikipedia" href="http://en.wikipedia.org/wiki/Local_area_network">local network</a> first, then try the router, then try internet based hosts. If you can get to the local network and not the Internet, check your <a class="zem_slink" title="Default route" rel="wikipedia" href="http://en.wikipedia.org/wiki/Default_route">default route</a>.<br />
4. <a class="zem_slink" title="Domain Name System" rel="wikipedia" href="http://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>. Can you look up a hostname? Does it return the right address immediately without lag? If not check DNS settings and try again.</p>
<p>Once you&#8217;re sure the foundation of the network is fully functional, move on to higher level apps, like your browser.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/e10f1c8e-d1e4-401a-a058-c75874f8a329/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=e10f1c8e-d1e4-401a-a058-c75874f8a329" alt="Reblog this post [with Zemanta]" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/upgrading-your-home-network-to-gigabit-ethernet.html/feed</wfw:commentRss>
		<slash:comments>1</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>
		<item>
		<title>DNS Patches released today for many platforms</title>
		<link>http://www.retina.net/tech/dns-patches-released-today.html</link>
		<comments>http://www.retina.net/tech/dns-patches-released-today.html#comments</comments>
		<pubDate>Tue, 08 Jul 2008 22:08:03 +0000</pubDate>
		<dc:creator>John Adams</dc:creator>
				<category><![CDATA[application security]]></category>
		<category><![CDATA[operations]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[systems administration]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[secuonis]]></category>

		<guid isPermaLink="false">http://www.retina.net/tech/?p=67</guid>
		<description><![CDATA[If you&#8217;re responsible for DNS at your organization, I urge you to immediately download updates for your DNS servers and patch them, today. Dan Kaminsky and other members of the DNS community announce that they are releasing patches for an extremely serious cache resolver issue impacting many vendors of DNS software, including ISC BIND and [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re responsible for DNS at your organization, I urge you to immediately download updates for your DNS servers and patch them, <strong>today</strong>. Dan Kaminsky and other members of the DNS community announce that they are releasing patches for an extremely serious cache resolver issue impacting many vendors of DNS software, including ISC BIND and Microsoft DNS.</p>
<p>The CERT advisory is <a href="http://www.kb.cert.org/vuls/id/800113">here</a>.</p>
<p>A partial overview, from <a href="http://securosis.com/publications/DNS-Executive-Overview.pdf">the PDF</a> released by Secuonis&#8230;</p>
<p><em><br />
On July 8th, technology vendors from across the industry will simultaneously release  patches for their products to close a major vulnerability in the underpinnings of the Internet. While most home users will be automatically updated, it&#8217;s important for all businesses to immediately update their networks. This is the largest synchronized security update in the history of the Internet, and is the result of hard work and dedication across dozens of organizations. </p>
<p>Earlier this year, professional security research Dan Kaminsky discovered a major issue in how Internet addresses are managed (Domain Name System, or DNS). This issue was in the design of DNS and not limited to any single product. DNS is used by every computer on the Internet to know where to ﬁnd other computers. Using this issue, an attacker could easily take over portions of the Internet and redirect users to arbitrary, and malicious, locations. For example, an attacker could target an Internet Service Provider (ISP), replacing the entire web &#8212; all search engines, social networks, banks, and other sites &#8212; with their own malicious content. Against corporate environments, an attacker could disrupt or monitor operations by rerouting network trafﬁc trafﬁc, capturing emails and other sensitive business data. <br />
</em><br />
Exact details on this are being withheld for the safety of the Internet; I prefer full disclosure, but that doesn&#8217;t seem to be the case here given that the hole is so large and vulnerability so widespread. </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.retina.net/tech/dns-patches-released-today.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

