Процессорные выборки с perf record
полезны для поиска кандидатов на оптимизацию, если загрузка ядра примерно постоянна. Но для кода, который имеет несколько фаз, отличающихся параллелизмом, подсчет циклов ЦП будет выделять сильно параллельные фазы, в то же время недооценивая фазы последовательной или ограниченной параллельности, которые влияют на время стены. Короче говоря, наивное использование перфорации может выделить неправильную часть закона Амдала
Таким образом, вопрос заключается в том, как заставить perf record
/ perf report
найти кандидатов на оптимизацию для сокращения времени на стенке, которое может быть чем угодно - от самого горячего цикла в последовательно параллельном коде, от узко-параллельного узкого места до длинного одно- Фаза с резьбой.
Известные обходные пути, которые оставляют желать лучшего:
- выполнение рабочей нагрузки на одном ядре, так что настенное время ≅ процессорных циклов
- Профилирование отдельных компонентов отдельно
meta: это конкретное продолжение к более общему вопросу