Почему ваш процессор на 100% на самом деле простаивает: всё упирается в память

It's the Memory Latency, Stupid

Когда загрузка CPU показывает 100%, это не значит, что он что-то делает: современный процессор может простаивать, ожидая данные из RAM. Автор на примере GROUP BY в ClickBench (99 млн строк, ~17 млн уникальных UserID) показывает, что наивная хеш-таблица заставляет CPU 50% времени ждать память и только 16% — выполнять операции. Разбиение ключей на 4096 партиций (radix partitioning) уменьшает рабочие хеш-таблицы, умещает их в кэш и сокращает время запроса с 3,6 до 2,7 секунды.

Это говорит нам о том, что 50,1% времени CPU не мог ничего делать, потому что ждал память! И только 16,1% времени CPU действительно выполнял операции.
  1. boricj

    На работе я работаю с другой командой, которая вовсю использует передачу сообщений, виртуальные методы C++ в глубоко вложенных иерархиях классов, большие DOM и готовые контейнеры C++ STL... на STM32MP1, где стоит Cortex-A7 с последовательным выполнением и жалкий объём кэша.

    С другой стороны, в моей команде я написал свои собственные контейнеры C++ STL, которые выделяют память inline, библиотеки обработки в стиле SAX и пул объектов со связями, использующими индекс+поколения, как в видеоиграх 2000-х... на STM32H5 с менее чем мегабайтом RAM.

    «Механическая симпатия» кажется людям, которым я это демонстрирую, утраченным искусством... и мне пришлось продемонстрировать первой команде с цифрами бенчмарков, что я не буду узким местом между нами на порядки величин.

  2. happyPersonR

    Респект автору, выглядит связно.

    Мне нравятся flamegraph'ы

    Я знаю, что люди используют perf, чтобы помогать их генерировать

    Но в будущем, раз уж LLM здесь, пусть агент проверяет ассемблер, PMU, а также смотрит, что вы делаете в ассемблере.

    Мои 2 копейки, и удачного кодинга всем :)

  3. drivebyhooting

    Мне кажется, представленное решение — это просто кластеризованный hashmap или, если хотите, «locality sensitive».

    Всё равно не на порядки лучше.

  4. brcmthrowaway

    https://people.freebsd.org/~lstewart/articles/cpumemory.pdf

    Кто-нибудь переписал это для 2026 года?

Ещё за этот день

2026-10-31