Job 2026 md

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'ов».