Understand SSD
- page 01: Flash memory
- page 02: MLC and SLC
- page 03: Sectors, pages, blocks...
- page 04: Wear-leveling
- page 05: TRIM
- page 06: Garbage collector
- page 07: Every day usage
- page 08: Conclusion
Over the last 2 years, SSD became a rather hot topic in the computer electronics field. Indeed, this new flash memory-based storage support is very promising as it eliminates the primary woes of disc-based HDDs: rotating discs and latency (dozens of ms) due to moving reading/writing heads. The latter is the true bottleneck when one considers that with current CPUs clocked at several GHz, 10 ms represents millions of clock cycles.
Unfortunately, the first consumer electronics-oriented SSD models have been rather disappointing, and performance was much lower in the practice than initial expectations, especially when writing multiple small files, with current OSes.
In this article, we will explain how a SSD works and why almost all of them are slower in random writing mode than in random reading mode, while disc-based HDDs usually offer more symmetrical performance levels.
Flash memory
Most performance levels and technical drawbacks in specific writing modes are linked to the type of memory used: flash memory is an EEPROM (Electronicaly Erasable Programmable Read Only Memory), so a type of read-only memory. Unlike how typical ROM (read-only memory) hosts information added during production, the EEPROM can be programed. In other words, one can write, read and erase data from it after production. Unlike the disc-based HDDs working in two operation modes - read or write - flash memory offers three operation modes: write (program), read and erase. So when writing data on flash memory, you program it directly if it is blank, otherwise you will have to first erase it then program it. This is a two-step process, but luckily, erasing data on flash memory is a fast process - several GB per second - so it should not impact performance, in theory. Well, theory and practice are often two independent parameters with undefined relationships...
![]()
