Поиск «холодных точек» с помощью `perf`

#multithreading #performance #perf

#многопоточность #Производительность #perf

Вопрос:

Запуск perf record / perf annotate cycle генерирует информацию о том, какие инструкции по сборке являются «горячими», поскольку они выполняются снова и снова.

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

Как я могу понять «холодные точки» из perf.data файла?

Комментарии:

1. Когда вы говорите «холодные» точки, вы имеете в виду код, который выполняется, в то время как другие потоки блокируются мьютексом, как вы описываете? Или вы имеете в виду обычное определение «холодного»: код, который просто выполняется не очень часто, если вообще выполняется. (например, обработка ошибок обычно вообще не выполняется.)

2. Вы можете закрепить свой поток и отслеживать активность других потоков с помощью perf, чтобы проанализировать любую проблему, возникающую во время выполнения вашей целевой функции (хотя и не очень точную и требующую, чтобы горячая функция выполнялась в четко определенных потоках детерминированным образом).

3. @PeterCordes: Моя ошибка в неправильном использовании языка: Я имею в виду код, который (например) выполняет очень мало инструкций за цикл или ничего не делает, ожидая освобождения мьютекса.

4.Здравствуйте, проверьте профилирование вне процессора (или комбинированное on-cpu off-cpu) brendangregg.com/offcpuanalysis.html brendangregg.com/FlameGraphs/offcpuflamegraphs.html brendangregg.com/blog/2015-02-26 /…