Системные процессы бездействия Windows, мешающие измерению производительности - PullRequest
1 голос
/ 08 февраля 2009

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

Кто-нибудь знает, что на самом деле означают системные процессы ожидания и какие функции Windows они могут запускать?

Примечание: я не измеряю производительность с помощью диспетчера задач, я просто использовал его, чтобы взглянуть на то, что еще выполнялось во время особенно медленного измерения.

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

Ответы [ 3 ]

4 голосов
/ 08 февраля 2009

Процесс простоя обычно не выполняет никакой полезной работы, кроме как выполнить инструкцию HLT, которая переводит ядро ​​ЦП в состояние пониженного энергопотребления ( C1 ). Однако тот факт, что ваш эталонный тест не потребляет 100% процессорного времени, открывает возможность для предположений о том, что происходит.

Если ваше приложение однопоточное, а ваша тестовая система - многоядерная / гиперпоточная / многопроцессорная, то вы должны ожидать около 50% времени простоя ЦП для двух ядер, 75% для четырех и т. Д. Это связано с тем, что Проценты времени процессора в диспетчере задач включают все ядра. (Я считаю, что в старых версиях Windows была возможность изменить это, но я не вижу этого в Vista.)

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

Для получения полностью воспроизводимых результатов тестов может потребоваться отключить фоновые приложения и службы с интенсивным использованием процессора / диска / сети (например, индексирование поиска, инвентаризация программного обеспечения SMS, сканирование на вирусы, загрузка из Центра обновления Windows, IncrediBuild / distcc) или подключить компьютер к изолированная сеть (или вообще без сети).

Я предполагаю, что вы написали эталонный тест для своего приложения и пытаетесь использовать диспетчер задач, чтобы диагностировать, почему результаты эталонного теста не соответствуют вашим ожиданиям. Диспетчер задач не является точным способом измерения производительности приложения.

2 голосов
/ 08 февраля 2009

System Idle Process - это процесс по умолчанию, который Windows запускает на процессоре, когда ему больше нечего запланировать для запуска. Этот процесс похож на экономку, которая пытается экономить электроэнергию и т. Д.

Если вы измеряете производительность своей программы, не используйте диспетчер задач Windows. Вместо этого используйте Performance Monitor (который можно запустить, набрав perfmon в командной строке). Или, что еще лучше, используйте профилировщик .

0 голосов
/ 08 февраля 2009

Если ваш «процесс простоя системы» занимает 100%, то, по сути, ваша машина скучает, ничего не происходит. Если вы сложите все, что происходит в диспетчере задач, вычтите это число из 100%, тогда у вас будет значение «процесс простоя системы». Обратите внимание, что он почти не потребляет память и не может влиять на производительность.

...