Flash memory is a non-volatile computer memory that can be electrically erased and reprogrammed. Flash memory has many promising characteristics but also many idiosyncrasies. Flash memory offers access times that are one hundred times faster than those of hard disk drives (HDDs) and requires much less space and power than HDDs. It consumes only 1/100th the power of DRAM and can be packed much more densely-providing much higher capacities than DRAM.
Flash memory is also cheaper than DRAM and is persistent when written, whereas DRAM loses its content when the power is turned off. Flash memory can be organized into modules of different capacities, form factors and physical and programmatic interfaces.
However, flash memory access times are much slower than DRAM and flash memory chips have write access behavior that is very different than their read access behavior. Flash memory writes can only be done in large blocks (~128KB) and, before writing, the region needs to be erased. Also, flash memory has limits on how many times it can be erased. As a result, small writes need to be buffered and combined into large blocks before writing (write coalescing), and block writes need to be spread uniformly across the total flash memory subsystem to maximize the effective lifetime (wear leveling).
The latency, bandwidth, capacity and persistence benefits of flash memory are compelling. However, incorporating flash memory into system architectures requires specific design and optimization-starting at the application layer, throughout the operating environment and down to the physical machine organization.