Bonnie ++ Benchmarks on the Intel X25-M v1.4 Firmware Update

I updated the firmware on my X25-M today. It was a completely pain-free procedure. Just burn a CD, boot from the CD, say yes a few times, and reboot.

I added a new set of Bonnie++ benchmarks to my first set of Intel X25-M benchmarks.

Unfortunately, the new benchmarks aren't a good comparison. I have been using the drive for a month now and I probably have 100 GB worth of rewrites on the drive.

There were two obvious improvements. Sequential input is up 30%, and CPU usage during random seeks is down 12%.

I can't wait to try running another benchmark after I get some TRIM support in my kernel.

Android, K-9 Mail, and IMAP IDLE (Push Email)

The single most disappointing application that came installed on my T-Mobile G1 was the default email application. The very first thing I noticed was the horrendous IMAP support. I have a very well organized mail account. I might have a have dozen or so folders at the top of my folder hierarchy. The Android email application just flattens out all of my 100+ sub folders out into a huge, difficult to navigate list.

K-9 Mail

My search for a better mail app lead me to K-9 Mail. K-9 is a fork of the stock Android email application with quite a few improvements.

K-9 still flattens out my folder list but lets me choose which folders I would like to display and sync. Fortunately, I really only want quick access to five or six folders while I'm on the go.

Push Email

The beta release of K-9 supports the IMAP IDLE feature. This allows it to stay connected to the IMAP server so that it can instantly be notified when a new message arrives. This is much better for me than waiting up to 5 minutes to see a new message arrive.

Improved Message List

K-9's message list view is a huge improvement over the stock mail client. The view is much more condensed and looks like it fits about twice as many messages on the screen at the same time.

So far there is only one ChatterEmail feature that I miss. It had a summary view that displayed emails from multiple mailboxes on one screen in chronological order. Each message was color coded so that you could very easily tell which account each message belonged to. I saw a few mentions of ChatterEmail in the K-9 issue tracker, so I know I'm not the only one who misses this feature.

My New Android Phone and Cyanogenmod 4.1.999

I finally broke down and replaced my long in the tooth Palm Treo 650 with a T-Mobile G1 (a.k.a. HTC Dream). The only major complaint I had with the Treo was stability. It used to like to reboot itself about once each day…

So far I'm mostly working on replicating all the functionality that my Treo had. Almost everything on the G1 meets or exceeds the capabilities of the software I had on my Treo. Some software has both improvements and regressions compared to the Treo, but overall I'm pretty happy so far.

Cyanogen 4.1.999

I only ran the stock firmware long enough to install the Cyanogen firmware, so I can't talk about all the specific details that are different from the stock firmware.

There are some interesting improvements behind the scenes, though. The Cyanogen firmware uses compcache and Con Kolivas’s BFS process scheduler. I'm already a heavy user of compcache on my laptop, and I've been testing the BFS scheduler as well.

I've really only had one issue so far with the 4.1.999 firmware. Every once in a while all the icons disappear from the launcher and the phone has to be rebooted to get them back. It seems to be a known issue with the experimental firmware. I doubled the size of the compcache swap space and I didn't see the problem for a few days. I can only assume that the race condition is less likely when the phone is more responsive.

Neat Things I'd Like To Do With Android

I would like to get rsync and cron running on it. I think it would be very nice to have automated wireless backups that are always likely to be in my pocket. I'm hoping to be able to do it without having to rely on having Debian on my SD card.

OpenVPN might be interesting, but I don't currently have a real need for it. A few years ago this would have been a top priority for me, though.

Saving Space With fusecompress

Update: Fusecompress has been completely unmaintained for quite a long time.

I have been using a fuse compressed file system for a very long time now. Space used to be a bit tight on my old laptop’s 60 GB hard drive, and the space savings haven’t been hurting at all. I have about 4 GB of documentation stored in text, html, and PDF files that I like to carry with me. I also like having it indexed by Gnome Tracker, which means it can't just be sitting in an archive.

I was previously using fuse-zip. It did its job very well and I really liked the fact that it was just mounting plain old standard zip files. It supported writes, but it only committed changes when the file system was unmounted. That was very inconvenient and it took quite a while to recompress 1-2 GB of data when I was only adding a few MB worth of files.

Now I have recently switched to fusecompress. The only thing I dislike is that it does not use a standard archive behind the scenes. I'm using bzip2 as the compression method and I had to tell fusecompress that it was, in fact, OK to attempt to compress PDF files.

Since fusecompress compresses individual files, I am not achieving quite as much compression as I was with fuse-zip, but it is quite close. I am don't mind trading a standard archive format for immediate commits of my writes.

Fix for Karmic Koala 64-bit Flash Plugin

I upgraded my laptop to the 64-bit Ubuntu Karmic Koala beta yesterday. For me, Flash was very broken…

The 32-bit Plugin

Ubuntu defaults to installing the 32-bit Adobe Flash plugin and runs it under nspluginwrapper. When I run the plugin this way it will not accept mouse clicks properly. This seems to be a known issue. The bug reports make it sound like disabling compiz fixes this… I don't run compiz, I run the Sawfish window manager. I tested Metacity and it works just fine.

The 64-bit Plugin

Next I tried disabling the 32-bit plugin so that it would use the 64 bit plugin that I already had installed in my .mozilla directory. Mouse clicks worked… Unfortunately, it was crashing constantly. I couldn't even load gmail without crashing Firefox.

Is it Firefox's Fault?

I have both Firefox 3.0 and 3.5 installed. Both were just as crash happy. I was hoping it would be as simple as blaming Firefox 3.5…

Firefox in a Jaunty chroot

I had a 64-bit Jaunty chroot environment already sitting on my hard drive. It only took a few commands and a little waiting before I had Firefox and the 64 bit Flash plugin from Adobe installed in the chroot. It ran perfectly.

I compared the output of ldd libflashplayer.so from inside and outside the chroot. One extra library was showing up in the chroot, libresolv.so.2.

How to Fix It

Just install the libadns1 package:

sudo apt-get install libadns1

That fixed it for me. As always, your mileage may vary!

Screencast: yasnippet for emacs Now Supports Snippet in a Snippet

I am pretty excited that yasnippet can now expand a snippet from inside another snippet. I've slowly been tweaking my own snippets to be able to better take advantage of this new feature. I've already gotten most of my Moose snippets working well. I am very happy that I was able to get them to indent pretty well without any manual intervention.

I’ve worked pretty hard to overload my tab key. I am using it for hippie-expand, yas/expand, and indenting. It probably does what I want to over 95% of the time. I do run into two problems with this, though.

I can't call hippie expand from a snippet. I suppose I could have an extra hippie-expand binding, but I don't really like that idea. I may break down and set one up, though, because I haven't thought of a better solution.

Sometimes my tab key calls hippie-expand when I want to indent. This is the one that drives me nuts because I can't predict when it is going to happen. I tried adding an extra indent bind, but I just can't train myself to use it. I've used the tab key for indenting for so many years that the habit has just become too hard to break.

I have my enter key bound to newline-and-indent but I still have to manually hit my indent key sometimes. I've thought about having the enter key also run an indent on the current line. I haven't done it because I don't like the idea of accidentally changing the indentation of existing lines. I don't need to pull indentation changes into version control for no good reason.

How I Configured My Tab Key

I cheated. I tried every trick I could find to bind yas/expand, hippie-expand, and indenting to the same key and none of them were working. I ended up putting yas/hippie-try-expand at the front of my hippie-expand-try-functions-list and indent-for-tab-command at the end.

The only side effect this seems to have is that I get a No expansion found message on a successful indent. That doesn't bother me at all, though.

Measuring Battery Runtime Improvement With the Intel X25-m

There seem to be plenty of X25 performance benchmarks all over the Internet. Performance may have been one of the major reasons I upgraded my laptop to an X25, but it most certainly wasn't the only one.

Most of the power consumption benchmarks I have found don't seem to align very well with my usual on-battery workload. I am armed with a fresh battery and a new 80 GB X25-M, so I have to do some testing!

The Test Hardware

The laptop is a Dell Inspiron 6400 with a 1.66 ghz Core 2 Duo, ATI Radeon x1400 (using open source Radeon driver), Intel 3945 wireless card, and 4 GB RAM (only 3.16 GB usable). The laptop is running 64-bit Ubuntu 9.04.

My Testing Workload

I made sure most of my usual applications were up and running before I unplugged the power cord. That would include emacs, Firefox, Thunderbird, Pidgin, and Powertop. Bluetooth is turned off, Wi-Fi is connected to an 802.11a network, and the LCD brightness is set to 48%.

I spent run time of the battery doing some or all of the following:

  • Editing Perl code with emacs
  • Reading email
  • Reading my RSS feeds with Google Reader
  • Stumbling
  • Trying to beat Hard creeps in the Desktop Tower Defense Sandbox mode
  • Editing this blog entry
  • Cooking a frozen pizza
  • Brewing coffee in my Moka Express pot

The graphs!

For some reason my custom-built 2.6.31 kernels are very power hungry. They are built based on the options in Ubuntu’s 2.6.28 kernel config from my /boot directory, so they should not be configured too much differently than the Ubuntu 2.6.28 kernel. I don't have enough evidence to make me believe that 2.6.31 is any less energy efficient than 2.6.28.

It looks like I'm getting 10% more runtime with the SSD. I'm pretty happy with that. My 3-year-old laptop has lots of outdated and power hungry components. The lowest wattage number I have seen out of powertop during these tests was in the 18.5 watt range. The long-term averages powertop was giving me were in the 22-23 watt range.

I'm under the impression that modern laptops with LED backlights, better chipsets, and newer, faster processors can get into the 16 watt range with the LCD brightness turned all the way up (I was running mine at half). It wouldn't surprise me at all if a newer laptop would get a 15-20% improvement in runtime since their mechanical disk would be a larger percentage of total power.

Two Surprises Pointed Out By powertop

My laptop is already tweaked pretty heavily to save power, so I was surprised to see these two programs causing wake-ups.

PostgreSQL was causing about 5% of my CPU wake-ups. I really didn't want to have to shut down PostgreSQL so I was very happy to learn that there is a configuration option that can be tweaked in postgresql.conf. My postgresql.conf had the option commented out:

#bgwriter_delay = 200ms                        # 10-10000ms between rounds

I changed mine to 10000ms and I now I rarely see it show up in powertop.

The other surprise was gnome-power-manager. I thought I remembered it being fixed a few years ago. It used to wake up many times per second the entire time it was running. The current version that came with Ubuntu 9.04 seems to only be partially fixed. It seems that if it is running and the AC power state is changed it will revert to its old behavior of waking up 10-20 times per second.

Killing gnome-power-manager and restarting it will fix it until the next time the AC power state changes. I need to work on making that happen automatically.

Some Final Thoughts

The Intel X25-M is supposed to use 150mw when active and about half that when idle. Most mechanical drives don't even get down to 150mw when idle, and they require 1 to 2 watts or more when active.

A 10% increase in runtime on my 20-watt laptop fits those numbers pretty well.

I would imagine that power gap grows wider as the disk load increases. My usual on-battery workload is very light on the disks but it sure doesn’t give them much chance to spin down.

Intel X25-M G2 vs. Old Laptop Drive Benchmarks

I thought it would be a good idea to run some quick benchmarks on my old mechanical drive before I wipe it and use it in another laptop. I have some pseudo-scientific charts and numbers here, but I also have some "me with a stopwatch" boot time numbers. They mostly only show how abysmal my boot-up times are, mostly because of all the extra junk I have starting up.

I clocked the time from hitting the power button to seeing grub at well under 2 seconds. For both tests, I brought up the grub menu and I did my best to hit enter and start my stopwatch (a.k.a. my old Treo 650) at the same time. When the GDM login appeared, I stopped the clock.

The 120 GB 7200 RPM laptop drive came in at a whopping 36 seconds. The X25 gave a much better result of 15 seconds. The software installed on both drives is exactly the same, but the root file system on the mechanical drive is ext3 instead of ext4. It isn't quite apples to apples, but it is what I have here in front of me.

Some Real Bonnie++ Benchmarks

Show:

Charts are nice, but here's the actual numbers to go along with it:

Version 1.03c                           ------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
Laptop PIIX Deadline X25-M          6464M 48265  96 81809  23 37340  11 36500  70 108486  18  5502  12
Laptop AHCI Deadline X25-M          6528M 45836  96 74973  15 36691  10 43531  78 139407  17 13431  39
Laptop PIIX CFQ X25-M               6464M 47577  96 82931  21 38706  11 46920  91 116400  20  4482  26
Laptop PIIX CFQ 120 GB 7200 RPM     6464M 45043  91 53992  14 19104   5 37053  81  46116   7 161.7   0
Laptop AHCI CFQ 120 GB 7200 RPM     6528M 41883  87 49245  10 17348   4 43423  82  56122   7 178.1   0
Xen Server Deadline RAID 10         1080M 68909  97 128789 45 48402  18 55770  91 106948  24 326.2   0
Laptop PIIX DL X25-M v1.4*          6280M 41521  77 69559  15 23754   6 30857  78 142922  13  5309   0
Laptop PIIX DL X25-M v1.4 TRIMed**  6280M 50354  98 66394  16 24923   8 31937  80 119348  19  4569  10
Laptop AHCI DL X25-M v1.4 TRIMed*** 6528M 42587  81 49367  11 23277   7 41588  81 150217  21 14115  35
Core I7 Laptop AHCI DL X25-M        8192M 56415  89 87157  11 39827   9 69707  98 298590  29 16150  45
KVM to FreeNAS                      4096M   349  92 15619   4  6191   2  1884  95  57328   8   590  37

I included an old benchmark of my web server. It has four 7200 RPM SATA drives in a Linux software RAID 10. I am very happy with how well the X25-M compares to the array.

I tested both the CFQ and Deadline IO schedulers on the X25. The machine felt more responsive when the test was running on the Deadline scheduler. I started a to test the noop scheduler but the machine felt much worse than it did during the CFQ test. I didn't bother letting that test continue after that.

Having AHCI and NCQ improves read performance pretty significantly and it seems to improve seek time dramatically, especially for the SSD. If you are able to use AHCI, I would recommend it.

I wanted to run some bonnie++ benchmarks against the X25 because I couldn't find any anywhere else. Bonnie++ doesn't do a very good job of highlighting the biggest advantage of the X25 because it only has one random access test.

Results From the "Butt Dyno"

Every time you make a performance modification to your car you have to take it for a test on the "butt dyno." It just means you get in the car and see how much faster it feels. Sometimes the performance boost is mostly in your head, like when you upgrade to a K&N air filter or a bigger exhaust.

Sometimes you install a bigger turbocharger. I remember the last time I did that. I bet I had a great big smile on my face during that first shift from first to second gear. It made a very noticeable difference in the performance of the car.

That's the way the X25-M feels. Everything loads a bit faster and I/O intensive background tasks are much less likely to bog down the rest of the machine. I sure didn't enjoy booting up the old platter drive to run the benchmarks on it…

How Hot is the X25-M?

When I pulled the X25 out to swap in the old drive, I noticed that it was warmer than I expected it to be. I imagine the metal housing makes it feel a bit warmer than an overworked SD card. My brain thought it was almost as warm as the old drive got.

I was very wrong. I pulled the mechanical drive out almost immediately after the bonnie++ runs. I would describe it as actually being hot. I put it down pretty quickly; it was uncomfortable to hold.

*Update 2009-10-27: X25-M v1.4 Firmware Update

I reran Bonnie with the latest firmware update. My test methodology is a little bit unfair. The previous tests were done on a very fresh drive. I'm now over 80% full and I probably have hundreds of gigs of rewrites on this drive.

I probably should have run a quick benchmark before I updated the firmware, but it is too late for that now! I am not surprised that most of the numbers went down. I am very surprised the sequential input speed is up by 30%. That is outperforming even my previous speeds with AHCI enabled.

**Update 2009-11-15: X25-M after a TRIM

I was able to TRIM my X25-M, so I reran the bonnie. Small sequential output was improved. I have no idea why sequential block input was up so high on the last test.

***Update 2009-12-15: X25-M freshly TRIMed with AHCI and 2.6.31 kernel with BFS

I was pointed to a better AHCI quirks patch in a comment by felix krull.

The patch is working very well so far, and I was itching to run a benchmark with AHCI and the newer v1.4 X25-M firmware. This benchmark may not be quite apples to oranges, though… I'm currently running Linux kernel version 2.6.31 patched with the BFS scheduler and most of the preempt options turned on.

Update 2010-03-24: X25-M transplanted into my new HP DV8T Core i7 laptop

The SATA 150 bottleneck is now gone. I expected it to break 200MB/s on the sequential input test but I certainly didn't expect to be approaching 300MB/s.

Update 2012-02-08: Bonnie++ in a KVM virtual machine…

This one is quite unrelated to the original topic of this article but this seems to be the place where I’ve been dumping all my random disk benchmarks…

I recently helped a friend build his FreeNAS box and I figure try out its iSCSI functions and hammer on his new home network a little bit. I’m running a KVM virtual machine on my laptop. KVM is using connecting iSCSI target over gigabit ethernet to the FreeNAS server. The disk is visible up as a KVM/QEMU disk to the virtual machine.

The iSCSI target is a file-based extent sitting on a four-drive RAID-Z6 volume. The results are less than stellar but not really any worse than I was expecting. I’m impressed that the IOPS is nearly twice as high as my benchmark on my old RAID 10 Xen server.

Intel X25-M G2 Upgrade, and a Lack of AHCI

My shiny new 80 GB second-generation Intel X25-M has arrived.  So far I am very happy with it, and it is very fast.  I don't have many real numbers yet, just a couple of bonnie++ benchmarks:

    Version 1.03c       ———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     cfq           6464M 47577  96 82931  21 38706  11 46920  91 116400  20  4482  26     deadline      6464M 48265  96 81809  23 37340  11 36500  70 108486  18  5502  12

    xenhost       1080M 68909  97 128789  45 48402  18 55770  91 106948  24 326.2   0

The first two entries are my laptop with the cfq and deadline schedulers. The third entry is an old benchmark of the server hosting all my Xen virtual machines.  It is running Linux software RAID 10 on four 400 GB 7200 RPM SATA disks.

At first glance I was pretty happy with how well the X25 kept up with the RAID 10, and the numbers certainly beat my old laptop disk by a huge margin.  I was especially happy with the 4500-5500 random seeks per second. The numbers seemed a bit low to me, though. So I tried a simpler test:

    root@zaphod:~# dd if=/dev/sda2 of=/dev/null bs=2M count=500     500+0 records in     500+0 records out     1048576000 bytes (1.0 GB) copied, 10.5582 s, 99.3 MB/s

All my simple tests with dd are pegged out at around 100 MB/sec.  After doing some research, I learned that the BIOS in my laptop is setting my ICH7 chipset to compatibility mode.  This is limiting the drive to UDMA/133 speeds, which probably puts a real world upper limit in the 100MB/sec range.

The BIOS in my Dell Inspiron 6400 does not let me change the mode of the ICH7.  There seems to be at least one kernel patch that attempts to enable AHCI after boot up.  I might give it a try in the next few days and see what the numbers look like.

This has still been a huge performance increase over my 120 GB, 7200 RPM laptop drive, even without being able to use the full potential of the X25.  My unscientific "one-hippopotamus, two-hippopotamus" boot-up test easily comes in at under 10 seconds from grub to login screen (I'm running Ubuntu 9.04).  I am pretty certain that the old drive was in the 15-16 second range.  I'll have to boot the old disk, use a stopwatch, and run some benchmarks later in the week.

The BIOS in my Dell Inspiron 6400 does not allow me to set the ICH7 SATA controller to AHCI mode.  I grabbed a fresh copy of the Linux 2.6.31 kernel source and applied this AHCI quirks patch to it.  I copied the Ubuntu /boot/config-2.6.28-15-generic to the new source directory and ran a make oldconfig.

With the stock Ubuntu 2.6.28-15-generic amd64 kernel dmesg showed that the controller was using the ata_piix driver and NCQ was disabled:

    [    1.696401] scsi0 : ata_piix     [    1.696594] scsi1 : ata_piix     [    1.860550] ata1.00: 156301488 sectors, multi 8: LBA48 NCQ (depth 0/32)

With the 2.6.31 kernel with the patch applied dmesg showed:

    [    1.918218] scsi0 : ahci     [    1.918414] scsi1 : ahci     [    2.400540] ata1.00: 156301488 sectors, multi 8: LBA48 NCQ (depth 31/32)

This is definitely an improvement, so I ran another quick dd to see if there was a change:

    root@zaphod:~# dd if=/dev/sda2 of=/dev/null bs=2M count=500     500+0 records in     500+0 records out     1048576000 bytes (1.0 GB) copied, 8.45229 s, 124 MB/s

That was definitely an improvement, so I thought it was time to run bonnie++ again:

    Version 1.03c                     ———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     2.6.31 ahci deadline        6528M 45836  96 74973  15 36691  10 43531  78 139407  17 13431  39     2.6.28 piix deadline        6464M 48265  96 81809  23 37340  11 36500  70 108486  18  5502  12     2.6.28 piix cfq             6464M 47577  96 82931  21 38706  11 46920  91 116400  20  4482  26

Enabling AHCI and NCQ gave me a small decrease in sequential output performance, a very nice increase in sequential input performance, and an insane increase in seeks per second.  I can only assume that the seeks per second was helped so tremendously by NCQ.

So far I have found two major issues with using this kernel patch. The laptop won't resume from a suspend, and my optical drive has disappeared. From what I can tell, these two problems vary by machine.

On an unrelated note, my Wi-Fi (iwl3945) connects much faster with 2.6.31 than it did with 2.6.28.

Forcing AHCI To Increase Intel X25-M Performance

The BIOS in my Dell Inspiron 6400 does not allow me to set the ICH7 SATA controller to AHCI mode. I grabbed a fresh copy of the Linux 2.6.31 kernel source and applied this AHCI quirks patch to it. I copied the Ubuntu /boot/config-2.6.28-15-generic to the new source directory and ran a make oldconfig.

With the stock Ubuntu 2.6.28-15-generic amd64 kernel, dmesg showed that the controller was using the ata_piix driver and NCQ was disabled:

[    1.696401] scsi0 : ata_piix
[    1.696594] scsi1 : ata_piix
[    1.860550] ata1.00: 156301488 sectors, multi 8: LBA48 NCQ (depth 0/32)

With the 2.6.31 kernel with the patch applied, dmesg showed:

[    1.918218] scsi0 : ahci
[    1.918414] scsi1 : ahci
[    2.400540] ata1.00: 156301488 sectors, multi 8: LBA48 NCQ (depth 31/32)

This is definitely an improvement, so I ran another quick dd to see if there was a change:

root@zaphod:~# dd if=/dev/sda2 of=/dev/null bs=2M count=500
500+0 records in
500+0 records out
1048576000 bytes (1.0 GB) copied, 8.45229 s, 124 MB/s

That was definitely an improvement so I thought it was time to run bonnie++ again:

Version 1.03c                     ------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
2.6.31 ahci deadline        6528M 45836  96 74973  15 36691  10 43531  78 139407  17 13431  39
2.6.28 piix deadline        6464M 48265  96 81809  23 37340  11 36500  70 108486  18  5502  12
2.6.28 piix cfq             6464M 47577  96 82931  21 38706  11 46920  91 116400  20  4482  26

Enabling AHCI and NCQ gave me a small decrease in sequential output performance, a very nice increase in sequential input performance, and an insane increase in seeks per second. I can only assume that the seeks per second was helped so tremendously by NCQ.

So far I have found to major issues with using this kernel patch—the laptop won't resume from a suspend and my optical drive has disappeared. From what I can tell, these two problems vary by machine.

On an unrelated note, my Wi-Fi (iwl3945) connects much faster with 2.6.31 than it did with 2.6.28.