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