---
title: Конспект материала 21 — Interactive Latency Numbers (Colin Scott)
source: https://colin-scott.github.io/personal_website/research/interactive_latency.html (репо: github.com/colin-scott/interactive_latencies, зеркало people.eecs.berkeley.edu/~rcs/research/interactive_latency.html)
author: Colin Scott (UC Berkeley); база чисел — Peter Norvig «Teach Yourself Programming in Ten Years» (norvig.com/21-days.html#answers, 2002); тренды — Berkeley AMP Camp (Stoica), Bleak Flash (FAST'12, Swanson), IBM HDD Trends
конспект: подготовлено 2026-09-17, TASK-45.25; JS-модель страницы пересчитана (Node) для 1990–2026, числа сверены с KB §1.2 и sdp-appendix-numbers.md (45.6)
статус: интерактивная таблица «числа по годам»: слайдер 1990–2020 пересчитывает латентности по тренд-формулам. Канон чисел для секции — KB §1.2; уникальное здесь: (1) CPU-числа в тактах, (2) тренд-законы «что постоянно, что дешевеет», (3) цветовая лестница ×100. Терминальная версия: `curl cheat.sh/latencies`
---

# Материал 21: Interactive Latency Numbers — числа по годам

Одностраничный интерактив: классическая таблица латентностей (Norvig → Jeff Dean), но со **слайдером по годам 1990–2020**. Числа не хранятся, а **вычисляются по тренд-формулам железа**: у каждой строки своя экспонента («полоса NIC ×2 каждые 2 года», «тактовая частота замерла в 2005»). Страница построена на d3.js и CodeMirror (её же код редактируем прямо на странице — можно менять константы и смотреть, что будет).

Ценность для нас не в самих числах (канон — KB §1.2 из SDP Appendix, задача 45.6), а в **происхождении чисел**: почему они такие, какие из них константы, а какие дешевеют. Это ровно та глубина, которая отличает «выучил таблицу» от «понимаю масштаб».

Как пользоваться (план на 10 мин, P1): открыть страницу, тянуть слайдер и **следить глазами за четырьмя группами строк**: CPU-операции падают до 2005 и замирают; RAM всегда одна и та же; сеть/SSD/диски сжимаются; океан не двигается никогда. Кинестетически запоминается лестница «такты → память → сеть → диски» лучше, чем таблица.

---

## 1. Модель страницы: тренд-законы железа

Из кода страницы (все формулы вида `y = a·b^год`, источники в комментариях):

| Метрика | Тренд | Калибровка | Комментарий из кода |
|---------|-------|------------|---------------------|
| Тактовая частота CPU | ×2 каждые 2 года **до 2005**, дальше константа | 3 ГГц в 2005 | «Clock speed wall»: стена частот; дальше растут ядра, не герцы |
| Латентность RAM (шина) | −7 %/год **до 2000**, дальше константа | 100 нс | «Bus Latency is actually getting worse» — шина скорее деградирует |
| Полоса NIC | ×2 каждые 2 года | 1 Гбит/с ≈ 2003 (commodity) | |
| Полоса DRAM | ×2 каждые 3 года | 4 ГБ/с в 2001 | |
| SSD random read | ÷20 за 4.5 года **до 2014**, дальше константа | 20 мкс в 2012 → 16 мкс | источник — Bleak Flash (FAST'12): флеш упирается в физику |
| Полоса SSD | ×2 каждые 3 года | 3 ГБ/с в 2012 | |
| HDD seek + rotational | **÷2 за 10 лет** | 10 мс в 2000 | самый медленный тренд из всех |
| Полоса HDD | ×2 каждые 5 лет | 100 МБ/с в 2002 | |
| RT внутри ДЦ | константа | 500 мкс | «assume this doesn't change much» |
| RT через океан (CA↔NL) | константа | 150 мс | «Speed of light is ultimately fundamental» |

Три следствия, которые стоит произносить на секции:

1. **«Полоса дешевеет, латентность — нет».** Полосы удваиваются каждые 2–3 года; полы латентности (RAM 100 нс, RT в ДЦ 0.5 мс, океан 150 мс — скорость света) не сдвинулись за 20+ лет. Отсюда все паттерны throughput-first: **батчить, пайплайнить, параллелить, меньше round trip'ов**. Одна фраза объясняет, зачем пайплайны в протоколах, батчи в Kafka и мультиплексирование в HTTP/2.
2. **Стена частот 2005 года.** Однопоточная производительность замерла на ~3 ГГц — горизонтальное масштабирование и конкурентность не выбор, а вынужденное следствие. (Хороший ответ на «почему нельзя просто подождать более быстрого железа».)
3. **Полы задаются физикой, а не индустрией.** 100 нс — расстояние до DRAM-банка; 150 мкс→0.5 мс — детерминизм сетевого стека; 150 мс — скорость света через океан. Меняются только полосы и цена за гигабайт.

## 2. CPU-числа в тактах (пере-формулировка Norvig)

Страница считает CPU-операции не в наносекундах, а в **тактах** — и это мнемоника сама по себе: числа-константы, независимые от частоты:

| Операция | Такты | При 3 ГГц (0.33 нс/такт) | Канон KB §1.2 (Jeff Dean, 2012) |
|----------|-------|--------------------------|---------------------------------|
| L1 cache reference | 3 | ~1 нс | 0.5 нс |
| Branch mispredict | 10 | ~3.3 нс | 5 нс |
| L2 cache reference | 13 | ~4.3 нс | 7 нс |
| Mutex lock/unlock | 50 | ~17 нс | 25 нс |
| Compress 1 КиБ (Zippy) | 6 000 | ~2 мкс | 10 мкс |

Запоминалка: **3 / 10 / 13 / 50 / 6000 тактов** — «лестница ×4–5 на ступень внутри CPU». Расхождение с каноном (Dean измерял на конкретном железе 2012) — само по себе урок: **CPU-числа плавают в разы от машины к машине, порядок — стабилен**. На секции называть порядок, не десятые доли.

Отдельно: «compress 1 КиБ ≈ 6 000 тактов ≈ 2 мкс» в новых таблицах (против 10 мкс в 2012-каноне) — вместе с «SSD random read 150 мкс → 16 мкс» это известное обновление таблицы Jeff Dean (Nov 2018). Оба числа уже отражены в KB §1.2 (сжатие ~3–10 мкс, random 4 КиБ ~150 мкс по консервативному канону — на секции безопаснее консервативные значения: хуже не ошибёмся).

## 3. Визуальный трюк страницы: цветовая лестница ×100

Каждая строка рисуется квадратиками, и масштаб/цвет квадрата привязан к классу величины:

| Цвет квадрата | Единица | Класс операций |
|---------------|---------|----------------|
| чёрный | 1 нс | CPU: кэши, бранчи, мьютекс |
| синий | 100 нс | RAM |
| зелёный | 10 мкс | сеть в ДЦ, SSD random, мегабайт из RAM, RT в ДЦ |
| красный | 1 мс | диски, мегабайт по сети, океан |

Между соседними цветами — **×100**. Это та же «лестница ×1000: нс → мкс → мс» из KB §1.2, но с промежуточной разбивкой и цветовой привязкой: **чёрный = такты, синий = память, зелёный = сеть/SSD в ДЦ, красный = диски и океан**. Перепутать классы после этого трюка сложно: мьютекс не бывает зелёным, RT в ДЦ не бывает синим.

## 4. Слепки модели по годам (пересчёт формул)

Пересчитал формулы страницы (Node, дословный порт) для ключевых лет — видно, что именно движется:

| Метрика | 2000 | 2012 | 2018 | Комментарий |
|---------|------|------|------|-------------|
| CPU, ГГц | 0.53 | 3.0 | 3.0 | замерла в 2005 |
| L1 (3 такта) | 5.7 нс | 1.0 нс | 1.0 нс | движется только с частотой |
| RAM | 100 нс | 100 нс | 100 нс | константа всю жизнь |
| RT в ДЦ | 500 мкс | 500 мкс | 500 мкс | константа |
| RT океан | 150 мс | 150 мс | 150 мс | скорость света |
| Сжатие 1 КиБ | 11.3 мкс | 2.0 мкс | 2.0 мкс | упёрлось в частоту после 2005 |
| Полоса NIC | 0.35 Гбит/с | 22.6 Гбит/с | 181 Гбит/с | ⚠️ см. caveat |
| 1 МиБ из RAM | 301 мкс | 18.8 мкс | 4.7 мкс | |
| SSD random | 17.7 мкс | 16.4 мкс | 16.0 мкс | плато 16 мкс с 2014 |
| HDD seek | 10 мс | 4.4 мс | 2.9 мс | |

## 5. Caveat: это учебная модель, не база измерений

Формулы — наивная экспоненциальная экстраполяция, откалиброванная на данных ~2003–2012. Страница открывается с текущим годом (у нас 2026) и честно показывает: commodity NIC 2.9 Тбит/с, полоса DRAM 1.3 ТБ/с — очевидно неправдоподобно. Правильное чтение:

- **до ~2012** модель согласуется с канонической таблицей (в пределах «порядок стабилен»);
- **после 2012** — только тренды (направление и скорость), не абсолютные значения;
- числа для секции берём из **KB §1.2** (консервативный канон), отсюда — только мнемонику происхождения.

## 6. Маппинг на наши материалы

- `../knowledge-base.md` §1.2 — каноническая таблица + мнемоники (лестница, человеческий масштаб, ratio-якоря); сюда добавлены тренд-законы и такты из этого материала.
- `sdp-appendix-numbers.md` (45.6) — дословный источник канона, ratio-цепочки, тренажёр §4.4.
- `../methodology.md` §7 — «что печатать» (числа уже там через KB §1.2).
- Терминальная выжимка: `curl cheat.sh/latencies` — те же числа без браузера, удобно для быстрой сверки.

## 7. Выжимка для повторения (2 минуты)

- CPU-операции = такты: **3 / 10 / 13 / 50 / 6000**; при 3 ГГц — 1 / 3 / 4 / 17 нс / 2 мкс.
- Полы не двигаются: **RAM 100 нс, RT ДЦ 0.5 мс, океан 150 мс** — физика.
- Полосы удваиваются: **NIC ×2/2 года, DRAM/SSD ×2/3 года, HDD ×2/5 лет**; seek /2 за 10 лет.
- Стена частот: **2005, ~3 ГГц** — поэтому масштабируемся ядрами и нодами.
- Вывод для доски: **«полоса дешевеет, латентность — нет → батчить, пайплайнить, меньше round trip'ов»**.
