Linux perf: возможно ли как-то игнорировать занятые потоки ожидания?
Я пытаюсь сделать анализ производительности моего процесса. У процесса есть много потоков, которые заняты зацикливанием / занятостью, ожидая событий. Похоже, что perf выбирает занятые циклы в качестве главных нарушителей (как и ожидалось), но есть ли какая-то магия, чтобы как-то заставить perf игнорировать эти неопорные спины?
2 ответа
Общий метод состоит в том, чтобы контролировать "правильность" процесса - имя nix для приоритета. Ты можешь использовать
top
для просмотра процессов и nice
значение. Найдите свои оскорбительные темы, и тогда вы сможете использовать:
renice 19 -p <pid of offending process>
19 - любое значение от -20 (наивысший приоритет) до 19 (наихудший). Хороший учебник находится здесь. Обратите внимание, что pid - это действительно tid (идентификатор потока).
Все это предполагает, что вы не контролируете источник исполняемого файла, который порождает эти процессы. Если вам нужно перейти к схеме ожидания / прерывания, а не к занятому ожиданию, например, эффективный способ ожидания прерывания в Си. Это для Rasberry-PI, но я думаю, что логика pthread должна быть полезной. boost::pthread
есть другие хорошие вещи.
Если вы смотрите вниз, чтобы полностью приостановить эти темы kill
может быть полезным, согласно https://unix.stackexchange.com/questions/2107/how-to-suspend-and-resume-processes, но я не уверен, что это работает для потоков (и если это работает Будет ли это только остановить поток, а не процесс).
perf report
может фильтровать по символу или DSO, но нет никакого способа использовать черный список.
Я думал, что может быть способ с помощью объединения -p -x
, но регулярное выражение POSIX, похоже, не поддерживает негативную перспективу, поэтому черный список также кажется невозможным.
В конце концов, вы, вероятно, захотите, чтобы нечто, называемое анализом первопричин или смещением обвинений, связывало время ожидания с какой-либо причиной, вызывающей задержку самого события. Я не думаю, что это возможно с perf
непосредственно.
Также часто лучше пассивно ждать события, чем заняты ожиданием.