Live Long and Prosper: The Logical Page

Computers are all about abstraction. In the early days of computing you had to write assembly code to get your hardware to do anything. Programming languages like C and C++ created a layer of abstraction between the programmer and the hardware, simplifying the development process. The key word there is simplification. You can be more efficient writing directly for the hardware, but it’s far simpler (and much more manageable) to write high level code and let a compiler optimize it.

The same principles apply within SSDs.

The smallest writable location in NAND flash is a page; that doesn’t mean that it’s the largest size a controller can choose to write. Today I’d like to introduce the concept of a logical page, an abstraction of a physical page in NAND flash.

Confused? Let’s start with a (hopefully, I'm no artist) helpful diagram:

On one side of the fence we have how the software views storage: as a long list of logical block addresses. It’s a bit more complicated than that since a traditional hard drive is faster at certain LBAs than others but to keep things simple we’ll ignore that.

On the other side we have how NAND flash stores data, in groups of cells called pages. These days a 4KB page size is common.

In reality there’s no fence that separates the two, rather a lot of logic, several busses and eventually the SSD controller. The latter determines how the LBAs map to the NAND flash pages.

The most straightforward way for the controller to write to flash is by writing in pages. In that case the logical page size would equal the physical page size.

Unfortunately, there’s a huge downside to this approach: tracking overhead. If your logical page size is 4KB then an 80GB drive will have no less than twenty million logical pages to keep track of (20,971,520 to be exact). You need a fast controller to sort through and deal with that many pages, a lot of storage to keep tables in and larger caches/buffers.

The benefit of this approach however is very high 4KB write performance. If the majority of your writes are 4KB in size, this approach will yield the best performance.

If you don’t have the expertise, time or support structure to make a big honkin controller that can handle page level mapping, you go to a larger logical page size. One such example would involve making your logical page equal to an erase block (128 x 4KB pages). This significantly reduces the number of pages you need to track and optimize around; instead of 20.9 million entries, you now have approximately 163 thousand. All of your controller’s internal structures shrink in size and you don’t need as powerful of a microprocessor inside the controller.

The benefit of this approach is very high large file sequential write performance. If you’re streaming large chunks of data, having big logical pages will be optimal. You’ll find that most flash controllers that come from the digital camera space are optimized for this sort of access pattern where you’re writing 2MB - 12MB images all the time.

Unfortunately, the sequential write performance comes at the expense of poor small file write speed. Remember that writing to MLC NAND flash already takes 3x as long as reading, but writing small files when your controller needs large ones worsens the penalty. If you want to write an 8KB file, the controller will need to write 512KB (in this case) of data since that’s the smallest size it knows to write. Write amplification goes up considerably.

Remember the first OCZ Vertex drive based on the Indilinx Barefoot controller? Its logical page size was equal to a 512KB block. OCZ asked for a firmware that enabled page level mapping and Indilinx responded. The result was much improved 4KB write performance:

Iometer 4KB Random Writes, IOqueue=1, 8GB sector space Logical Block Size = 128 pages Logical Block Size = 1 Page
Pre-Release OCZ Vertex 0.08 MB/s 8.2 MB/s

A Quick Flash Refresher The Cleaning Lady and Write Amplification
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