Снижение использования ЦП со временем

У меня многопоточный процесс. Каждый поток связан с процессором (выполняет вычисления), а также использует много памяти. По данным монитора ресурсов, процесс начинается со 100% загрузки ЦП, но через несколько часов загрузка ЦП начинает медленно снижаться. Через 24 часа он на 90-95% и падает.

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

Дополнительная информация:

У меня достаточно оперативной памяти — большая ее часть не используется в данный момент.
Согласно perfmon — память не растет (поэтому я не думаю, что она подтекает).
Код представляет собой смесь .Net и нативного c ++, с некоторым маршалингом данных взад-вперед.
Я видел это на нескольких разных машинах (серверах с 24 логическими ядрами).
Одна вещь, которую я видел в perfmon — индикатор количества измененных страниц в списке увеличивается со временем по мере снижения загрузки процессора.

Редактировать 1
Одна из сторонних библиотек, которая используется — openfst. Похоже, это очень связано с неправильным использованием этой библиотеки.
В частности, я заметил, что у меня есть следующие предупреждения:
предупреждение LNK4087: ключевое слово CONSTANT устарело; использовать данные

Редактировать 2

Поскольку вопрос закрыт и не был вновь открыт, я напишу свои выводы и информацию о том, как проблема была решена, в теле вопроса (извините) для будущих пользователей.
Оказывается, что существует файл openfst.def, который определяет все символы openfst FLAGS_ *, которые будут использоваться приложениями / библиотеками. Я должен был исправить это, чтобы использовать ключевое слово «ДАННЫЕ» вместо «КОНСТАНТ» (КОНСТАНТ устарел, потому что это рискованно — больше информации: https://msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx).
После этого — больше не наблюдалось ухудшения загрузки процессора. Больше не поднимается индикатор «измененные байты списка страниц». Я подозреваю, что это было связано со значениями по умолчанию FLAGS (в частности, флагов сборки мусора — FLAGS_fst_default_cache_gc), которые не были детерминированными из-за неправильного использования ключевого слова CONSTANT в файле openfst.def.

Заключение Поймите ваши предупреждения! Уничтожь как можно больше из них!
Благодарю.

4

Решение

Для такой неочевидной проблемы, как эта, вы также должны использовать профилировщик, который фактически выбирает базовые аппаратные счетчики в ЦП. Большинство профилировщиков, с которыми я знаком, используют статистику ядра, а не базовые счетчики HW. Это особенно верно в Windows. (Причина отчасти унаследована, а отчасти в том, что Windows хочет, чтобы статистика ядра была независимой от аппаратного обеспечения. API-интерфейсы PAPI пытаются решить эту проблему, но все еще относительно новы.)

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

Вы можете найти много информации по оптимизации и диагностике проблем на сайте software.intel.com. Вот указатели для оптимизация и для профилирование. Даже если вы не используете архитектуру x86, методы все еще действительны.

Что касается того, что может быть проблемой, то медленная деградация является странной.

  • Как часто вы используете новую память или обращаетесь к старой? По какому тарифу? Если скорость очень низкая, вы все равно можете столкнуться с ситуацией, когда вы замедляете использование ресурса, например страницы.
  • Каковы ваши модели доступа к памяти? Это меняется со временем? Как быстро? Возможно, ваши шаблоны доступа к памяти со временем расширяются, что приводит к большему количеству пропаданий в кеше.
  • Возможно, ваше разбиение проблемного пространства таково, что вы вошли в новую вычислительную область, и здесь нет реальной патологии.
  • Посмотрите, есть ли периодические действия по обслуживанию, которые выполняются в течение более длительного интервала, хотя это может привести к периодическому ухудшению, скажем, каждые 24 часа. Это не похоже на вашу ситуацию, поскольку вы испытываете постепенную деградацию.

Если вы используете архитектуру x86, рассмотрите вопрос об отправке вопроса на форуме Intel (например, «Кластеры Intel® и технология HPC» и «Настройка программного обеспечения, оптимизация производительности»). & Мониторинг платформы «).

Дайте нам знать, что вы в конечном итоге узнаете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]