Как мне найти причину высоких отложенных вызовов процедур?

41

У меня есть двухъядерный процессор, и один из двух постоянно на 100%. Поиск в ProcessExplorer показывает мне, что это отложенные вызовы процедур. Чтение вокруг сети, кажется, дает мне множество разных ответов.

Можно ли изложить пару шагов, чтобы попытаться сузить суть проблемы в моем случае?

Обновление 1: FWIW, проблема сохраняется даже в безопасном режиме.

Обновление 2: я отключил все, что мог, от задней панели ПК, и это купило мне на 40% больше бесплатного процессора. Я также скачал инструмент RATTV3 , но по какой-то причине на моей машине он не дает мне разбивку драйверов. Там есть описание хорошо обоих DPCLatencyChecker и RATTV3 здесь .

Обновление 3: , LatencyMon (см мой ответ ниже) говорит мне , что это nvstor32.sys- что драйвера от NVIDIA SATA - со временем около 5300 мкс.

Обновление 4: сюжет утолщается, и, размышляя о том, стоит ли пытаться загрузить загрузочный диск (чтобы увидеть, действительно ли это драйверы, а не аппаратная проблема), я заметил, что DVD / CD-проигрыватель не работает (то есть даже не открывает дверь, когда я нажимаю на кнопку). Учитывая, что машина только что вернулась после замены материнской платы, я подумала, может быть, они забыли подключить ее. Я открыла коробку, все было в порядке, но я отключила и снова включила ее. При перезагрузке все было в порядке - больше нет DPC (самый высокий сейчас 300 мкс)!

Обновление 5: на следующий день проблема возвращается, проигрыватель компакт-дисков снова не работает, даже курсор в текстовом поле пароля медленно мигает ... Попытка отсоединить все, что я мог придумать, и при второй перезагрузке снова заработала (как на Update2 ). В следующий раз я попытаюсь полностью отключить проигрыватель компакт-дисков ...

Обновление 6: только что заметил, что в журнале системных событий выдается nvstor32.sysсообщение об ошибке Parity error detected in \Device\RaidPort0, а затем предупреждение об отправке повторной инициализации. Теперь просто нужно выяснить, какой из них RaidPort0... (обратите внимание, у меня нет настроек RAID, это просто болотный стандартный Acer). О, и моя установка Avast, очевидно, была убита, когда я выполнял откат системы (или как он там называется), потому что он не запускается (ошибка RPC), не удаляется (произошла ошибка setiface).

Обновление 7: Наконец-то пришло время перезагрузки с отключенным DVD. Больше никаких проблем с ЦОД! (много ошибок страницы, хотя, но это на потом). Следующий шаг: выясните, если это кабель или DVD-плеер.

Обновление 8: заимствовал кабель SATA, загрузился с ним, без проблем. CD / DVD-плеер работает, нет проблем с DPC nvstor32.sys, нет блокированных процессоров. Хэппи-энд ... почти: у меня все еще есть проблемы с Avast, очевидные проблемы с DPC storport.sysпри запуске (может быть, нормально для USB?), И много грубых сбоев страниц. Но это будет предметом других вопросов.

Постскриптум: у меня недавно возникла та же проблема, и с помощью того же метода удалось отследить ее до USB-флешки (той, которую я использовал для ReadyBoost), которую снимали.

Benjol
источник
3
Очень
Моав

Ответы:

43

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


Моя система испытывала щелчки и треск во время воспроизведения звука. Я знал, что это означало, что что-то в режиме ядра перегружало процессор. Моей первой мыслью было поковыряться в Process Explorer и посмотреть, не выглядит ли что-нибудь неуместным. Единственное, что привлекло мое внимание, это чрезмерное количество времени, затрачиваемое на выполнение отложенных процедурных вызовов (DPC):

Снимок экрана Process Explorer, показывающий высокое время DPC

Я знал, что DPC - это код, запускаемый внутри драйвера; Задача состояла в том, чтобы выяснить, какой водитель. Я обратился к DPC Latency Checker , который показал мне, насколько велика задержка:

снимок экрана DPC Latency Checker

DPC Latency Checker предлагает пройтись по устройствам в диспетчере устройств и отключить ненужное оборудование по одному (например, сетевую карту, звуковую карту) в надежде изолировать неисправный драйвер. (Если вы отключаете устройство, и задержка DPC внезапно падает: вы нашли своего преступника!)

скриншот отключения устройств

К сожалению, после отключения всего, что я, возможно, мог (хотя все еще мог использовать компьютер - не отключайте жесткий диск, видеокарту, мышь или USB-концентратор, к которому подключена мышь!), Задержка все еще была высокой. Затем я обратился к Windows Performance Toolkit (часть Windows SDK ) и отличному сообщению в блоге Питера Вейланда "Измерение времени DPC" . После установки Windows Performance Toolkit:

Снимок экрана установщика Windows SDK с выбранным набором средств для повышения производительности Windows

Я открыл командную строку с повышенными правами и запустил:

>xperf -on Latency

Примечание . Latency Группа представляет собой предопределенный набор событий, которые можно отследить от поставщика группы ядра :

>xperf -providers kg
   Base           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO
   Diag           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER+COMPACT_CSWITCH
   DiagEasy       : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER
   Latency        : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE
   ...

В этом случае Latencyсоответствует флагу ядра:

  • PROC_THREAD Обработать и создать / удалить поток
  • ПОГРУЗЧИК Ядро и пользовательский режим Image Load / Unload события
  • ПРОФИЛЬ CPU Образец профиля
  • Переключение контекста CSWITCH
  • DPC DPC События
  • ПРЕРЫВАНИЕ События прерывания
  • DISK_IO Дисковый ввод / вывод
  • HARD_FAULTS Жесткие ошибки страницы

После того, как я позволил этому запускаться в течение минуты, я остановил трассировку и сохранил ее в файл:

C:\Users\Ian\Desktop\xperf -d thingy1.etl

И тогда я просмотрел результаты трассировки с помощью команды:

C:\Users\Ian\Desktop\xperf thingy1.etl

Это загружает графический анализатор производительности Windows . Щелкнув правой кнопкой мыши по графику использования ЦП DPC , я выбрал Сводную таблицу . Это показывает разбивку времени, проведенного в ЦОД водителем:

снимок экрана с выводом XPerf

Сразу видно, что один драйвер ( tsvp.sys) в среднем выполняет 2,8 мс на выполнение DPC, что на порядок медленнее, чем у любого другого драйвера:

Скриншот

Гугл tsvp.sysдал мне ответ: CommView , который я недавно установил.

Вопрос теперь в том, как отключить этот драйвер. Используя автозапуск , я вижу, что он установлен как служба драйверов:

скриншот автозапуска

Используя диспетчер устройств, я могу отключить службу, на которой размещен этот драйвер. Сначала вы должны показать скрытые устройства , затем разверните Non-Plug and Play Driversузел:

снимок экрана диспетчера устройств

Наконец, я мог остановить службу драйверов и изменить режим запуска с System(означает, что драйвер является неотъемлемой частью Windows, и Windows не может загрузиться без него), на Demand(что означает, что я могу запустить драйвер, когда захочу):

снимок экрана диспетчера устройств

Остановка службы драйверов сразу исправила мою задержку DPC:

Скриншот

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


Обновление : Начиная с Windows 8, вы больше не можете видеть драйверы без Plug and Play в диспетчере устройств :

Примечание. Начиная с Windows 8 и Windows Server 2012, диспетчер Plug-and-Play больше не создает переустановки устройств для не PnP (устаревших) устройств. Таким образом, нет таких устройств для просмотра в диспетчере устройств. Чтобы включить скрытые устройства в отображение диспетчера устройств, нажмите «Просмотр» и выберите «Показать скрытые устройства».

Microsoft забрал эту функцию и заменил ее ничем. Отличная работа.

В типичной ярости ботаников, некоторые бесполезные ответы :

  • Диспетчер устройств никогда не показывал не драйверы pnp
  • зачем вам это?

К счастью, NirSoft создал замену. ServiWin позволяет вам видеть, останавливать и запускать все службы (даже те, которые Microsoft решила разрешить администраторам видеть):

скриншот ServiWin

Ян Бойд
источник
13

ОТЧЕТ О ПРОГРЕССЕ

Лучший инструмент, который я нашел на данный момент, - это LatencyMon , который в основном делает все, что делают предыдущие два инструмента, не заставляя вас думать. Страница загрузки просит вас зарегистрироваться по электронной почте - но у меня ничего не случилось, когда я это сделал - но вы можете в любом случае прокрутить страницу вниз, чтобы загрузить.

альтернативный текст

Benjol
источник
6

В моем случае я использовал LatencyMon (из ответа Бенджола) и обнаружил, что драйвер зависает, вселенная и все остальное (также) storport.sysявляется драйвером Microsoft для « высокопроизводительных шин ». Это подтвердило мое подозрение, что проблема связана с IO.

Я также пошел дальше и посмотрел на мою Windows 7 Event Viewer , папку « Журналы Windows -> Приложение» , и обнаружил несколько пакетов ошибок из Volume Shadow Copy (VSS), происходящих каждые 30 минут до 2 часов. Они детали были такими:

Volume Shadow Copy Service error: Error calling a routine on the Shadow Copy Provider {b5946137-7b9f-4925-af80-51abd60b20d5}. Routine returned E_INVALIDARG. Routine details GetSnapshot({00000000-0000-0000-0000-000000000000},000000000023C850). 

Operation:
   Get Shadow Copy Properties

Context:
   Execution Context: Coordinator

Затем я начал исследовать, что такое VSS и для чего он используется. Подхожу несколько - страниц - о - ВСС устранения неполадок . Проходя через все это, у меня был один большой подозреваемый: мое программное обеспечение для резервного копирования CrashPlan .

Следуя этому примеру, я быстро нашел страницу, связывающую его с ошибками VSS . Следуя инструкциям там, чтобы отключить резервное копирование открытых файлов, которые используют VSS, зависания, высокая загрузка ЦП ядра и т. Д. Были полностью исчезли. И не поймите меня неправильно: CrashPlan великолепен! Просто эта функция не работает на моей машине.

Кстати, эта страница прямо здесь была ОДНОЙ, которая дала мне первоначальное руководство, которое помогло мне найти основную причину моих проблем. Большое спасибо @Benjol и всем, кто ответил ранее! Я надеюсь, что мой ответ также поможет другим ...

Chuim
источник
Спасибо Chuim, что, возможно, моя точная проблема тоже, я работал над решением этой проблемы в течение нескольких недель, и, наконец, я сузил ее до VSS и storport.sys, но не смог найти основную причину (CrashPlan резервное копирование открытых файлов), пока Ваше сообщение. Я еще не уверен, исправлю ли это, но это лучшее преимущество, которое у меня было до сих пор для высоких задержек DPC!
Мэтт Палмерли
Я только что проверил, что настройка параметров аварийного плана, чтобы не создавать резервные копии открытых файлов, работала! Спасибо! Теперь я могу играть в Skyrim без ужасных звуковых пауз и глюков!
Мэтт Палмерли
Просто хочу добавить, что я испытывал заикание звука после новой сборки ПК и обнаружил, что виноват и Crashplan. Нашел этот ответ через computercabal.com/2012/07/debugging-audio-skipping-lagging.html . Спасибо всем за проделанную огромную работу, чтобы выследить это!
Chucknelson
4

Вероятно, есть драйвер устройства, который поддерживает вашу систему. Один из способов проанализировать это - запустить проверку задержки DPC . Затем отключите один драйвер за раз и посмотрите, снизится ли загрузка DPC. (Process Explorer также работает.)

Вы можете отключить драйверы устройств в разделе «Управление компьютером» -> «Диспетчер устройств».

Andomar
источник
спасибо, я собираюсь читать по этой ссылке. Извините за мое невежество, но какие устройства я могу безопасно отключить без «отключения ветки» (например, клавиатуру, экран, мышь и т. Д.)?
Бенджол
1
Не уверен, что мои основные подозреваемые будут службы сторонних разработчиков. Я просто попробую, если что-то пойдет не так, вы можете загрузиться в безопасном режиме и снова включить драйверы
Andomar 22.10.10
Хорошо, я вижу, что эта страница содержит список драйверов, которых следует избегать. Надеюсь, это не один из них.
Бенджол
До этого, я думаю, что я собираюсь попробовать загрузиться с диска восстановления - если я все еще получаю проблему, это, скорее всего, аппаратная вещь?
Бенджол
1
+1 для проверки латентности. По моему опыту, наиболее распространенным виновником здесь является драйвер для беспроводной сетевой карты.
Shinrai
3

Я чувствую, что должен добавить свой ответ здесь, потому что эту проблему трудно решить, и не всегда из-за плохих драйверов или конфликтов IRQ.

У меня была высокая задержка RPC, которая вызывала треск / треск на моей звуковой карте USB. Инструменты, описанные в принятом ответе, не помогли определить конкретный драйвер, который вызывал проблему. Задержка происходила во многих процессах: HAL, USBPORT.SYS и ядре Windows. Более глубокое изучение этих процессов не выявило очевидного виновника.

В моем случае оказалось, что проблема была более низкого уровня и характерна для материнских плат GigaByte с определенными наборами микросхем и версиями BIOS. Решение состояло в том, чтобы отключить Intel SpeedStep и все другие специальные функции материнской платы, которые регулировали скорость процессора и напряжение на лету. Как только эти опции были отключены, моя задержка RPC была немедленно исправлена.

Alex
источник
1

Я начал видеть эту ошибку после устранения ошибки IRQ с моим контроллером Ethernet nVidia 10/100/1000, который появился при обновлении моей видеокарты до GeForce GTX 550 Ti.

Кажется, после обновления до новых драйверов GeForce 295.73 и последующего разрешения конфликта прерываний я удалил, повредил или удалил существующие драйверы контроллера nForce SATA / RAID. Я не использую RAID, ошибка все еще сохраняется, и время от времени зависает 64-битная Vista Ultimate.

Попробовав все предложения по устранению неполадок, которые я нашел в Интернете, представилось простое решение ... Я перешел на nForce SATA / RAID контроллер 15.58, но оставил другие драйверы nForce в покое.

Это исправило это для меня, и теперь я решил все мои конфликты с драйверами. Надеюсь, это вам тоже поможет.

NorthAlabama
источник