When I talk about a file on a solid state drive, and I want to talk about NAND flash, have any of you looked into NAND flash at all? Any idea? It's a pain in the butt. It really is. A magnetic media, you hear about how reliable SSDs are? It all depends on your definition of reliable. So, we saw that there's the heads flying very close to the media. So you don't want to shake hard drives, I've got a Micron SSD in here, so you don't want to be going like that when you got a hard drive. It's really hard on its own. Mechanically, SSD is far more robust. But if you define reliability in terms of returning your data reliably, a hard drive is more robust. It may come as a surprise to you. I tell everyone I meet, I go to dinner parties, "What do you do?", a cocktail party or something, "What do you do?", when you're talking about this. "Should I put an SSD in my laptop?" I'm, like, "Yeah, but make sure you back it up to a hard drive. Don't take your laptop with you to the airport and leave it set out at DIA for two weeks baking at 95 degrees in the summer, you know how hot it gets you here in the summertime, right? So, it's just cooking it, charge bleeds off, flash forgets. You would take a hard drive, put a bunch of data on a hard drive, stick it in the trunk for two weeks, no problem. Put it back, it's just happy as can be when all your data's there. But if you heat flash up, the more you heat it up, the more of the charge that you've stored in all those cells inside the flash, that charge is bleeding off and you're losing your data. If the drive is turned on, it can mitigate that. So, there's all these background tasks that have to run on a solid state drive that go check the data integrity of all the data that's stored on it periodically and when the error rate gets to a certain point, firmware on the drive reads that data, corrects it with ECC, and writes it into a new location on the drive. So, your data on an SSD is moving around constantly as long as it has power applied. So, this is one NAND device. NAND devices are divided into planes that I have delineated with these blue lines. Each plane consists of some number of blocks and each block consists of some number of pages. NAND has a characteristic that you cannot write-in-place. So, when the host writes LBA zero for the first time, you put it in this page. Then when the host writes LBA zero the next time, it has to write it in the next page or some other page, someplace else. That one becomes invalid, that copy becomes invalid. The host writes LBA zero again, so let's just say, it just keeps writing LBA zero over and over again. So it just keeps putting it in this page and then the next page and the next page until it's written all the pages. Then it would go up to the next block and continue writing LBA zero. I'm not going to get into all of the consequences of that but after this block has been completely written, actually before I get ahead of myself, so it doesn't have this write-in-place but when everything's erased and then all the pages, all the blocks are all completely erased, okay? We read pages so when we want to perform a read, we issue a command to the NAND device and we can read a page and the device goes off and reads a page and transfers it into the IO circuitry and then, depending on how big the page size is, we can transfer the whole page size into the controller chip or some sub portion of that page. Okay? When we want to write, we write pages. Okay. Like I was describing, this LBA zero being written over and over again going to successive pages, once a page is all filled up, you can't write to it anymore, or the blocks, excuse me, is all filled up, you can't write to it anymore. You want to use this again, there's any valid data in there, we need to read that and move it someplace else and then we can erase that block. So, you erase a whole block at a time. You read a page and you write a page and when you want to reuse it, you have to erase the whole block. So, the firmware for these devices is incredibly complicated. I had a student of mine last fall, he got an internship at Micron and he was telling me this was the programming of digital systems, a junior level assembly language course, and trying to convey to the class how complicated a solid state drive is. Then when he got his internship, he came into class. He says, "I've been at work a couple of days. I can't believe how complicated they are." Yeah, I was trying to tell you. They're engineering marvels in themselves as well. Hard drives have a whole series of very challenging complex engineering problems to solve and so do solid state devices have some very challenging things that need to be solved, and it's fun to be part of a team that works on bringing these products to life and delivering them to the marketplace. So, this is just a very quick view of how NAND operates. So, in an SSD, you've got to show it as a drive but it's essentially some power control circuitry in a controller chip and then a whole bunch of NAND channels. So, all these devices have an 8-bit wide interface on them and you transfer commands and data over an 8-bit wide interface. A controller chip will have some number of channels and some number of NAND devices hanging off of each of these channels. Your file can end up getting spread out all over the NAND array due to the retention issues that I talked about. There's other things that go on as well that can cause these pages that contain and hold all the data for your files, they move around overtime. So one of the things that traditional hard drive, I'm not going to get into shingled magnetic recording. Pre-shingled magnetic recording, hard drives had write-in-place so sector zero was always at the same track, the same position on that track. Every time the host wrote sector zero, the data would get written to that same track in that same position on that track. NAND doesn't have write-in-place so every time you rewrite your file, you're writing to new pages in available blocks and those old pages, old version is there until the block gets erased. So, your files are moving around in the NAND array every time you write it. Firmware on the drive maintains this table that translates the logical block addresses into physical, you can think about almost like a file pointer, but there's a table that is indexed by the logical block address and it points to the channel, the die in the channel, the plane in the channel, the block in the channel, and the page where the particular LBA is located. Every time that logical block address is rewritten, it's rewritten someplace else so the firmware running on the drive has to update that table to keep track of where that logical block address is. That's just the tip of the iceberg for the complexity that has to be managed within these devices. I just wanted to give you a little flavor for how these storage devices work, what was really going on inside them. They're little mini embedded supercomputer systems, we call them hyper real time systems because we couldn't put [inaudible] and I've probably mentioned that when we were talking about real time operating systems. It got in the way, we couldn't hit our performance targets.