Типичный программист | IT, программирование, разработка, ИИ
IT и технологии · 3 октября 2026 г.
Два ядра загружены на 100%, а программа тормозит: где искать причину
Два ядра загружены на 100%, а программа тормозит: где искать причину Профилировщик показывает простой инкремент, оба ядра заняты, алгоритм не изменился. Но в эксперименте перестановка двух целых чисел в структуре сократила время работы с 4284 до 841 мс. Причина была в размещении данных. При промахе кэша ядро ждёт чтения из памяти сотни тактов. При промахе TLB, кэша соответствий виртуальных и физических адресов, процессор дополнительно обходит таблицы страниц. А при ложном совместном использовании два ядра меняют разные переменные в одной 64-байтной строке кэша и постоянно отбирают её друг у друга. Обычный профиль этих ожиданий не разделяет. В разборе трёх причин тормозов есть команды perf stat для счётчиков промахов и perf c2c для поиска строки кэша, за которую спорят ядра. Это полезное направление диагностики, когда добавление потоков не ускоряет сервис.