Titan Quest is an awesome action role playing game!

For as long as I can remember, I have always been a fan of the “hack and slash”-type action role playing games. I started out years ago playing Diablo, and eventually purchased Diablo 2 and all of the add-ons. Since Diablo 3 isn’t slated to be released for a few more months, I started looking to see what other games would quench my thirst for a new ARPG game. After a bit of googling, I came up with three possibilities:

Titan Quest

Torchlight

Sacred 2

I read a bunch of reviews on the web, and decided to pick up a used copy of Titan Quest. I’ve only spent about 12 hours playing the game, but I can safely say it stacks up to the Diablo series in almost every way! It’s got the hacking and slashing I’ve grown accustomed to, there is next to no learning curve, and all of the controls are very intuitive. Given that I only paid $8 for the games with shipping on Amazon (if you are looking for CDs, movies or games, check out the “used” links on Amazon! These will save you a lot of money over the long term), I am super happy with my purchase! If you are aware of any additional games that fall into the ARPG realm, please leave me a comment! I would love to hear from ya’ll!

Why oh why is grub eating CPU resources in a VirtualBox VM?

While reviewing the performance on my desktop today, I noticed that one of my VirtualBox virtual machines was consuming 100% of one CPU:

Swap:  2097144k total,    59504k used,  2037640k free,  4004568k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 1895 matty     20   0 2037m 1.0g  57m S 96.2 13.0 831:13.06 VirtualBox    

This was somewhat perplexing, given that the host in question was sitting at a grub> prompt (I’m cleaning up my grub notes to post to my website, so stay tuned!). When I strace’ed the VirtualBox process (having a system encapsulated in a userland process makes debugging these types of issues super easy), I noticed that the process was issuing poll()s and read()s in a tight loop:

[pid  1895] poll([{fd=15, events=POLLIN}, {fd=22, events=POLLIN|POLLPRI}, {fd=24, events=POLLIN|POLLPRI}, {fd=25, events=POLLIN|POLLPRI}, {fd=26, events=POLLIN|POLLPRI}, {fd=27, events=POLLIN}, {fd=28, events=POLLIN}, {fd=14, events=POLLIN}, {fd=29, events=POLLIN}, {fd=34, events=POLLIN}], 10, 0) = 0 (Timeout)
[pid  1895] read(14, 0x1492424, 4096)   = -1 EAGAIN (Resource temporarily unavailable)
[pid  1895] read(14, 0x1492424, 4096)   = -1 EAGAIN (Resource temporarily unavailable)
[pid  1895] read(27, 0x14fda94, 4096)   = -1 EAGAIN (Resource temporarily unavailable)

At first I was perplexed by this, but upon further reflection this makes complete sense. The grub interpeter is executing a loop that polls the keyboard IO port for data, and continues to do so over and over again. Since most systems don’t stay at the grub prompt for extended periods of time, the grub developers didn’t use the HLT instruction to idle the CPUs when no actual work was being performed. For some reason this made me extremely curious about microprocessor implementations, so I started reading through the AMD64 Architecture Programmer’s Manual volume 1. So far this is a fantastic read, and I wish I would have read through it years ago!

Configuring and monitoring the T5220 hardware RAID controller

The Sun T5220 comes with a built-in RAID controller, which supports all of the standard RAID levels (0 – 6). Configuring one or more devices to participate in a RAID Configuration is dead simple, since you can use the Solaris raidctl utility. The last T5220 I configured had a root file system that was going to reside on the built-in RAID controller, so I had to boot into single user mode to create my volume. To create a RAID1 volume using the devices c1t0d0 and c1t1d0 (you can get the devices via format or raidctl), you can run raidctl with the “-c” (create raid volume) option, and the names of the disks to mirror:

$ raidctl -c c1t0d0 c1t1d0

Creating RAID volume will destroy all data on spare space of member disks, proceed (yes/no)? yes
/pci@0/pci@0/pci@2/scsi@0 (mpt0):
        Physical disk 0 created.
/pci@0/pci@0/pci@2/scsi@0 (mpt0):
        Physical disk 1 created.
/pci@0/pci@0/pci@2/scsi@0 (mpt0):
        Volume 0 created.
/pci@0/pci@0/pci@2/scsi@0 (mpt0):
        Physical disk (target 1) is |out of sync||online|
/pci@0/pci@0/pci@2/scsi@0 (mpt0):
        Volume 0 is |enabled||degraded|
/pci@0/pci@0/pci@2/scsi@0 (mpt0):
        Volume 0 is |enabled||resyncing||degraded|

I also wanted to be able to use the cache on the RAID controller, which can be enabled using the raidctl “-p” (set property) option:

$ raidctl -p “wp=on” c1t0d0

Once I had a working RAID1 volume, I created a label on the device with fdisk and proceeded to perform a Solaris 10 installation. After the volume synchronized and Solaris was re-installed, I was able to run raidctl with the “-l” option to display the state of the volume:

$ raidctl -l c1t0d0

Volume                  Size    Stripe  Status   Cache  RAID
        Sub                     Size                    Level
                Disk                                    
----------------------------------------------------------------
c1t0d0                  136.6G  N/A     OPTIMAL  ON     RAID1
                0.0.0   136.6G          GOOD    
                0.1.0   136.6G          GOOD    

The raidctl utility is rather handy, and I created a checklsi script that can be run from cron to check the status of your RAID controllers (from some limited testing it appears FMA doesn’t detect disk faults).

How to become a VMware certified professional (VCP4)

I passed the Vmware certified professional 4 (VCP4) exam this past Monday. The exam was a bit more difficult than I expected, though I passed it with flying colors. If you are thinking about taking the exam, or are interested in learning more about vSphere, you will definitely want to start out by reading Scott Lowe’s Mastering VMware vSphere book. Scott did an excellent job putting the book together, and it’s concise and easy to follow (I’m curious how Mike Laverick’s vSphere implementation book compares to Scott’s).

After you read through Scott’s book, you should check out Simon Long’s study notes! Simon has links from the VCP4 blueprint to every piece of documentation you will need to pass the test, and you will learn a ton in the process! Now, there will come a morning or afternoon when you need to wander to the testing center to sign your life away and take the exam. Get there 30 minutes early, and look over the vreference card! This card contains a TON of ESX material in a single location, and will ensure that all of the information you studied is fresh in your mind. Best of luck to anyone taking the exam!