NVMe drives are fast, but sometimes they're not. If you have one, you might think it only slows down when temperatures are high, as CPUs and GPUs do. But SSDs are a bit more complex, and they can slow down for many reasons. Thus, you might find your drive slowing down even if temperatures are normal.

Pseudo SLC running out

These fast NAND cells are in limited quantity

Solid-state drives use four NAND cell types based on the number of bits they can store: SLC, MLC, TLC, and QLC. Each cell can store one, two, three, or four bits, respectively. Cells that store more bits provide more storage and are cheaper to manufacture, but are also slower. As a solution to this, most consumer drives use TLC (high-storage ones use QLC), with a portion of that acting as fast SLC. Under sustained loads, such as heavy video rendering or large file transfers, the pSLC can run out, and the drive resorts to slower TLC or QLC. This is essentially throttling, and the SSD can slow down dramatically as a result.

PSLC exhaustion typically occurs under intensive workloads, and you likely won't face this scenario during daily runs. For SSDs with dynamic SLC, leaving a good amount of room (10-20%) on your drive ensures more cells are available to be used as pSLC. If you frequently have these types of workloads, it might also be worth investing in a drive with more pSLC by checking SSD reviews/round-ups.

Housekeeping tasks

SSDs need to work constantly to maintain optimal performance

Garbage collection (GC) is an internal SSD process that empties blocks containing a mix of stale and valid pages. The valid pages are moved to other partially filled blocks. This is done to maintain drive performance and to remove invalid (to be deleted) data. But the Garbage Collection process uses the SSD controller to write to other blocks. It typically occurs at idle, but can (and does) occur when the drive is active, especially if it's under constant use and has little space. In this case, it can cause a reduction in speed or throughput in other tasks.

Low disk space is also problematic for another SSD process, Wear Leveling. The purpose of this is to write data to all NAND cells equally, so that no NAND block wears out permanently. Under low space, the controller has to work harder to find empty blocks. Plus, again, the process is more likely to conflict with other system tasks that require write performance, which can cause throttling. Wear leveling is usually dynamic and can occur even under heavy loads.

Metadata management inside the SSD can also bottleneck the controller. Every write to the drive requires updates to metadata, address maps, and tables stored in DRAM/pseudo-SRAM. If SSD space is too full (and on drives without DRAM), the process can slow your PC down. It always occurs during regular activity (whenever you save something to the drive, directly or indirectly), which can be problematic.

These three processes can overlap, as they all rely on the SSD controller to run. Thus, the slowdown can be very noticeable. The most straightforward workaround for these interruptions is to leave 10–20% or more of your drive free and to leave it idle occasionally, so GC can run. Ensuring TRIM is enabled and keeping SSD firmware up to date also helps.

TRIM isn't working correctly or at all

GC without TRIM is inefficient

The TRIM command informs the SSD which blocks/pages are no longer in use at the filesystem level. This helps garbage collection to clear these blocks or pages for new data. If TRIM doesn't work (or is delayed, not passed through, or commands are blocked), writing new data takes much longer. This is because it must read existing data from mixed blocks, copy valid data to new blocks, erase the whole block, and then add the latest data. The extra load, especially during sustained writes, increases latency (and write amplification).

The scenario is common in many RAID setups because many RAID controllers or abstractions don't pass TRIM commands to the SSDs, or are unreliable at doing so. Older SSDs or SSDs behind external docks or USB enclosures may not be available/supported. Also, if your SSD doesn't spend much time idle, TRIM may be delayed.

DRAM-less SSDs with high memory usage

Not an ideal combo

A small amount of DRAM (usually 1GB per 1TB) is used as a fast cache in mid- to high-end SSDs. This DRAM cache stores its logical-to-physical mapping table, which tells the drive where data is stored on the NAND cells for quick access. It also helps with wear leveling. Budget drives and those on most OEM laptops usually miss out on DRAM, and instead use system RAM as a "Host Memory Buffer." However, not only are these HMB allocation sizes much smaller (usually tens of MBs) than DRAM sizes, but it also takes the SSD longer to access sRAM. The former problem is usually more significant: tasks like large decompressions can quickly fill up the buffer with the active mapping set (even if it's dynamic). Your drive then has to pull L2P entries from NAND, which usually involves repeated misses and is much slower.

You can't set HMB allocation as the SSD firmware controls it. The easy, no-nonsense solution is to upgrade to a drive with DRAM or more pSLC.

SSDs aren't just limited to thermal throttling

SSDs can slow down due to various reasons, many of which you can control. If your SSD suddenly slows down under heavy workloads or during large file transfers, it's probably because the pSLC is exhausted or the HMB has run out of space. In contrast, if your drive seems slow during less intensive tasks, make sure there's enough space available, and leave it idle occasionally to let TRIM and GC run.