For the last couple of years I have been enjoying my Dell Precision M6400 “mobile workstation” laptop. It is a workhorse, and I’ve had several people comment on it over the years. I run Windows 7 Professional 64-bit edition with 4GB of RAM and, until a few days ago, dual 7200RPM SATA hard drives.
You see, I’m paranoid about my data. All of my work revolves around it, and without the laptop in good working order I can’t do my job. As someone who’s lost data in the past (pain/loss = extreme) I go to great measures to keep it safe. The mirrored RAID 1 array with two hard drives served two purposes. First, it kept a copy of my data on two disks in real time (I would also add that one disk was a Western Digital and the other was a Seagate to further distribute the risk across manufacturers). Second, it provided added availability for the laptop, as if one disk went belly up on me it would just give me an alert about it and keep right on humming along. Add a weekly full system image to an external hard drive (via Acronis True Image Home 2011) and a combination of Carbonite and Dropbox to push important files off-site and you could call it a pretty intense data protection plan. But I digress.
One of the problems with running traditional hard drives, even at 7200RPM, is that they are fairly slow. This is so important that when I’m deploying critical servers I use three or more 15k RPM drives, usually as part of a RAID 5 array, to help minimize disk I/O time. With the laptop, 7200RPM, even in a RAID 1 array, was just not cutting it any longer. Things were getting to be too slow, and disk I/O was the primary culprit. Time to upgrade to a solid-state disk (SSD)!
I found a decent deal on an Intel 320 series 300GB SSD on eBay and placed my order. A few days later, it arrived and I was anxious to get started. Since I already run a RAID 1 mirror, my first thought was to pull one of the existing drives, add the SSD, and then tell the RAID controller to use this new drive as the second member of the RAID array. Herein lies my first problem. The Windows volume from the existing array is 297GB which would easily fit on to the new 300GB drive. Unfortunately, the existing drives were actually 320GB in size, and the RAID controller requires a replacement array member to be of equal or greater size (makes sense). Second, Intel’s marketing department apparently defined 1GB differently than the computer defined 1GB, because the system only recognizes it as a 279.36GB disk, so even it’s too small to step in as an array member even if the existing disks were only 300GB as I was mistakenly believing that they were.
On a related note, if this had succeeded, my plan was to have the controller mirror the data over to the SSD, and then remove the remaining standard hard drive leaving only the SSD in the system. Then, the plan was to simply demote the RAID 1 array back to a standard single-disk configuration. Unfortunately, as I later learned, demoting an array back to a single-disk on this RAID controller actually formats the drive and you lose all the data in the array, so that wouldn’t have worked even if the drive had been, say, 500GB and large enough to step in as an array member. So, no dice there.
I considered simply starting over and installing Windows 7 and all of my software from scratch, but that would have taken days to get finished and likely weeks to work through all of the minor configuration changes and misc. software tools that I use, so I really did not want to go that route. Ten years ago when I was super-crazy about these things and reinstalled Windows every few months just for the heck of it I wouldn’t have thought twice. These days, I just want it to work, and my Windows installation works pretty well for me aside from the slow disk I/O, so I wanted to keep it in-tact.
I mentioned earlier that I use Acronis True Image Home 2011 for my local external disk backups. Fortunately, Acronis also has a disk mirroring tool included with that software which is capable of mirroring one disk to another, even if the new disk is smaller than the old one. Perfect! The total data size on the old disk was smaller than the new disk’s total capacity, so it would be able to shrink the partition accordingly as part of the transfer. I got the transfer all configured, rebooted the computer, and the imaging tool took care of the rest. The one thing that I wasn’t quite prepared for was the amount of time this would require. All told, it took a solid eight hours for it to do its thing. When it was done, however, it had moved both of my data partitions to the new disk and shrunk the larger one to fit on the new, smaller, disk.
One reboot and a BIOS setting change to make the SSD the primary boot device and I was up and running on the SSD. The first thing I did was to do some housecleaning; moving some old archive files out of the laptop and to an external hard drive for permanent storage. This is stuff I rarely use, if ever, and I won’t miss it at all in my daily work. Having the smaller disk necessitated clearing out some old stuff so I’d have ample breathing room to work with. The next step was refreshing my full system backup to another external hard drive. I allowed that to run overnight last night and was happy to see that it completed (and verified) properly so I know I have a completely current system image in case disaster strikes. The last step was to simply remove the last remaining standard hard drive and pack the two of them up for storage. If the SSD goes belly up on me I can at least pop in one of the old drives and restore my system backup and keep working.
Having a single drive in the laptop does make me a little nervous, as I don’t have the real-time mirroring and immediate fault tolerance like I did before. I do feel better knowing that there are no moving parts to break, and the failure rates for my use pattern are supposed to be pretty low. Having a regular full system backup and a couple of spare drives lying around does make me feel somewhat better about it though. One of the things I researched was simply putting in another SSD and putting them into a RAID 1 mirror like I did with the standard drives. That would certainly provide fault tolerance, but it would also likely significantly reduce the usable life of the drives.
You see, the downside of SSD drives is that the flash memory has a limited number of writes that can be made to each bit before it fails. SSD drives also have a number of features and tools which work with the operating system to help minimize the number of unnecessary writes to the disk to help prevent them from prematurely wearing out (e.g. the TRIM command to prevent write amplification). Unfortunately, using the SSD as a member of a RAID volume (at least with the Intel RAID controller in my M6400) does not allow those commands (notably, TRIM) to pass through to the SSD drive which can lead to write amplification, significantly degraded write performance, and premature wear on the flash memory. The whole point of moving to a SSD is increased performance, and putting two of them in a RAID 1 mirror would hurt that in a lot of ways, so I’ve chosen to stick with a single-disk configuration for the moment. Perhaps Intel will release a firmware update for the RAID controller which will correct this, but as of this writing I’ll just have to risk using the single drive.
Speaking of premature failure and limited writes, Windows 7 has a bunch of features that are designed to optimize performance on traditional hard drives which do not benefit, and can actually harm an SSD drive. These include Disk Defragmenter, Prefetch, SuperFetch, and ReadyBoost.
Disk Defragmenter is designed to rearrange data on a hard drive so that entire files are arranged together, sequentially, on the rotating platters so that read performance is improved. It’s a lot easier for the read head to pick up the data for a file when it’s all lined up in a row rather than randomly sprinkled throughout a lot of physical locations on the platters. The more it’s spread around (fragmented), the more the read head has to move around to read it, which makes read slower. The Disk Defragmenter physically groups all the file fragments together and makes reading data a lot easier and faster. An SSD doesn’t have a spindle or a moving read head, and can read multiple pages of flash memory at once regardless of where those fragments happen to be on the physical disk. This is what makes SSD drives so darn fast for reading data. This also means defragmentation is not necessary. Further, running a defragmentation program on an SSD will generate a lot of unnecessary writes to the flash memory which will lead to premature failure, and we don’t want that. It is recommended to de-select an SSD drive from the Disk Defragmenter schedule.
In Windows 7, you can do this by opening the Start menu and typing “disk” into the search box.
Disk Defragmenter should come up as one of the program options. Click that to launch the program.
With the Disk Defragmenter window open, click the Configure Schedule… button to open the schedule properties.
If you only have a single SSD installed, you can disable the scheduler entirely by unchecking the “run on a schedule” box and clicking OK. Otherwise, click the Select Disks… button to de-select your SSD drive and then save the changes. On my system, I simply disabled the scheduler.
I should also note that if you installed Windows 7 on an SSD from the beginning, the scheduler should already be disabled as Windows will detect the SSD during installation and make these changes for you as part of the installation process. Some SSD manufacturers also provide tools, such as the Intel SSD Toolbox, which will check for these settings and make the adjustments for you. These tools can also provide a lot of other information on drive health and other tools to help keep your SSD in top shape.
The other features I mentioned (Prefetch, SuperFetch, and ReadyBoost) are all designed to provide for caching commonly used files in a single location to allow for faster disk reads at boot time and when commonly used programs are launched. Since the SSD’s random read performance is so high, these optimizations are no longer needed and also contribute to unnecessary writes to the SSD drive. ReadyBoost is designed to use a smaller flash-based drive (such as a USB memory stick) as a caching location for commonly accessed files in general which would help to speed up a system using a traditional hard drive. With an SSD as the main system drive, it’s entirely unnecessary and Windows will disable it automatically.
These features can be disabled through the registry if needed. The following registry location is where you need to look:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Here you will find a few keys which should all be set to zero:
There are a number of tutorials out there on how to edit registry keys, so I will not give details here other than to say be extremely careful when editing the registry. If you mess it up you can make your computer unusable and require professional help to get it working again. I don’t recommend editing the registry unless you’re comfortable with the idea (then again, if you’re migrating data partitions from one hard drive to another and trying to get every iota of performance from your new SSD drive, you likely fall into this category anyway so I’m not sure what I’m worried about).
Overall, I’m very satisfied with my SSD. Previously, the Windows Experience Index for my computer was calculating a score of 5.2 for my disk access (even with the RAID 1 array to spread out reads). With the SSD and these settings it’s up to 7.2. Loading “bloated” applications such as iTunes happens a LOT faster. Everything dealing with intensive disk I/O happens faster (boot up, shut down, loading Photoshop, etc.). Upgrading to an SSD should help extend the life of my laptop another 2-3 years.
Next up is a memory upgrade. 4GB of RAM is nice, but I am beginning to bump into its limitations as I do more work with virtual machines and software gets more complex and I have to run more of it at once to be productive in my work (e.g. web server, ColdFusion 9, ColdFusion Builder, SQL Server 2008 Express, SQL Management Studio, Photoshop, over a dozen windows from four web browsers at once, and a barrage of misc. stuff like Dropbox and Carbonite running all the time). Throw a Windows XP virtual machine into the mix when I need to test with IE6 or IE7 and you’re talking some serious memory usage. (Someone I worked for once remarked that developers just ran a text editor and should be able to get by with inexpensive workstations; this is why I think he was completely nuts on that particular point and agree with Joel Spolsky on this one). I have a 16GB memory kit on the way which is the maximum that the Dell Precision M6400 can handle. That should give me lots of breathing room for the foreseeable future, as with Windows 8 on the horizon and my belief that Microsoft is about to create another “Vista-like” experience (e.g. nobody important is going to want to upgrade) I suspect Windows 7 and I will be spending a lot of quality time together.