Solid State Disks (or SSDs) using flash memory chips instead of a rotating plater/head assembly like traditional hard drives are great. All of my systems here have one as the primary disk. Especially in a laptop situation the extra reliability and a computer that is completely silent are very welcome, as is the speed. They are fast, really fast when reading data of the disk—Windows starts in few seconds and applications near instantly.
The problem is the write performance, and it gets worse with time. Writing data to a SSD* first involves first clearing a whole block and then writing data to it, and this block clearing is slow. To compound the issue, the filler/more used the disk the less likely there will be an already clear block. To the end user this clear/write cycle is worst with small random writes (e.g. a web browser writing to its cache, or version control software updating meta data—yes Subversion I’m looking at you!), and causes the whole machine lock-up for as much as 10 seconds at a time.
Windows 7 having been designed with SSDs in mind, includes support for the ATA Trim command. This allows Windows to tell the disk ‘the data here isn’t needed anymore’ and the disk can clear the block during idle time, providing available clear blocks for write operations. The catch is the SSD must support Trim, and none of mine do. Annoyingly I have one of the first generation 50nm Intel SSDs, which they have [apparently] have no intention of supporting Trim on; the newer 34nm drives released about 9 months later do support Trim.
So what can you do if you don’t have Windows 7 and/or a drive that supports Trim? On the face of it nothing, however then I got thinking… if you erased the whole disk with a tool that cleared all the blocks (a secure erase) that would get the drive back to factory and full performance. You’d then need to reinstall Windows and your applications, buying you about 3 or 4 months before the performance nose dived again. And after a reinstall there’d still be logical fragmentation on the disk, sure SSDs have no seek time, but if Windows thinks the file is fragmented it’s still going to issue 2 or more read operations, wait for 2 or more responses and reassemble the file.
I was reading about the image based backup and restore in the business/ultimate editions of Vista and 7. This takes your existing Windows install, with apps, data and all, and backs it up as a disk image to an external hard drive or dvd(s). The premise being if your disk fails or data gets corrupted you can restore from this image to exactly where you were before. And that was the solution I’d been looking for, a why of maintaining the disk without the major hassle, and without trim or Windows 7.
The SSD Optimistion Process †
- Delete unneeded temporary files and junk
- Defragment your SSD to remove any logical fragmentation
- Do a complete image based backup to an external usb drive (Control Panel > Backup and Restore Center > Windows Complete PC Backup)
- Boot off a MS-DOS CD
- Run a Secure Erase tool on the drive (like Secure HDDErase—v3.3 is required for Intel SSDs)
- Restart with the external drive attached
- Boot off your Vista or 7 Ultimate DVD
- Select the restore image backup option
Obviously this isn’t an instant process, but every few months it’s relatively painless especially compared with how annoying the lock-ups are.
* For those that are interested I have both SLC and MLC drives, and the lock-up issue seems to occur with both. The performance did degrade faster with the MLC unit though. And yes, I’ve done all the SSD related system and registry tweaks.
† Disclaimer: while this process worked fine for us, we take no responsibility for you trying it, and Timeshifting Interactive will not be held liable for any data loss or damaged drives resulting from your use of the above information. Always back up your data before trying something like this.



There is a somewhat easier solution that may be worth trying before the above process. I have confirmed that it works on my Intel X-25M 50nm SSD.
You need to make a large dummy file of zeros, that is slightly smaller then the amount of free space on your drive. In this command i set count to 18 because i had 18.7 gb free:
dd if=/dev/zero of=dummy.bin bs=1000000000 count=18 rm dummy.binI did this a few times and got my avg write speed from 32mb/sec to 67mb/sec. I think it works because it forces the controller to repack the sectors more efficiently.
Thanks for the tip, I’ve tested this quickly on my set-up (X18-M 50nm) and it does seem to help (haven’t run numbers on it yet though). I’m guessing that the only difference between an SSD page that is empty (either raw or via trim) and one that is filled with zeros is the usage information stored by the controller. It would make sense for the controller to know if the page was completely filled with zeros, as there’s no point erasing an already empty page. Knowing this certainly makes the lack of trim more bearable.
The equivalent command to generate and delete a blank zero filled file on Windows (XP, Vista and 7) is:
fsutil file createnew dummy.img 18 del dummy.imgYou could also use the virtual hard disk tool in Virtual PC, selecting the ‘fixed sized’ option. This way provides a GUI and doesn’t require admin rights like ‘fsutil’ does.
It’s worth pointing out that using the Intel SATA drivers instead of the Microsoft supplied ones does also help performance. http://www.intel.com/p/en_US/support/highlights/chpsts/imsm
Interesting! Got the same problem with a 50nm X-25E. One question though: creating dummy.img once and deleting it immediately afterward is the right way to proceed?
Salut, one would hoped the 25E being a SLC device wouldn’t of had this issue… Yes, I normally create and delete the disk image straight away, repeating the process twice.