Не совсем корректно, но есть способ получить видимость в стеке вызовов ядра, и путем выборки его во времена высокой загрузки ЦП вы обычно можете оценить, что израсходовано все время.
Установите Process Explorer и убедитесь, что вы настроили его с поддержкой сервера символов. Вы можете сделать это:
- Установка WinDebug для получения обновленного dbghelp.dll
- Настройте Process Explorer для использования этой версии dbghelp.dll, указав путь в Параметры | Меню «Настройка символов» в Process Explorer.
- Также в том же диалоговом окне установите путь к символам так, чтобы он включал сервер символов MS и локальный кэш.
Вот пример значения для пути символа:
SRV*C:\symbolcache*http://msdl.microsoft.com/download/symbols
(Вы можете установить для переменной среды _NT_SYMBOL_PATH одинаковое значение, чтобы инструменты отладки использовали один и тот же сервер символов и путь кэш-памяти.) Этот путь приведет к тому, что dbghelp.dll будет загружать символы на локальный диск при запросе символов для модуля, который не имеет символов локально.
После настройки Process Explorer, подобной этой, вы можете получить свойства процесса, перейти на вкладку нитей и дважды щелкнуть по самому загруженному потоку. Это заставит Process Explorer временно подключиться к процессу и просканировать стек потока, а затем перейти к поиску символов для различных адресов возврата в стеке. Символы адресов возврата и имена модулей (для сторонних драйверов не от MS) должны дать вам четкое представление о том, на что тратится ваше процессорное время.