Why SSDs Care About What You Write: Fragmentation & Write Combining

PC Perspective's Allyn Malventano is a smart dude, just read one of his articles to figure that out. He pieced together a big aspect of how the X25-M worked on his own, a major key to how to improve SSD performance.

You'll remember from the Anthology that SSDs get their high performance by being able to write to multiple flash die across multiple channels in parallel. This works very well for very large files since you can easily split the reads and writes across multiple die/channels.

Here we go to write a 128KB file, it's split up and written across multiple channels in our tiny mock SSD:

When we go to read the file, it's read across multiple channels and performance is once again, excellent.

Remember what we talked about before however: small file random read/write performance is actually what ends up being slowest on hard drives. It's what often happens on a PC and thus we run into a problem when performing such an IO. Here we go to write a 4KB file. The smallest size we can write is 4KB and thus it's not split up at all, it can only be written to a single channel:

As Alyn discovered, Intel and other manufacturers get around this issue by combining small writes into larger groups. Random writes rarely happen in a separated manner, they come in bursts with many at a time. A write combining controller will take a group of 4KB writes, arrange them in parallel, and then write them together at the same time.

This does wonders for improving random small file write performance, as everything completes as fast as a larger sequential write would. What it hurts is what happens when you overwrite data.

In the first example where we wrote a 128KB file, look what happens if we delete the file:

Entire blocks are invalidated. Every single LBA in these blocks will come back invalid and can quickly be cleaned.

Look at what happens in the second example. These 4KB fragments are unrelated, so when one is overwritten, the rest aren't. A few deletes and now we're left with this sort of a situation:

Ugh. These fragmented blocks are a pain to deal with. Try to write to it now and you have to do a read-modify-write. Without TRIM support, nearly every write to these blocks will require a read-modify-write and send write amplification through the roof. This is the downside of write combining.

Intel's controller does its best to recover from these situations. That's why its used random write performance is still very good. Samsung's controller isn't very good at recovering from these situations.

Now you can see why performing a sequential write over the span of the drive fixes a fragmented drive. It turns the overly fragmented case into one that's easy to deal with, hooray. You can also see why SSD degradation happens over time. You don't spend all day writing large sequential files to your disk. Instead you write a combination of random and sequential, large and small files to the disk.

The Cleaning Lady and Write Amplification A Wear Leveling Refresher: How Long Will My SSD Last?
Comments Locked

295 Comments

View All Comments

  • mtoma - Monday, August 31, 2009 - link

    Here is an issue I think deserves to be adressed: could an conventional HDD (with 2-3 or 4 platters) slow down the performance of a PC , even if that PC boots from an excellent SSD drive, like an Intel X-25M? Let's say that on the SSD lies only the operating system, and that onto the conventional HDD lies the movie and music archive. But both drives run at the same time, and it is a well known fact that the PC runs at the speed of the slowest component (in our case the conventional HDD).
    I did not found ANYWHERE in the Web a review, or even an opinion regarding this issue.
    I would appreciate if I get a competent answer.
    Thanks a lot!
  • gstrickler - Monday, August 31, 2009 - link

    That's a good question, and I too would like to see a report from someone who has done it.

    Some of your assertions/assumptions are not quite accurate. A PC doesn't "run at the speed of the slowest component", but rather it's performance is limited by the slowest component. Depending upon your usage patterns, a slow component may have very little effect on performance or it may make the machine nearly unusable. I think that's probably what you meant, I'm just clarifying it.

    As for putting the OS on an SSD and user files on a HD, you would want to have not only the OS, but also your applications (at least your frequently used ones) installed on the SSD. Put user data (especially large files such as .jpg, music, video, etc.), and less frequently used applications and data on the HD. Typical user documents (.doc, .xls, .pdf) can be on either drive, but access might be better with them on the SSD so that you don't have to wait for the HD to spin-up. In that case, the HD might stay spun-down (low power idle) most of the time, which might improve battery life a bit.

    Databases are a bit trickier. It depends upon how large the database is, how much space you have available on the SSD, how complex the data relations are, how complex the queries are, how important performance is, how much RAM is available, how well indexes are used, and how well the database program can take advantage of caching. Performance should be as good or better with the database on the SSD, but the difference may be so small that it's not noticeable, or it might be dramatically faster. That one is basically "try it and see".

    Where to put the paging file/swap space? That's a tough one to answer. Putting it on the SSD might be slightly faster if your SSD has high write speeds, however,that will increase the amount of writing the the SSD and could potentially shorten it's usable life. It also seems like a waste to use expensive SSD storage for swap space. You should be able to minimize those by using a permanent swap space of the smallest practical size for your environment.

    However, putting the swap space on a less costly HD means the HD will be spun-up (active idle) and/or active more often, possibly costing you some battery life. Also, while the HD may have very good streaming write speeds, it's streaming read speed and random access (read or write) speed will be slower than most SSDs, so you're likely to have slightly slower overall response and slightly shorter battery life than you will by putting the swap space on the SSD.

    On a desktop machine with a very fast HD, it might make sense to put the paging file on the HD (or to put a small swap space on the SSD and some more on the HD), but on a machine where battery life is an important consideration, it might be better to have the swap space on the SSD, even though it's "expensive".
  • Pirks - Monday, August 31, 2009 - link

    just turn the page file off, and get yourself 4 or 8 gigs of RAM
  • gstrickler - Monday, August 31, 2009 - link

    Windows doesn't like to operate without a page file.
  • smartins - Tuesday, September 1, 2009 - link

    Actually, I've been running without a page file for a while and never had any problems. Windows feels much more responsive. You do have to have plenty or ram, I have 6GB on this machine.
  • mtoma - Thursday, September 3, 2009 - link

    In my case, it's not a problem of RAM (I have 12 GB RAM and a Core i7 920),it's a problem of throwing or not 300 dolars down the window (on a Intel SSD drive). Currently I have a 1.5 TB Seagate Barracuda 11th generation, on wich I store ONLY movies, music and photos. My primary drive (OS plus programms) is a 300 GB Velociraptor.
    Do you think diffrent types of Windows behave difrent if you remove the page file? It seems to me if I remove this page file, I walk onto a minefield, and I don't want to do that.
    Besides that, my real problem is to use (when I purachase the Intel drive) the Seagate Barracuda in a external HDD enclosure OR internally, and thus, possibly slow down my PC.
  • SRSpod - Thursday, September 3, 2009 - link

    Adding a slow hard drive to your system will not slow your system down (well, apart from a slight delay at POST when it detects the drive). The only difference in speed will be that when you access something on the HDD instead of the SSD, it will be slower than if you were accessing it on the SSD. You won't notice any difference until you access data from the HDD, and if it's only music, movies and photos, and you're not doing complex editing of those files, then a regular HDD will be fast enough to view and play those files without issues.
    If you don't plan to remove it from your system, then attach it internally. Introducing a USB connection between the HDD and your system will only slow things down compared to using SATA.

    Removing the pagefile can cause problems in certain situations and with certain programs (Photoshop, for example). If you have enough RAM, then you shouldn't be hitting the pagefile much anyway, so where it's stored won't make so much of a difference. Personally, I'd put it on the SSD, so that when you do need it, it's fast.
  • samssf - Friday, September 18, 2009 - link

    Won't Windows write to the page file regardless of how much RAM you have? I was under the impression Windows will swap out memory that it determines isn't being used / needed at the moment.

    If you absolutely need to have a page file, I would use available RAM to create a RAM disk, and place your page file on this virtual disk. That way you're setting aside RAM you know you don't need for the page file, since Windows will write to that file anyway.

    If you can, just turn it off.
  • minime - Monday, August 31, 2009 - link

    Would someone please have the courtesy to test those things in a business environment? I'm talking about servers. Database, webapplication, Java, etc. Reliability? Maybe even enrich the article with a PCI-E SSD (Fusion-IO)?
  • ciukacz - Monday, August 31, 2009 - link

    http://it.anandtech.com/IT/showdoc.aspx?i=3532">http://it.anandtech.com/IT/showdoc.aspx?i=3532

Log in

Don't have an account? Sign up now