41

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

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

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

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

Обновление 3: LatencyMon (см. Мой ответ ниже) говорит мне, что это nvstor32.sys - драйвер SATA от NVidia - со временем около 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), которую снимали.

6 ответов6

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 группа представляет собой предопределенный набор событий , которые могут быть прослежены от поставщика Kernel Group:

>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 Обработать и создать / удалить поток
  • LOADER Ядро и пользовательский режим 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, который в основном делает все, что делают предыдущие два инструмента, не заставляя вас думать. Страница загрузки просит вас зарегистрироваться по электронной почте - но у меня ничего не произошло, когда я это сделал - но вы можете прокрутить страницу вниз до конца, чтобы загрузить ее.

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

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 и для чего он используется. Я перебрал несколько страниц о проблемах с VSS. Проходя через все это, у меня был один большой подозреваемый: мое программное обеспечение для резервного копирования CrashPlan.

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

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

4

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

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

3

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

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

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

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 в покое.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .