Как я могу профилировать многопоточную программу? - PullRequest
4 голосов
/ 07 декабря 2010

У меня есть программа, которая выполняет waaaay по номиналу, и я хотел бы профилировать ее. Тем не менее, он многопоточный, поэтому я не могу найти хороший способ для профилирования этой вещи. Любой совет?

Я пробовал yappi, но в OS X он не работает: (

РЕДАКТИРОВАТЬ: Это на python, извините за то, что поставил его под профилирование ...

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Вы многопоточны или многопроцессорны?Если вы просто многопоточны, то это проблема.В настоящее время Python имеет проблемы с многопоточностью в многопроцессорной системе из-за глобальной блокировки интерпретатора (GIL).Они работают над исправлением этого для Python 3.2 - по крайней мере, чтобы ваша программа работала на одном и том же ядре так же быстро, как и на нескольких.

Если вы не уверены, посмотрите на результаты перестрелки длянить кольцевая программа.Работа с одноядерным быстрее, чем с четырехъядерным .

Теперь, если вместо этого вы используете многопроцессорность, профилирование также может быть затруднено, посколькузапустить CProfiler из каждого отдельного процесса.Есть некоторые вопросы , которые указывают вам в правильном направлении.

2 голосов
/ 07 декабря 2010

В зависимости от того, как далеко вы продвинулись в устранении неполадок, есть некоторые инструменты, которые могут указать вам правильное направление.

  • "top" - полезное начало, чтобы показать вам, если ваша проблема заключается в сокращении времени процессора или просто в ожидании чего-либо.

  • «dtruss -c» может показать вам, где вы проводите время и какие системные вызовы занимают большую часть вашего времени.

Оба они могут дать вам подсказку, ничего не зная о питоне.

Если вы просто хотите использовать yappi, настроить виртуальную коробку и установить какой-нибудь Linux на свою машину не так уж и сложно. Время от времени я делаю это, когда хочу что-то попробовать.

Конечно, могут быть вещи, о которых я не знаю, которые делают это невозможным или не стоящим усилий. Кроме того, профилирование в другой ОС, работающей под виртуализацией, может не дать таких же результатов, но все же может быть полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...