Archive for May, 2007

JRuby and Joyent Accelerators

Sunday, May 27th, 2007

I don’t pimp Joyent products much, but I’ll do so for this one. In our new Joyent Accelerators JRuby is pre-installed and ready to run out of the box. Joyent is a key player in the Ruby on Rails world, hosting some of the biggest (Twitter) and best (Ebible) Rails sites on the net. I’m glad to say that we’re the first hosting company to get behind and seriously advocate JRuby for production use.

Getting started is easy. In our Accelerators you’ll JRuby 1.0.0RC2 in /opt/jruby. JRuby comes complete with the jruby interpreter which is used just like ruby, including friends like gem, jirb, and more. Lets take a look at how to get started:

[z010101CA:~] admin$ export PATH=/opt/jruby/bin:$PATH
[z010101CA:~] admin$ jirb
irb(main):001:0> string = 'JRuby Rules\!'
=> "JRuby Rules\\!"
irb(main):002:0> print string
JRuby Rules\!=> nil
irb(main):003:0> string.upcase
=> "JRUBY RULES\\!"
irb(main):004:0> quit

Its really just that simple. Want to do some JRuby on Rails work?

[z010101CA:~] admin$ which gem
gem is /opt/jruby/bin/gem
[z010101CA:~] admin$ gem list --local

*** LOCAL GEMS ***

sources (0.0.1)
    This package provides download sources for remote gem installation

[z010101CA:~] admin$ sudo gem install rails -y
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rails-1.2.3
Successfully installed rake-0.7.3
Successfully installed activesupport-1.4.2
Successfully installed activerecord-1.15.3
Successfully installed actionpack-1.13.3
Successfully installed actionmailer-1.3.3
Successfully installed actionwebservice-1.2.3
...

[z010101CA:~] admin$ sudo chmod +r /opt/jruby/bin/*
Password:
[z010101CA:~] admin$ which rails
rails is hashed (/opt/jruby/bin/rails)
[z010101CA:~] admin$ rails webstore
      create
      create  app/controllers
      create  app/helpers
     ........
[z010101CA:~] admin$ cd webstore/
[z010101CA:~/webstore] admin$ jruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2007-05-27 07:00:52] INFO  WEBrick 1.3.1
[2007-05-27 07:00:52] INFO  ruby 1.8.5 (2007-05-16) [java]
[2007-05-27 07:00:52] INFO  WEBrick::HTTPServer#start: pid=33409388 port=3000
24.6.105.152 - - [27/May/2007:07:01:20 GMT] "GET / HTTP/1.1" 200 7552
- -> /
24.6.105.152 - - [27/May/2007:07:01:20 GMT] "GET /javascripts/prototype.js HTTP/1.1" 200 71260
http://8.12.34.20:3000/ -> /javascripts/prototype.js
24.6.105.152 - - [27/May/2007:07:01:20 GMT] "GET /javascripts/effects.js HTTP/1.1" 200 38200
http://8.12.34.20:3000/ -> /javascripts/effects.js
24.6.105.152 - - [27/May/2007:07:01:21 GMT] "GET /images/rails.png HTTP/1.1" 200 1787
http://8.12.34.20:3000/ -> /images/rails.png
24.6.105.152 - - [27/May/2007:07:01:21 GMT] "GET /favicon.ico HTTP/1.1" 200 0
- -> /favicon.ico
...

Its that simple. No tricks, no gimmicks. Just start playing.

In particular, we’re excited about the plethora of mature Java features that can be brought into the Rails world, including JDBC and real threading.

For those who don’t have a Joyent Accelerator, download JRuby here: JRuby.org.

Ian Murdock and Glynn Foster at SVOSUG TONIGHT!

Thursday, May 24th, 2007

Tonight, at the Silicon Valley OpenSolaris Users Group will be welcoming Ian Murdock to clear up misconceptions and bring us all up to date on Project Indiana.

THIS IS A MUST ATTEND EVENT!

Project Indiana is going to change the face of the Solaris world… but maybe not the way you think. Don’t listen to the second hand accounts or conjecture, come tonight and find out first hand. If you can not attend use the call in number.

Given the importance of this meeting I do plan (plan) to video tape it. But the quality on my camera is always kinda hit or miss, so don’t rely on me, listen if you can.

IO Benchmarking: How, Why and With What

Tuesday, May 22nd, 2007

I’ve been meaning to bring up the dreaded benchmark topic for some time. Benchmarking is like some type of taboo… everyone wants to but you get chastised if you talk about it. That, of course, only fuels the desire that much more. But how? What do you use? When do you use what tool? Its really hard to find good information and so here is my attempt to shed some light on things.

Before we begin, lets look at the word itself: benchmark. The term comes from wood working and other such crafts. When a craftsman is making, for instance, table legs you first carefully cut your wood to size, measuring for exactness. Once it’s done properly you can then take that funny flat pencil, make a pencil mark on your bench and then use that to measure up all the following pieces to speed the process along. Based on the mark you know if your other pieces are too long or short and make the needed alterations. The mark is not a measurement per se, but rather a quick method of judging difference between things that should be similar.

Now we move into the storage world, the way in which we put that mark on our bench is different, but the purpose is exactly the same. Benchmarks are not about judging how fast something is! They are for judging change! Let me make that crystal clear… if you want to run some piece of software, a benchmark suite, against some peice of storage and definitively say “Its X fast.” you will always be wrong and people will always mock your numbers. The reason for this is self evident, any performance you see is based on the total environment in which it is run which can almost never be duplicated perfectly. In the storage world there are countless variables that mix things up: cabling, HBA’s, firmware, disks, disk firmware, OS, drivers, CPU’s, memory, and on and on. Just a single rev of firmware on an HBA or BIOS can have a major impact on your performance, so just because one person can get 180MB/s sequential writes out of his 3Par doesn’t mean that your going to get that same number.

Despite all that common sense stuff, we all still want one magical number that describes our l337 setup. But those numbers don’t work either because of various factors. Is the data sequential or random? Read, write or both? Whats the mix? Big files or small? No handful of numbers will make it clear. All these things contribute to the “benchmarks are useless” flamewars that occur all the time.

So, what then? Don’t benchmark? Stay oblivious to your performance thresholds and just rely on performance counters? Lets get real, we all want to know what a given solution can do and so even if we’re afraid to tell anyone what our numbers are we still do them.

The following is a rundown on the various methods of benchmarking that I find to be common and that I myself use, including when to use them, how and why.

dd

Do you know how benchmarks really work? Seriously, do you? Or do you just download some software, run it, and trust it? Everyone should start with our old friend dd. Using it is simple, read from here and write to there in some block size. This is perfect for determining sequential performance and getting a baseline “how fast can I read? how fast can I write?” sort of picture.

Start with a small sequential write block size, like this: time dd if=/dev/zero of=/mystorage/testfile bs=8k

Let that run for about 30 seconds. While it runs, watch the IO using tools like fsstat or iostat. When you hit 30 seconds stop it (^c) and do the math… n blocks transfered at 8K, so 8K times n, divide that by the exact time reported by the output, and presto we have number. Alternatively just divide the output file size by the time.

root@aeon ~$ time dd if=/dev/zero of=/iscsi/benchmark/testfile bs=8k
^C
97810+0 records in
97810+0 records out

real    1m52.933s
user    0m0.048s
sys     0m2.487s
root@aeon ~$
root@aeon ~$ ls -lh /iscsi/benchmark/testfile
-rw-r--r--   1 root     root        764M May 22 03:42 /iscsi/benchmark/testfile
root@aeon ~$ bc
60+52.9
112.9
764/112.9
6

Now, do it again, but this time with a 32k block. Then with a 128K block, a 512K block, 1MB block, 8MB block. Does the number change? How does it change? All this is important and something that storage admins rarely understand well untill they do this kind of exercise. This is exactly why I think every one should start with dd. Once you understand sequential performance at various block sizes, turn it around and do it all again but this time reading from a file to /dev/null. How does that look?

These types of tests provide very good ideas of what your best possible sequential performance is, and since most storage preforms sequential IO best this is normally the number I use for my “My Thumper can push line speed!” type statements to management.

But then lets be reminded right here and now…. real world applications almost never do huge quantities of sequential reads or writes. Its normally either very random or at best a mix of random and sequential performance. Think of it like this… Which is faster, a Top Fuel Dragster or a Formula1 car? The dragster is the fastest, but it can’t turn… the forumla1 care can turn like crazy but has to slow down for the corners. This is, imho, a good way to think of sequential vs random IO. If you want to see this in action watch The 24 Hours of Le Mans, where huge CanAm cards scream at 225MPH down the straight but then get passed by Porsche 911′s in the corners.

dd is also handy for testing raw devices. Benchmark /dev/rdsk/c1t1d0s2, then create a filesystem on it and benchmark using a file on that. Do tests against the charector device (/dev/rdsk) and block device (/dev/dsk) without a filesystem. On and on, there are lots of fun tests you can do with this simple tool that will help you better understand the underlying inner workings.

If you want to really get into it pick a single disk, download the spec sheet for the drive model from the manufacturer, and compare your numbers. Then partition the disk so that there is a 200MB partition at the beginning of the disk (starting at sector 0) and a 200MB partition at the end, and then re-run your tests against those two partitions. Very quickly you’ll find that storage topics that might have been abstract or foggy start becoming very clear, and terms like “sector”, “zoning”, “cylinder”, “full bore stroke”, “seek time”, etc, all start making a lot more sense because you can measure these things without some benchmarking tool abstracting all those details away from you.

One word of caution, if you write data to a filesystem with compression using /dev/zero you might see unbelieving high numbers thanks to smart compression. In these cases use /dev/urandom.

IOZone

IOZone can be your best friend or your worst enemy. It gives you piles of output, but what does it all mean?

root@aeon ~$ iozone -a -f /iscsi/benchmark/testfile
 (snip)
                                                            random  random    bkwd  record  stride
              KB  reclen   write rewrite    read    reread    read   write    read rewrite    read   fwrite frewrite   fread  freread
              64       4  100782  392899  1066277  1330599 1016473  424101  418281  329860  942552   281899   342403  470880   809281
              64       8  149508  561495  1308191  2210490 1779559  639776  819484  429479 1359677   333377   556799  853867  1206279
              64      16  224481  726304  1773010  3187118 2666736  902870  954801  512190 1681127   460485   615747  985460  1489957
              64      32  336690  865556  1186173  3984255 3213648  968640 1000206  640345 1394066   321463   593094  889313  1458013
              64      64  640728  984604  2065562  3788700 3194489 1048299 1230654  914748 1162367   374341   499802  581333  1392128
             128       4   48376  479597   794708  1293454 1075853  465638  687865  412859  653222   348679   407500  612489   921157
             128       8   95384  680542  1076199  2067003 1775777  703634  883158  636917 1540598   460509   566358  735581  1293810
             128      16  180520  920588  1112754  2970023 2615679  962219 1085347  790598 1968806   511767   684483  795485  1544370
             128      32  289588 1067558  1346983  3287511 2777119 1196016 1142954  752991 1910738   508116   735558  770868  1599215

That output can be confusing, but if you used our dd method above you suddenly realize that what IOZone is doing for you is automating all sorts of metrics on your behalf. Above we see that we’re creating a 64KB file in block sizes of 4, 8, 16, 32, and 64, doing read and write tests as well as fread/fwrite/etc (binary stream), and random (“read” and “write” are sequential).

IOZone, therefore, is great for finding that sweet spot on your storage solution. You can find out how far you can push your caches before they are ineffective or see what the optimal usage pattern is for your solution. Based on that, you can tweek caching or presets and see exactly how the performance range shifts in reaction.

When using IOZone don’t get caught up with all its fancy options, -a pretty well has you covered. Make sure that ever test run is done identially.

Now… before we move on I should address the Cache problem. If you are doing these types of tests where you hit a file over and over again you want to ensure that your filesystems caching isn’t over-inflating your numbers. This is especially true when you want to see the performance of a disk solution and not the filesystem. In these cases you should either bypass the cache by using the raw character device (/dev/rdsk) or by mounting the filesystem with DirectIO (mount -o forcedirectio,…). Some benchmarks attempt to defeat the cache by allocating files larger than memory, but on a box with 16GB of memory thats a bit ridiculous.

Bonnie++

Bonnie++ has become very popular because it is that magical benchmark that plops out a nice number that you can print on a shirt. Because of this, its both loved and hated. Either way, it’s the de facto grand-daddy of macro IO benchmarks.

root@aeon ~$ bonnie++ -u benr -d /iscsi/benchmark/ -r 512
(snip)
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
aeon             1G  7594   7  8317   2  2475   0 10840  13 11139   1  74.2   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 28164  97 +++++ +++ +++++ +++ 17849  94 +++++ +++ +++++ +++

I think Bonnie++ is a great tool for getting a general feel of a given configuration. Lots of data provided by tools like IOZone help you understand performance in a variety of scenarios, whereas Bonnie++ glosses over the details and gives you a handful of numbers. For this reason I recommend Bonnie++ when making non-tuning changes, such as upgrading your Fibre Channel HBA or running a new kernel or driver.

Remember, macro benchmarks are just that, high level, wide scope measurements. When used just see see if some change had an impact, its a great friend to have available.

As an aside, am I the only one that would rather they said “Write” instead of “Output” and “Read” instead of “Input”? Thats always annoyed me.

One thing to be careful about when using Bonnie++ is its need to write twice as much data as you have RAM. Thats an attempt to eliminate cache effect. However, if you have 1GB or more of memory that can really slow things down. I recommend disabling caching yourself (mount with ‘forcedirectio’) and using a more sensable size for your test, such as 1GB.

FileBench

FileBench is an extremely powerful tool for both macro and micro benchmarking. Its great strength is in its flexibility. Rather than running standard “as fast as you can!” tests it processes a given defined “workload”. Several standard workloads are provided with FileBench, and you can easily extend or modify them to suite your specific needs.

Lets be more clear. Other tools will tell you how fast you ran this op or that, but specific tools need to be written to do more complex testing. FileBench provides a framework so that you can avoid writing your own tests in C or PERL or whatever. These workloads follow patterns of IO and thus better represent real world conditions. Just knowing that writing is fast isn’t good enough, you really want to model activity such as a mail server that does a bunch of getattrs, one or more opens, some writes, some appends, a close, then repeats. All this is just a simple workload in FileBench. Here is an excerpt of the “varmail” workload (varmail.f):

define process name=filereader,instances=1
{
  thread name=filereaderthread,memsize=10m,instances=$nthreads
  {
    flowop deletefile name=deletefile1,filesetname=bigfileset
    flowop createfile name=createfile2,filesetname=bigfileset,fd=1
    flowop appendfilerand name=appendfilerand2,iosize=$meaniosize,fd=1
    flowop fsync name=fsyncfile2,fd=1
    flowop closefile name=closefile2,fd=1
    flowop openfile name=openfile3,filesetname=bigfileset,fd=1
    ...

This above IO pattern is mimics what you’ll really see in the world. Thus, FileBench allows us to duplicate IO patterns in the lab without having to reproduce the exact conditions (ie: seeing up a mail server and hitting it just to examine IO behaviour). Lets see a run in action:

root@aeon bin$ ./filebench
filebench> load varmail
filebench> run
 3000: 33.011: Fileset bigfileset: 1000 files, avg dir = 1000000.0, avg depth = 0.5, mbytes=15
 3000: 33.260: Creating fileset bigfileset...
 3000: 59.883: Preallocated 812 of 1000 of fileset bigfileset in 27 seconds
 3000: 59.884: Creating/pre-allocating files
 3000: 59.884: Starting 1 filereader instances
 3001: 59.897: Starting 16 filereaderthread threads
 3000: 60.903: Running...
 3000: 122.423: Run took 60 seconds...
 3000: 122.435: Per-Operation Breakdown
closefile4                 32ops/s   0.0mb/s      0.0ms/op        7us/op-cpu
readfile4                  32ops/s   0.5mb/s      0.0ms/op       49us/op-cpu
openfile4                  32ops/s   0.0mb/s      0.1ms/op       46us/op-cpu
closefile3                 32ops/s   0.0mb/s      0.0ms/op        8us/op-cpu
fsyncfile3                 32ops/s   0.0mb/s    270.9ms/op      156us/op-cpu
appendfilerand3            32ops/s   0.5mb/s      0.1ms/op       68us/op-cpu
readfile3                  32ops/s   0.5mb/s      0.0ms/op       49us/op-cpu
openfile3                  32ops/s   0.0mb/s      0.1ms/op       46us/op-cpu
closefile2                 32ops/s   0.0mb/s      0.0ms/op        8us/op-cpu
fsyncfile2                 32ops/s   0.0mb/s    229.0ms/op      151us/op-cpu
appendfilerand2            32ops/s   0.5mb/s      0.0ms/op       47us/op-cpu
createfile2                32ops/s   0.0mb/s      0.1ms/op       76us/op-cpu
deletefile1                32ops/s   0.0mb/s      0.1ms/op       60us/op-cpu

 3000: 122.435:
IO Summary:      25009 ops 414.1 ops/s, (64/64 r/w)   2.0mb/s,   1571us cpu/op, 124.8ms latency
 3000: 122.435: Shutting down processes

You can see that we get a really nice breakdown of stats per operation. We can see clearly from the above that fsyncfile is my pain point.

My only caution is the avoid reading too much into the IO Summary. In too many cases I’ve found it to be misleading.

Personally, I look at FileBench not as a “benchmark” in the traditional sense, but rather a workload generator. Its very good at generating IO patterns. You can then use other tools such as “iostat”, “vmstat”, DTrace, etc, to view the impact a given workload exerts on your configuration.

Network Testing for IP Storage

When you test IP Storage technologies, such as NFS, AFS, or iSCSI you’ll want to measure the speed from here to there. The best tools I’ve seen for this are PathLoad and PathRate. Both of these tools have a “sender” and “receiver” component which work together on the ends of the connection testing, thus you need access to both systems. Whenever you seriously benchmark iSCSI or NFS you should first benchmark your network so that you know how much network throughput you really have.

Pathrate is an end-to-end capacity estimation tool. It can help you identify any bottlenecks along the network path to determine what the true speed is going to look like through the narrowest portion of a given link.

# ./pathrate_rcv -s 172.16.165.18
        pathrate run from 172.16.165.18 to z00001AT on Thu Dec 21 16:44:25 2006
        --> Average round-trip time: 0.3ms

-------------------------------------------------
Final capacity estimate :  964 Mbps  to  964 Mbps
-------------------------------------------------

Pathload is a tool for estimating the available bandwidth of an end-to-end path. “The available bandwidth is the maximum IP-layer throughput that a flow can get in the path from S to R, without reducing the rate of the rest of the traffic in the path.”

# ./pathload_rcv -s 10.71.165.18
Receiver z00001AT starts measurements at sender 10.71.165.18 on Thu Dec 21 17:17:11 2006
  Interrupt coalescion detected
Receiving Fleet 0, Rate 1200.00Mbps
Receiving Fleet 1, Rate 600.00Mbps
Receiving Fleet 2, Rate 923.08Mbps
Receiving Fleet 3, Rate 1090.91Mbps
Receiving Fleet 4, Rate 1000.00Mbps
Receiving Fleet 5, Rate 961.54Mbps

        *****  RESULT *****
Available bandwidth range : 923.08 - 1090.91 (Mbps)
Measurements finished at Thu Dec 21 17:17:16 2006
Measurement latency is 4.84 sec

These two tools when used together can be invaluable when benchmarking storage over IP networks.

Pulling It Together

There are lots of tools, but I hope you can see that no one tool is right or wrong, they each serve a different purpose and contribute to your understanding of a given configuration or solution in unique ways. Never pigeon hole yourself into relying on just one. I’m not going to pretend that mastering the various tools is easy… its not! Learning the tools takes a lot of time and effort, but if you are setting out to benchmark a solution you obviously have some desire to understand it. Resist the urge to react based on a single value or measurement and instead take advantage of the variety of helpful analysis tools available and utilize their strengths to assist you in conjunction with your standard tools provided by the OS or storage solution.

Resources

May Product Plugs

Monday, May 14th, 2007

Here’s a dump of various products and companies that I’ve wanted to plug but due to my audience don’t really have places to fit ‘em in…

Iridesse: Pearls ditch the PTA

I wanted to get Tamarah a unique necklace for Mothers Day. I set out to Tiffany’s but they close early, so we went cruising around the Valley Fair mall and found Iridesse, a new jewelry company specializing in pearls but with a decidedly 21st century flare. These ain’t your mothers lame strand of pearls. Unique and creative designs to please at an extremely reasonable price point. I’ll definitely be doing more business with them in the future and not look at pearls the same in the future.

This isn’t want Tamarah picked out, but represents the sort of design that draws me toward Iridesse.

Sun StorEdge 2500 Array

Okey, okey… “StorageTek 2500″… but I still like the StorEdge branding so bite me. The 2500 provides 12 SAS drives in the snazy Galaxy look at 4Gbps FC speeds with dual controllers. I’m not sure who designed it, but its a nice box that’ll fit well into the storage lineup. The the product page says that it starts at $5,000 but I imagine thats with only 4 disks. SAS drives are still expensive, ranging between $500 and $1,000 per disk so I expect this guy to be pricey… but still a nice array. Hopefully the management interface is nice.

Navicat: Easy Graphical Management for MySQL and PostgreSQL

At the MySQL Users Conf I picked up a CD for Navicat Lite. I can’t find a downloadable copy of the Lite version, but I’ve found Navicat to be very handy indeed. I’ve never liked phpMyAdmin or other web-based tools, Navicat is easy to use and very handy. Its not as powerful as options like the Embarcadero suite, but perfect for common tasks and performance tuning. Highly recommended. If your using phpMyAdmin and don’t have more than a handful of people accessing it just buy everyone a copy of Navicat and stop messing around.

iSkin evo3: Protect Your iPod Video

I’ve been working from home for about 6 months now. With 2 young children in the house I learned early on to invest in music and portable sound. I ditched my old 20GB iPod when I started noticing that there was no tone, everything sounded flat. I bought a 30GB iPod Video (Black) and a good pair of Sony ear-buds (stethoscope in ear design). The iPod is nice and iTunes makes grabbing new music a breeze but the unit itself seems fragile and easy to scratch. Pandora recommended the iSkin and I definitely agree. I bought an iSkin evo3 Special Edition and am very happy. At $45 its a bit pricy, but I look at it as iPod insurance. The best case I’ve seen on the market thus far.

NetBeans 6.0 M9

NetBeans 6.0 is just awesome. Ruby is now a first class citizen, so if you don’t have TextMate on OS X consider using NetBeans 6.0. Eclipse has really been left in the dust. NetBeans has everything you can want and is super smooth, I still use the C/C++ plugins for my C development on occasion… I just can’t break the vim/makefile habit, but NetBeans is just slick for an IDE. For details see the NetBeans Ruby Editing documentation.

JavaOne Wrap Up

Monday, May 14th, 2007

JavaOne has come and gone… yet again. I’ll be honest, JavaOne really is the best show of the year. Its big, exciting, and frantic, just what a great show should be. So much is going on your constantly trying to figure out how you can get more in. Sadly I didn’t get to attend any JavaOne session, just a couple of the CommunityOne sessions. Here’s a hint:

The week was a busy one for me. I spent most of my time in the Pavilion at the OpenSolaris booth, spent some time in the Joyent booth in the Startup Essentials area, and spent the evenings working. On Wednesday I didn’t even get to the show, Joyent flew out Mark and Derek to have our quarterly Systems Meetup during the show and given that we were spending so much time at JavaOne we compensated by spending Wed in our planning meetings.

I’ve got to thank John Clingan for his mention of the Joyent Booth and Glassfish. His deductions are correct. We weren’t getting much action at the Joyent booth and that bummed me out because we are the best hosting solution for JavaEE developers who want to deploy with Glassfish (or Geronimo actually). Our hosting stack is 100% Sun, end-to-end, and we offer a low cost root-access VPS solution with enterprise options like F5 load balancing, SSL offload, and large storage offerings (Need 10TB? No problem.) We are known for our Rails deployments, but I really want to be the best infrastructure in the world for Java development and deployments. I run Glassfish v1 in my Accelerators and offer it pre-configured to anyone who asks (auto-installation solution shortly). So I asked Kristie Wells, Joyent PR, to put up a sign that said “Glassfish Hosting” and bet her $50 it would generate at least a 4 fold improvement in traffic. ….I’m still waiting for my $50.

Anyway, JavaOne has energy! I get pumped up. Seeing all the jRuby goodness really was an added bonus. I’m excited in really integrating all that I saw and learned into our Accelerator product…. I for one welcome our JavaFX Overlords. :)

Systems Administration as a Career: A Response

Friday, May 11th, 2007

I was bummed out when reading How do I get my sysadmin to do anything? by Paul Boutin. Most of the content is fine, sure, but this line bothered me:

No one sets out to be a professional systems administrator — do you ever see kids wearing toy pagers playing sysadmin?

… well, I did, in essence. From high school on I was destine to be an SA. Its what I wanted to do, what I wanted to be. I would draw Slayer, Megadeth, and “Sun Microsystems logo’s on my binders, I inserted Sun midrange data sheets into my Trapper-Keeper. I wanted to work on big computers, Cray’s, Sun’s and Thinking Machines, and be a great sysadmin. To this day thats unchanged.

Paul later says “sysadmin is a career cul-de-sac”, but I don’t see that. I plan to continue being a sysadmin for years to come… this isn’t a pitstop in my youth. Frankly, any career is the same if you choose to see it that way. I plan to follow my career path like any other, gaining more power, influence, and knowledge and climbing that ladder, which for a sysadmin leads from Junior, to Senior, to Lead, to Director, to CTO, and perhaps beyond… it’s all the same really, just with more power and influence and knowledge that are spread further and further across an organization or organizations.

I’ll admit that my approach and view of administration differs from the majority of my peers and onlookers. I see the craft as having a uniquely wide range of functions and roles. For instance, part of an admins job is to make technology decisions and recommendations, taken to that logical end you become a marketer who actively evangelizes a given technology solution… and for me that results in standing in the Sun booth at JavaOne and other conferences sharing the good news. Am I in marketing? No. I’m simply taking part of my role as a sysadmin to its natural and logical end. Another example, solving problems. You find a problem, you research and fix the problem, you apply that research to furthering the thing that you originally set out to fix and ultimately move in one of several direction such as documenting the thing, coding on the thing, or creating a new better thing. Are you now in tech pubs or development? No, you’re simply taking that role as a sysadmin to its natural and logical end.

My point being… administration is a career and a very fulfilling one. A challenging one, yes, but for those of us who have a passion for technology it’s exactly what we want to be doing with our lives and exactly what we plan to keep doing. Whether I’m labeling servers or writing kernel modules, I’m a sysadmin and proud of it.

JavaOne 2007: Days Zero and One

Wednesday, May 9th, 2007

I’m finally back from my first two days at JavaOne. The first day, day zero, since all the official JavaOne stuff really starts in full swing on Tuesday (today), was a really busy day. All at the same time JavaOne sessions, Startup Camp and CommunityOne were happening. Most of the Joyent crew including Joyuer’s Mark Mayo and Derek Crudgington, were at StartupCamp while I was over at CommunityOne. CommunityOne itself was a real challenge because so many great sessions were happening in parallel that you had to slip into one, then slide out half way through to try and get it all in. But, better too much of a good thing than the reverse.

I gave the first session in the OpenSolaris track. It was awesome to have a non-Sun community speaker give one of the sessions, it was even more awesome to be that speaker. They put me up in the largest room they had for sessions, seating over 1,000 people. The turn out was good but in such a massive room it looked super sparse (maybe 100 or so people?). It was a unique experience to present with two projectors on a big podium stage and full AV crew in the room. It was fun getting mic’ed up and such. Everyone was really pro and helpful getting me acustom to how things with with timers and timing lights and stuff. (They have 3 lights to indicate how close your coming to the end of your session time.)

So my session was given the ambitious title (not chosen by me) Introduction to the OpenSolaris Operating System, but I was given only 55 minutes to present. I’m glad to say that I made it through it, albeit at a blistering pace, and only went over my time by 35 seconds. My slides are online as Flash or PDF: Introduction to the OpenSolaris Operating System Slides. You’ll notice there is A LOT thats missing… but given the audience, title, and time limit I needed to thin down anywhere I could and address the talk toward a predominantly Java developer crowd, and so I focused on technologies that I believe (and use at Joyent) are fundamentally essential Solaris technologies for web deployment and bringing my answer to the “Does the OS matter?” question of yore.

Thanks to Jim for snapping some photo’s. Find his whole library of photos from JavaOne in his Flikr gallery.

One thing thats fun about JavaOne is how many people in the Solaris organization are present. I won’t even bother naming names, the list is too long, but its really like a big party chatting with folks you haven’t seen in a while, catching up, swapping stories and making new connections with interesting people… oh, and customers too. I know its called “JavaOne” but its really so much more than just a Java conference and it really has become the event of the year.

One name I will drop is Glynn Foster. Super kool guy… I knew he was a great pick for the OpenSolaris Governing Board (OGB) but after swapping some notes and talking about things a bit I realize he’s a much better balance to the board than I previously realized.

JavaOne has been a blast. Having my fellow Joyeur’s Mark and Derek in California has been awesome. So far we’re two days into the week and a great week its been. Tomorrow I’ll be away from the show while we have some Joyent Systems Team meetings on direction and dig deep into solving some real interesting issues that we need to solve in the way we manage our Accelerator product (I really wish I could talk about those things, really fascinating stuff that we’re doing with Solaris Containers, far beyond what anyone else imagines doing with them and managing them, but we do have to have some secret sauce for now). On Thursday I’ll be back at the show, so if your in the Bay Area or at the show just head toward the Sun booth and look for the guy in the kilt.

Also, quick plug, if your at the show please come by the Joyent booth and talk with us about Startup Essentials and Glassfish hosting! Glassfish rules and I really want to make Joyent Accelerator’s the premier hosted Glassfish solution!

Introduction to OpenSolaris @ JavaOne’s CommunityOne

Wednesday, May 2nd, 2007

The schedule is up for the CommunityOne Day at JavaOne. CommunityOne will run all day on Monday May 7th. I’ll be speaking at 11:05am as the first session in the OpenSolaris Track: Introduction to the OpenSolaris Operating System. Given the audience and the short time span this will be a high-level overview of OpenSolaris including our history, our community, our governance model, and a quick run through of what is what (SX:DE vs SX:CE vs BFU & Code, etc) and then spend most of our time going over a range of features in OpenSolaris including Zones, ZFS, SMF, Resource Control, and how all these things can work in tandem for deployments of your Java (or Ruby, or Python, or whatever) applications. DTrace will largely be skipped because it has its own session later.

This is NOT going to be a nitty gritty everything you ever wanted to know about Solaris talk… I’d love to do that but we just can only fit so much into an hour session, instead it will focus on what can be done, how people (such as all of Joyent’s customers) are using them today, and how you can get more information on specific features that your interested in. I highly recommend people who are deploying on Linux or BSD come by and just see what OpenSolaris can offer you and get some perspective on what it can offer you.

For those who can not attend, I’ll put my slides online the day of the event and possibly an audio recording.