open atlas
↑ К треку
Производительность PERF · 02 · 05

Аппаратные счётчики и Intel TMA: диагностика подкатегорий

Аппаратные счётчики производительности отличают compute-bound от memory-bound, когда оба выглядят одинаково широкими. Фреймворк Intel TMA привязывает каждый такт CPU к конкретному микроархитектурному ресурсу.

PERF Senior ◷ 20 min
Уровень
ОсновыJuniorMiddleSenior

Flame graph называет горячую функцию. Два инженера спорят: один говорит «перепишем алгоритм», другой — «исправим раскладку памяти». На уровне flame graph оба фрейма выглядят одинаково. Запуск perf stat -e instructions,cycles,cache-misses против функции решает спор за 30 секунд: IPC 0.4, cache-miss rate 18%. Побеждает раскладка памяти. Изменение алгоритма потратило бы спринт впустую.

Аппаратные счётчики: второй проход

Flame graph называет функцию. Аппаратные счётчики производительности показывают, что функция делала внутри CPU. perf stat -e cycles,instructions,cache-misses,branch-misses на том же горячем листе даёт IPC, miss rate и типы stall.

  • Широкий фрейм с IPC 3.0: compute-bound. CPU выполняет алгоритм. Семейство исправлений: алгоритм, SIMD, специализация.
  • Широкий фрейм с IPC 0.4 и cache-miss rate 15%: memory-bound. CPU ждёт RAM. Семейство исправлений: изменение раскладки данных.

На flame graph одинаковая ширина — противоположные исправления. Аппаратные счётчики — это второй диагностический проход, предотвращающий оптимизацию не тем инструментом на нетривиальных горячих путях.

Показания счётчиковКатегорияСемейство исправлений
IPC 2–4, низкий cache-miss rateCompute-bound (CPU-bound)Лучший алгоритм, векторизация (SIMD)
IPC <1, высокий cache-miss rateMemory-bound (cache-bound)Раскладка данных (SoA, непрерывная), порядок обхода
Высокий branch-miss rateBad speculationУстранение ветвлений, branchless-код, сортировка входных данных
Высокий stall cycles, низкий instructionsFront-end bound (выборка/декодирование инструкций)Уменьшение размера кода, оптимизация instruction cache

Intel TMA: строгая таксономия

Когда случай, где «compute или memory?» неочевиден по одному IPC — или когда SLO требует абсолютной уверенности перед спринтом реструктуризации — нужен инструмент точнее модели пяти форм.

Модель пяти форм — рабочее приближение. Строгая версия — Intel Top-Down Microarchitecture Analysis (TMA), формализованная в Intel Optimization Manual и доступная через VTune, Linux perf (через toplev.py) и аналог AMD uProf.

TMA классифицирует каждый такт CPU в четыре верхнеуровневых корзины:

  • Retiring (~25–50% на оптимизированном коде): реальная работа — CPU выполнял полезные инструкции.
  • Bad Speculation (~5–15%): промах предсказателя ветвлений — конвейер сброшен, инструкции отброшены.
  • Front-End Bound (~5–15%): stall выборки или декодирования инструкций — CPU не успевает заполнять конвейер новыми инструкциями.
  • Back-End Bound (~30–60% на типичных нагрузках): stall памяти или вычислительных ресурсов.

Back-End Bound делится дальше:

  • Memory Bound → L1 Bound, L2 Bound, L3 Bound, DRAM Bound, Store Bound
  • Core Bound (вычислительные порты, цепочки зависимостей, делители с большой латентностью)

Каскад точно указывает, на каком ресурсе CPU голодает на горячем пути:

  • DRAM-bound → исправление раскладки данных
  • Bad Speculation → устранение ветвлений
  • Front-End Bound → уменьшение размера кода
  • Core Bound → настоящее алгоритмическое переосмысление или SIMD

Для senior performance-работы на критических сервисах TMA — диагностика с наивысшим разрешением. Команды, поставляющие latency-sensitive инфраструктуру (HFT, database engines, kernel hot paths), считают его стандартом.

Почему это работает

Скрипт Linux toplev.py реализует TMA с помощью perf-событий на любом современном процессоре Intel. Он автоматически обходит дерево TMA и выводит, какая корзина доминирует. Типичный вызов: toplev.py --core S0-C0 -l2 sleep 5. Вывод напрямую соответствует четырём корзинам и подкорзинам и называет, какой аппаратный ресурс является узким местом.

Найди ошибку

Читать вывод аппаратных счётчиков для диагностики memory-bound пути

log
# perf stat -e cycles,instructions,cache-misses,LLC-load-misses ./service --bench feed-rank

 8,400,000,000  cycles
 3,360,000,000  instructions          #  0.40 insns per cycle (IPC)
   900,000,000  cache-misses          # 10.7% of all memory refs
   700,000,000  LLC-load-misses       # 78% of cache misses miss L3 too

# Горячая функция из flame graph: score_embeddings()
# Self-time: 42% CPU
# IPC: 0.40   ← CPU простаивал 60% времени
# L3 miss rate: очень высокий — почти каждый запрос идёт в DRAM

IPC 0.40 и 78% промахов кеша достигают DRAM. Какая это корзина TMA и на какое семейство исправлений она указывает?

Выбери лучший вариант

Горячий leaf — JSON-сериализация при 28% CPU. У команды четыре варианта. Выберите senior-выбор.

Какой RFC?

Где формализован строгий фреймворк Top-Down Microarchitecture Analysis (TMA) — Retiring / Bad Speculation / Front-End Bound / Back-End Bound — и какой инструмент предоставляет его напрямую?

Викторина

Горячий путь показал функцию X при 25% CPU. После исправления она упала до 5%. Общий CPU% остался прежним. Каково наиболее вероятное системное объяснение?

Вспомните перед уходом
  1. 01
    Когда нужно обращаться к аппаратным счётчикам вместо простого чтения flame graph, и что они показывают того, чего flame graph не может?
  2. 02
    Опишите четырёхкорзинный каскад TMA и исправление, на которое указывает каждая корзина.
Итог

Аппаратные счётчики производительности — это второй диагностический проход, отличающий compute-bound от memory-bound горячих путей, когда оба выглядят одинаково на flame graph. IPC ниже 1 с высоким L3 miss rate указывает на исправления раскладки данных; IPC 2–4 с низким miss rate — на алгоритмические исправления. Фреймворк Intel TMA каскадируется от четырёх верхнеуровневых корзин до конкретных подресурсов (L1-bound, DRAM-bound, core-bound), давая наиболее точную диагностику из доступных. Для latency-sensitive production-сервисов запуск perf stat или VTune на неоднозначных горячих листах является стандартной практикой перед тем, как тратить инженерное время на исправление. Теперь, когда команда спорит «алгоритм или раскладка?», ты запустишь perf stat первым — тридцать секунд счётчиков заменяют тридцать минут дебатов.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 7 завершено
Связанные уроки
встречается в162

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.