Skip to content
About
Main content

Storage media: what each one is made of and what it forces

One dial: stability versus mutability

To store one bit you need a physical object with two stable states (0 and 1) and a hill between them. Imagine a ball resting in one of two valleys, with a ridge between the valleys.

  • A tall ridge: the ball stays where it is for years (good: data survives). But pushing it over to the other valley takes a lot of effort (bad: writing is slow and costs energy).
  • A short ridge: writing is easy and cheap. But heat is constant microscopic shaking, and sooner or later it knocks the ball over by itself (bad: data leaks away).

You cannot have a tall ridge for storing and a short ridge for writing. It is the same ridge.

The equation

The says that retention time grows like

the height of the ridge
temperature
a physical constant
Data table
Retention relative to a design at E_b/kT = 40
Barrier height E_b / kTRetention (× the design at 40)
300×
30.40×
30.80×
31.10×
31.50×
31.90×
32.30×
32.60.001×
330.001×
33.40.001×
33.80.002×
34.10.003×
34.50.004×
34.90.006×
35.30.009×
35.60.013×
360.018×
36.40.027×
36.80.039×
37.10.056×
37.50.082×
37.90.119×
38.30.174×
38.60.253×
390.368×
39.40.535×
39.80.779×
40.11.13×
40.51.65×
40.92.4×
41.33.49×
41.65.08×
427.39×
42.410.8×
42.815.6×
43.122.8×
43.533.1×
43.948.2×
44.370.1×
44.6102×
45148×
45.4216×
45.8314×
46.1457×
46.5665×
46.9968×
47.31,410×
47.62,050×
482,980×
48.44,340×
48.86,310×
49.19,180×
49.513,400×
49.919,400×
50.328,300×
50.641,200×
5159,900×
51.487,100×
51.8127,000×
52.1184,000×
52.5268,000×
52.9390,000×
53.3568,000×
53.6827,000×
541,200,000×
54.41,750,000×
54.82,550,000×
55.13,700,000×
55.55,390,000×
55.97,840,000×
56.311,400,000×
56.616,600,000×
5724,200,000×
57.435,100,000×
57.851,100,000×
58.174,400,000×
58.5108,000,000×
58.9158,000,000×
59.3229,000,000×
59.6333,000,000×
60485,000,000×

where E_b is the height of the ridge, T is temperature, and k is a physical constant. The important point is that the ridge height is inside an exponent, so a small increase gives a huge change.

So retention, write speed, write energy and (how many times you can rewrite before the cell wears out) are not four separate properties. They are one dial. Being non-volatile means resisting change. Being fast to write means being easy to change. You ask one material to be stubborn and flexible at the same time.

The ladder

MemoryWhat it isRetentionWrite speedEndurance
Transistors held in state by power (CPU caches)only while powered~nsunlimited
A tiny capacitor (a charge bucket) per bit — your RAM~64 ms, so it is refreshed constantly~10 nsunlimited
Charge trapped behind an insulating layer (SSDs, USB sticks)years~500 µs, high voltage1,000–100,000 rewrites
TapeMagnetic regions on a plastic ribbon, no power~30 yearsslow, sequential onlyhigh

Wear is not a manufacturing defect. NAND flash wears out because it keeps data for a decade. The insulating layer that traps the charge must be tunneled through by electrons to write, and each tunneling creates tiny defects in the layer. After many writes the layer leaks. The retention is the cause of the wear.

Why there is no "universal memory". For thirty years researchers have tried to build one memory that is fast, dense, durable and cheap (FeRAM, MRAM, PCM, Intel Optane, racetrack). Each was good at three of the four, never all four. They are not failing to try. They are asked to set one dial to two positions.


Cheap means coarse

A storage device has two parts: the mechanism (the machinery that reads and writes: a disk arm, an erase circuit, a tape head, a network round trip) and the medium (the bits themselves). The mechanism is expensive; the medium is cheap.

To get a low price per bit, you must spread the mechanism's cost over as many bits as possible. This is called . But bits that share one mechanism must be operated on together — that is what "sharing" means. And "operated on together" is the definition of coarse .

  • One tape head serves kilometers of ribbon: cheapest per TB, but reading means winding the spool.
  • One disk arm serves 20 TB: cheap, but random access means physically moving the arm.
  • One flash erase circuit serves a block of 4–24 MB: cheap, but you cannot erase less than a block.
  • One HTTP request serves one object in cloud storage: cheap, but you cannot change less than a whole object.

The price ladder and the granularity ladder are the same ladder. You get cheapness by accepting coarseness.

So when you later read about write in flash, zone rewrites in disks, and the small-files problem in object storage, remember: they are not four problems. They are one problem at four price points.


Fixed cost and the natural transfer size

Every mechanism has a setup cost that is paid for each operation, whatever its size: moving a disk arm, erasing a flash block, a TLS handshake (the secure-connection setup on the web) and metadata lookup in an object store, repositioning a tape. So

the setup cost paid for each operation, whatever its size
bytes per second once data streams
bytes moved per operation
the size at which half of your time is setup
object storage (F ≈ 50 ms, B ≈ 80 MB/s)hard disk (F ≈ 13 ms, B ≈ 100 MB/s)
Data table
Share of time spent moving data, by request size
Request size xseriesTime spent transferring
1,000 Bobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.025%
1.16 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.03%
1.38 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.035%
1.64 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.042%
1.95 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.05%
2.32 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.059%
2.75 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.07%
3.27 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.084%
3.89 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.099%
4.62 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.118%
5.49 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.14%
6.53 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.167%
7.76 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.198%
9.22 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.235%
11 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.28%
13 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.332%
15.5 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.395%
18.4 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.469%
21.9 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.557%
26 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.661%
30.9 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.784%
36.7 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)0.931%
43.6 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)1.1%
51.8 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)1.31%
61.6 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)1.55%
73.2 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)1.84%
87 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)2.18%
103 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)2.58%
123 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)3.05%
146 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)3.61%
174 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)4.26%
206 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)5.02%
245 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)5.91%
292 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)6.95%
346 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)8.15%
412 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)9.54%
489 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)11.1%
582 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)13%
691 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)15%
822 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)17.4%
977 KBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)20%
1.13 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)22.9%
1.35 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)26.1%
1.6 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)29.6%
1.9 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)33.3%
2.26 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)37.2%
2.69 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)41.3%
3.19 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)45.6%
3.8 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)49.9%
4.51 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)54.2%
5.36 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)58.4%
6.37 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)62.6%
7.58 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)66.5%
9 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)70.2%
10.7 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)73.7%
12.7 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)76.9%
15.1 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)79.8%
18 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)82.5%
21.4 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)84.8%
25.4 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)86.9%
30.2 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)88.8%
35.8 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)90.4%
42.6 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)91.8%
50.6 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)93%
60.2 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)94%
71.5 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)94.9%
85 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)95.7%
101 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)96.4%
120 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)96.9%
143 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)97.4%
170 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)97.8%
202 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)98.1%
240 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)98.4%
285 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)98.7%
338 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)98.9%
402 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)99.1%
478 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)99.2%
568 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)99.3%
675 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)99.4%
802 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)99.5%
954 MBobject storage (F ≈ 50 ms, B ≈ 80 MB/s)99.6%
1,000 Bhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.077%
1.16 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.091%
1.38 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.109%
1.64 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.129%
1.95 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.153%
2.32 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.182%
2.75 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.216%
3.27 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.257%
3.89 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.305%
4.62 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.363%
5.49 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.431%
6.53 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.511%
7.76 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.607%
9.22 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.721%
11 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)0.856%
13 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)1.02%
15.5 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)1.2%
18.4 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)1.43%
21.9 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)1.69%
26 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)2.01%
30.9 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)2.37%
36.7 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)2.81%
43.6 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)3.32%
51.8 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)3.92%
61.6 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)4.63%
73.2 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)5.45%
87 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)6.42%
103 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)7.53%
123 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)8.83%
146 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)10.3%
174 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)12%
206 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)14%
245 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)16.2%
292 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)18.7%
346 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)21.4%
412 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)24.5%
489 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)27.8%
582 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)31.4%
691 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)35.3%
822 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)39.3%
977 KBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)43.5%
1.13 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)47.8%
1.35 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)52.1%
1.6 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)56.4%
1.9 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)60.5%
2.26 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)64.6%
2.69 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)68.4%
3.19 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)72%
3.8 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)75.4%
4.51 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)78.4%
5.36 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)81.2%
6.37 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)83.7%
7.58 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)85.9%
9 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)87.9%
10.7 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)89.6%
12.7 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)91.1%
15.1 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)92.4%
18 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)93.5%
21.4 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)94.5%
25.4 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)95.3%
30.2 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)96.1%
35.8 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)96.7%
42.6 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)97.2%
50.6 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)97.6%
60.2 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)98%
71.5 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)98.3%
85 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)98.6%
101 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)98.8%
120 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99%
143 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.1%
170 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.3%
202 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.4%
240 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.5%
285 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.6%
338 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.6%
402 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.7%
478 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.7%
568 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.8%
675 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.8%
802 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.8%
954 MBhard disk (F ≈ 13 ms, B ≈ 100 MB/s)99.9%

Batching

When the fixed cost is large, the sensible move is to batch: pay the setup once and spread it over more bytes. Think of an elevator: it is wasteful to go up with one parcel, so you wait until you have a full trolley. But means the first item waits for the last item. This is the . It is not a separate law; it is a consequence of non-zero fixed cost. If setup were free, batching would give nothing.

The natural transfer size

Every medium has a natural transfer size. Multiply the fixed cost by the transfer rate and you find the size at which half of your time is setup. Below it you mostly pay for setup.


Four questions for every storage medium

  1. What are its smallest units of read, of write, and of reclaim (freeing space)? A mismatch between them creates amplification.
  2. What is the fixed cost per operation? This gives the natural batch size.
  3. How much concurrency is needed to reach full throughput? This shows where the tail-latency knee is.
  4. Can it update in place? If not, there is an and a . Go and find them.

The rest of this page is one medium after another answering these four questions.