Как определить подходящий интервал проверки? - PullRequest
8 голосов
/ 24 августа 2010

Я только начинаю работать над приложением торнадо, у которого есть некоторые проблемы с процессором.Время ЦП будет монотонно расти с течением времени, максимизируя ЦП на 100%.В настоящее время система разработана таким образом, чтобы не блокировать основной поток.Если ему нужно сделать что-то, что блокирует, а асинхронные драйверы недоступны, он создаст другой поток для выполнения операции блокировки.

Таким образом, у нас есть основной поток, почти полностью связанный с процессором, и куча другихпотоки, которые почти полностью связаны с IO.Из того, что я прочитал, кажется, что это идеальный способ столкнуться с проблемами с GIL.Кроме того, мое профилирование показывает, что мы тратим много времени на ожидание сигналов (что, я предполагаю, и есть то, что делает __semwait_signal), что согласуется с эффектами, которые GIL будет иметь в моем ограниченном понимании.

Если я использую sys.setcheckinterval для установки интервала проверки 300, рост ЦП значительно замедляется.Я пытаюсь определить, должен ли я увеличить интервал проверки, оставить его равным 300 или бояться его увеличить.В конце концов, я замечаю, что производительность процессора улучшается, но я немного обеспокоен тем, что это негативно скажется на быстродействии системы.

Конечно, правильный ответ, вероятно, заключается в том, что нам нужно переосмыслить нашу архитектуру, чтобы принятьGIL во внимание.Но это не то, что можно сделать немедленно.Итак, как мне определить соответствующий курс действий в краткосрочной перспективе?

1 Ответ

1 голос
/ 25 августа 2010

Первое, что я бы проверил, было бы убедиться, что вы правильно выходите из потоков.Очень трудно понять, что происходит, исходя только из вашего описания, но вы используете слово «монотонно», что означает, что использование ЦП связано скорее со временем, чем с нагрузкой.

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

...