Benchmarking 101

SSD Benchmarking 101, Part 4: Sustained Writes and the Cache Cliff

Run one long write to find where an SSD's SLC cache ends, how fast the drive writes after it, and how much speed comes back after idle.

On this page 6 sections

Part 1 of this series explained the SLC cache in principle. It’s a fast region that takes writes at full speed until it fills, then the speed drops, and it refills slowly while the drive sits idle. Part 2 covered synthetic tools that never get that far. CrystalDiskMark writes a 1GiB test file by default, and the smallest cache I’ve measured held 12.7GB, so its write result is the cache and nothing else.

A long sequential write that runs past an SSD’s SLC cache, read as burst, cliff and after-cache speedA three-panel cover. Left: a small test file block sitting inside a much larger box labeled SLC cache, with most of the box empty. Center: a write rate over time that runs flat at burst speed, drops at a cliff, and continues at a lower, uneven level, with the burst, cliff and after-cache stretches labeled. Right: an idle gap followed by a second write whose fast stretch is short before it falls back to the lower level.ARTICLE / BENCHMARKING 101, PART 4Past the cacheSHORT TEST · LONG WRITE · AFTER IDLE01 SHORT TEST02 LONG WRITE03 AFTER IDLESLC cachetest fileburstcliffaftertimeidlesome backtime

This part runs one long sequential write that goes past the cache and logs its rate every second. Below are its settings, the rules I use to read the curve it draws, and what 65 retail drives on my test bench did with it.

Why a short write only measures the cache

Any write smaller than the cache goes entirely into it. On 51 of 64 drives with CrystalDiskMark data, the burst of my sustained write ran within 5% of CrystalDiskMark’s SEQ1M Q8T1 write result. For those drives the short test and the start of the long one measured the same thing. At the median, a cache took 39 s to fill at full speed. A file copy of a few gigabytes never reaches the end of it, but a game install, a video project or a clone of a full drive can.

Why a short write only measures the cache

CrystalDiskMark’s default test file fits inside every cache I measured

Default test file against measured SLC cache sizes, 64 retail drives

A horizontal bar chart in gigabytes. CrystalDiskMark's default test file is 1GiB. The smallest SLC cache measured on 64 retail drives was 12.7GB, the median 214.3GB and the largest 1,045.5GB. The test file bar is barely visible beside the caches.Test file and cache03006009001,200Size, GBCrystalDiskMark test file1GiBSmallest cache measured12.7GBMedian cache214.3GBLargest cache measured1,045.5GBTest fileSLC cache
Figure 4.1 · The 1GiB default file is smaller than the smallest cache, 12.7GB, so a default CrystalDiskMark write result never leaves the cache. Source: my test bench, sustained write runs; CrystalDiskMark default settings.

How I run the write

I use one Iometer 1.1.0 access spec with 1MiB transfers, 100% writes and 0% random, aligned to 1MiB. Iometer logs the write rate about once a second for the whole run. My runs lasted from about 15 minutes to about 2 hours, and on 39 of 64 drives the run wrote at least the drive’s full capacity.

Start from the host and drive state Part 1 sets up. Any tool that records the rate over time will do the same job, such as fio with --rw=write and a 1MiB block size, as long as it logs the rate in short intervals instead of reporting one average at the end.

How I run the write

One access spec, logged second by second until the cache is gone

The sustained write test on my test bench, Iometer 1.1.0

A diagram in two cards. The left card, the job, lists the settings: 1MiB transfers, 100% writes, 0% random so the writes are sequential, aligned to 1MiB, and the write rate logged about once a second. An arrow leads to the right card, the run, which lists what came out: runs of 15 minutes to about two hours, the drive's full capacity written on 39 of 64 drives, and a write rate over time as the result.THE JOBTransfer size1MiBWrites100%Random0% (sequential)Alignment1MiBLoggingabout once a secondTHE RUNRun length15 minutes to about two hoursFull capacity written39 of 64 drivesResulta write rate over timeSettings, the same on every driveWhat a run produced
Figure 4.2 · Every run used the same five settings; what changed from drive to drive was how long the run had to last to get past the cache. Source: my test bench, Iometer 1.1.0 results files of 64 retail drives.

Reading the curve

A write rate logged every second draws a curve with a flat stretch at burst speed, a drop, and a slower stretch after it. I read three numbers off that curve with fixed rules. Burst speed is the best 5-row rolling median in the first 60 rows, about the first minute. The cliff is the first row where the smoothed speed falls under 0.6 times the burst and stays there for 30 rows. Cache size is the gigabytes written before the cliff.

Those rules keep noise out of the result, since a dip of a few seconds doesn’t count as a cliff while a drop that holds for 30 rows does.

Reading the curve

Three numbers read off one curve with fixed rules

An illustrative write rate over time, with the rules every run is judged by

An illustrative line chart of write rate against time. The rate runs flat at the burst level at first; a bracket over the first part marks the first 60 rows, where burst is the best 5-row rolling median. A dashed line at 0.6 times the burst crosses the chart. The rate then drops below that line and stays under it; a marker at the drop is labeled cliff, with a note that it must stay under for 30 rows. The shaded area under the curve before the cliff is labeled cache size, the gigabytes written before the cliff. After the cliff the rate runs lower and uneven, labeled after-cache.first 60 rows: burstcliff: under 0.6× burstfor 30 rowscache size, GBafter-cache0.6× burstWrite rate, MB/sTime, one row about every secondWrite rate0.6× burstWritten before the cliff
Figure 4.3 · Burst comes from the first 60 rows, the cliff is where the smoothed rate stays under 0.6 times the burst for 30 rows, and cache size is everything written before it. Source: rules applied to the sustained write runs on my test bench; the curve’s shape is illustrative.

What 64 cliffs looked like

Of 65 retail drives, 64 dropped off a cliff before their run ended. Caches ranged from 12.7GB to 1,045.5GB, and the median held 214.3GB. After the cliff, the median drive kept 26.5% of its burst speed, and the range ran from 3.7% to 58.9%. Of the 64, 23 averaged under 1,000MB/s after the cache and 11 under 500MB/s.

PCIe 4.0 drives had a median burst 82% above PCIe 3.0 drives, but after the cache that lead shrank to 34%, a comparison the box speed myth works through with the same runs. After-cache speed is the rate a long transfer spends most of its time at, and a drive’s rated speed doesn’t state it.

What 64 cliffs looked like

The median drive kept about a quarter of its burst after the cache

After-cache average as a share of burst speed, 64 retail drives with a cliff

A vertical bar chart of the after-cache average write rate as a percentage of burst speed across 64 retail drives that dropped off a cliff: 3.7% for the lowest drive, 26.5% for the median drive and 58.9% for the highest.After-cache rate, % of burst0153045603.7%Lowest drive26.5%Median drive58.9%Highest driveDrive, of 64Share of burst kept after the cache
Figure 4.4 · After the cliff the median drive kept 26.5% of its burst speed; the lowest kept 3.7% and the highest 58.9%. Source: my test bench, sustained write runs, read with the rules in figure 4.3.

Recovery after idle

After the main run I let each drive sit idle and wrote again, after 30 seconds, 1 minute, 5 minutes and 30 minutes, to see how much fast cache came back. Whether the main run had filled the drive decided the answer. These idle runs come from a smaller set of drives with all four idle writes on file, so the counts differ from the 64 above. On the 35 drives the run had filled, the median drive wrote 0GB at burst speed after every gap.

On the 20 drives that still had room, the median came back to about 30GB after 30 seconds, 42GB after 1 minute, 99GB after 5 minutes and 125GB after 30 minutes. Once the Cache Fills, the Drive Stays Slow works through those runs drive by drive.

Recovery after idle

Idle brought speed back only to drives that weren’t full

Median GB written at burst speed after an idle gap, retail drives on my test bench

A line chart of the median gigabytes written at burst speed after an idle gap of 30 seconds, 1 minute, 5 minutes and 30 minutes. For 20 drives that still had room after the main run, the line rises from about 30GB to 42GB, 99GB and 125GB. For 35 drives the main run had filled, the line stays at 0GB at every gap.Median GB at burst speed0357010514030 s1 min5 min30 minIdle gap before the writeDrives with room (20)Drives the run filled (35)
Figure 4.5 · Drives with room got about 30GB back after 30 seconds and 125GB after 30 minutes; drives the run had filled got none back. Source: my test bench, four write runs after idle gaps following the main sustained write; 35 filled drives, 20 with room.

What to report from a sustained write

A sustained write result needs more than one number, and I report these and look for them in anyone else’s:

  • burst speed in MB/s, and how long it lasted
  • cache size in GB, and the time to the cliff
  • the after-cache average in MB/s, and its share of the burst
  • whether the run wrote the drive’s full capacity
  • how much speed came back after idle, and how full the drive was when it sat

What to report from a sustained write

Most caches ran out within two minutes of a steady write

Drives whose SLC cache filled within a given time, of 64 retail drives with a cliff

A horizontal bar chart of how many of 64 retail drives with a cache cliff had filled their cache by a given time: 39 drives within 60 seconds, 58 drives within 120 seconds, and all 64 by the end of their runs.Cache filled016324864DrivesWithin 60 s39Within 120 s58All drives with a cliff64Drives, of 64
Figure 4.6 · The median cache filled in 39 s; 39 of 64 drives hit the cliff within 60 s and 58 within 120 s, which is why time to the cliff belongs in a report. Source: my test bench, sustained write runs, read with the rules in figure 4.3.

A result that gives only the burst has measured the cache. Part 5 looks at how much any of these numbers moves from one pass to the next, and how many passes it takes before a gap between two drives means something.

KEEP GOING / NEXT CHAPTERContinue to Part 5

Sources

Primary is the original paper, standard or datasheet. Secondary is a review, a vendor summary or a news report. Measured is my own test data.

Show all 1 sources
  • MeasuredThe author’s own measurements