У меня есть 6-летний ноутбук со следующими характеристиками:
Операционная система: Windows 8.1 Pro 64-бит (6.3, сборка 9600)
Марка и модель: SAMSUNG 770Z5E/780Z5E
Процессор: Intel(R) Core(TM) i7-3635QM CPU @ 2.40 GHz
Оперативная память: 8 ГБ
В последнее время, похоже, появился процесс, который заставляет ноутбук нагреваться и заставлять вентиляторы работать как сумасшедшие. У меня этот процесс и программное обеспечение (утилита мыши Logitech) уже более 3 лет. Единственными системными изменениями были обновления Windows, которые я применяю раз в квартал. Ничего не устанавливалось больше года.
Процесс — LogiOptionsMgr.exe. Как только я его убиваю, ноутбук успокаивается в течение 30 секунд. Странно, что процесс утверждает, что использует < 1% ЦП, а Filemon не регистрирует никаких операций ввода-вывода (диск, реестр, сеть и т. д.).
Все, что я вижу, противоречит тому, что я знаю о компьютерах. Если загрузка процесса показывает < 1%, это не должно быть причиной такого поведения ноутбука. И в любом случае, процесс, похоже, ничего не делает, согласно Filemon. Опять же, убейте его, и ноутбук вернется в нормальное состояние.
Что может происходить?
решение1
Итак, после указаний от Mokubai выяснилось, что программное обеспечение AMD Switchable Graphics ошибочно определяло программное обеспечение Logitech как приложение, требующее включения моей 3D-видеокарты с высокими настройками производительности.
В моем ноутбуке встроенная графика Intel, а также AMD Radeon 9700 series. Я создал профили приложений в программном обеспечении AMD Catalyst, чтобы явно рассматривать все программное обеспечение Logitech как то, что пытается оптимизировать время работы батареи в ущерб производительности. Кажется, мне это удалось. Этот глюк появился после обновления Windows, так что не знаю, кого винить.
решение2
Даже после миграции LogiOptionsMgr.exe
на iGPU он продолжит потреблять определенное количество ватт. Ниже я покажу, как уменьшить счет за электроэнергию, полностью устранив проблему.
Примечание:Тыне единственный с этим проблема(более 10 000 (примерно 34 557) человекв итоге):
- Почему моя видеокарта NVIDIA GeForce RTX 3060 Ti (200 Вт)
logioptionsmgr.exe
использует до 30% ресурсов в режиме ожидания?- Поддержка Logitech: Logitech Options высокая загрузка графического процессора 8% от NVIDIA GeForce RTX 20?0 Super
- Поддержка Logitech:
LogiOptionsMgr.exe (UNICODE)
использование графического процессора 2‑3% от NVIDIA GeForce GTX 1070 (150 Вт)
- Программное обеспечение Logitech Mouse с использованием мощности графического процессора 5‑10% от NVIDIA GeForce 970 GTX (145 Вт)
У кого-нибудь есть проблемы с высокой загрузкой процессора приLogioptions.exe
запуске?- ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Logitech OPTIONS ПОЖИРАЕТ ваш графический процессор!!!! NVIDIA GeForce GTX 1070 (150 Вт); T с
LogiOptionsMgr.exe
(в режиме ожидания, под нагрузкой): 53‑55°C, 82‑85°C; без: 40°C, 70°C. 21% от NVIDIA Titan Xp (250 Вт). - Программное обеспечение Logitech *Предупреждение* T с
LCore.exe
(холостой ход): 50°C; без: 30°C.
Если я откроюПроцесс Хакери складываем столбцы «GPU» и «GPU dedicated bytes», то в моем случае LogiOptionsMgr.exe
используется 0,94% GPU (6,19% при перемещении любого окна) и 1,14 МБ.
Теперь попробуем локализовать проблему (поток, стек вызовов):
- в Process Hacker: дважды щелкните по
LogiOptionsMgr.exe
процессу > в окне «Свойства»: переключитесь на вкладку «Потоки» - сортировать ▼ по столбцу ЦП
- попробуйте приостановить поток, который использует больше всего ресурсов ЦП: откройте контекстное меню потока > пункт «Приостановить»
- в главном окне Process Hacker: нагрузка на графический процессор должна исчезнуть
на вкладке «Потоки»: строка потока стала серой - Теперь вы можете посмотреть на стек вызовов (двойной щелчок по потоку) — в моем случае стек был таким:
Примечание:Пока не обращайте внимания на названия функций0, ntdll.dll!NtWaitForSingleObject+0xa 1, KernelBase.dll!WaitForSingleObjectEx+0x9c 2, d3d9.dll!Direct3DCreate9+0x194fe 3, d3d9.dll!Direct3DCreate9Ex+0x17df 4, d3d9.dll!Direct3DCreate9Ex+0x1794 5, d3d9.dll!Direct3DShaderValidatorCreate9+0x1515b 6, d3d9.dll!Direct3DShaderValidatorCreate9+0x98aa 7, d3d9.dll!Direct3DShaderValidatorCreate9+0x167c0 8, d3d9.dll!DebugSetLevel+0x1584e 9, LogiOptionsMgr.exe+0xd4343 10, LogiOptionsMgr.exe+0x94947 11, LogiOptionsMgr.exe+0x1d6184 12, LogiOptionsMgr.exe+0x1dbae3 13, LogiOptionsMgr.exe+0x1dbc8a 14, kernel32.dll!BaseThreadInitThunk+0xd 15, ntdll.dll!RtlUserThreadStart+0x21
d3d9.dll
— они неточные (правильные названия вы увидите ниже).
Далее попробуем найти проблемное место (#9 в стеке вызовов выше) в коде LogiOptionsMgr.exe
и исправить его самостоятельно. Кстати, версия моего LogiOptionsMgr.exe
3.20.35нет уязвимый.
Примечание:помните, что вы приостановили один поток LogiOptionsMgr.exe
.
Вам понадобитсяx64dbgотладчик. Надеюсь, у вас есть опыт работы с ним, если нет, то вот несколько настроек, которые облегчат работу с ним (меню «Параметры» > «Настройки»):
- Событиявкладка > «Break on» — снимите все эти отметки (в будущем можно попробовать включить «Entry Breakpoint*» и «Attach Breakpoint»)
- Исключениявкладка: кнопка «Добавить диапазон» > начало:
00000000
, конец:FFFFFFFF
Давай начнем:
- Меню Файл >Прикреплять: выбрать
LogiOptionsMgr.exe
и прикрепить - загрузка символов для
d3d9.dll
(это делается только один раз):- на вкладке «Символы»: левая панель > модуль «d3d9.dll» > контекстное меню: «Загрузить символы для этого модуля»
- найдите это место в коде программы:
LogiOptionsMgr.exe+0xd4343
(#9 в стеке вызовов выше):- переключитесь на ранее приостановленный поток — на вкладке «Потоки» (x64dbg):
- найдите его
1
в столбце «Suspend Count» или по TID Process Hacker, dec → столбец «ID» x64dbg, hex - дважды щелкните по нему
- найдите его
- вы на вершине стека — откатитесь немного назад:
- на вкладке «Стек вызовов»: контекстное меню: «Показать предполагаемый кадр стека вызовов"
- в колонке «Комментарии»: найдите «возврат к logioptionsmgr.… из d3d9.…»
- дважды щелкните по нему
- на вкладке ЦП: прокрутите вверхкак мнемного, чтобы увидеть предыдущие инструкции
- инструкция
test
в данный момент выбрана (в моем случае —test eax,eax
); над ней находитсяcall
инструкция (в моем случае —call qword ptr ds:[rax+3C8]
)
- инструкция
- установите точку останова на
call
инструкции — нажмите на серый маркер слева → он станет красным - возобновить текущую (приостановленную) ветку — на вкладке «Ветки»: контекстное меню ветки: «Возобновить ветку»
- Теперь на вкладке ЦП вы можете увидеть настоящее имя вызываемой
d3d9.dll
функции:qword [rax+3C8]=<d3d9.public: virtual long __cdecl CBaseDevice::PresentEx(…) __ptr64>
т.е. стек вызовов, показанный выше, выглядит следующим образом:- 0,
ntdll.dll!NtWaitForSingleObject+0xa
- 1,
KernelBase.dll!WaitForSingleObjectEx+0x9c
- 2,
d3d9.dll!CBaseDevice::AcquireWriteAccess
- 3,
d3d9.dll!CBaseDevice::UpdateRenderTarget
- 4,
d3d9.dll!CD3DBase::SetRenderTargetI
- 5,
d3d9.dll!CSwapChain::ResetRenderTargets
- 6,
d3d9.dll!CSwapChain::PresentMain
- 7,
d3d9.dll!CBaseDevice::PresentMain
- 8,
d3d9.dll!CBaseDevice::PresentEx
←PresentEx
←Present
-LogiOptionsMgr.exe
хотетьподарокпокажите нам что-нибудь… - 9,
LogiOptionsMgr.exe+0xd4343
- …
- 0,
- переключитесь на ранее приостановленный поток — на вкладке «Потоки» (x64dbg):
- если вы пройдете эту часть программы вРежим «Перешагнуть»F8, вы можете понять, что эта нить закручивается в цикл, который начинается с
movzx eax,byte ptr ds:[rsi+38]
(почти сразу послеcall qword ptr ds:[<&NtUserShowWindow>]
ShowWindow
) и возвращается к началу послеcall qword ptr ds:[<&PeekMessageW>]
В начале цикла находится условие входа/выхода цикла:
test al,al
jne logioptionsmgr.13F904520
- контекстное меню: Собратьspace
- заменить
jne
je
… и возобновить выполнение F9программы, затем ресурсы, созданныеCoInitialize
иDirect3DCreate9Ex
(см. выше в asm) будет правильно завершен, поток завершится, а на вкладке «Журнал» появятся следующие записи (в случае GPU от NVIDIA):
DLL Unloaded: … nvd3dumx.dll
DLL Unloaded: … psapi.dll
Thread … exit
Примечание:разгрузкаpsapi.dll
возможно, намекнул, что персональные настройки мыши для приложений перестанут работать (переключение), однако персональные настройки по-прежнему работают.
Перед окончательной фиксацией патча осталось убедиться, что он работает правильно при LogiOptionsMgr.exe
запуске:
- предварительная подготовка:
- сохранить патч — во вкладке CPU: контекстное меню asm view: Patches Ctrl+ P: кнопка Export; в моем случае (для v3.20.35) я получил следующее содержимое файла патча
LogiOptionsMgr.1337
:>logioptionsmgr.exe 00000000000D4317:85->84
- установить точку останова на
call qword ptr ds:[<&NtUserShowWindow>]
(было упомянуто выше)
- сохранить патч — во вкладке CPU: контекстное меню asm view: Patches Ctrl+ P: кнопка Export; в моем случае (для v3.20.35) я получил следующее содержимое файла патча
- подготовка:
- перезапустить
LogiOptionsMgr.exe
— меню «Отладка» > «Перезапустить» Ctrl+F2 - после перезапуска выполнение программы должно было остановиться на
call qword ptr ds:[<&NtUserShowWindow>]
, и как вы видите, патч (jne
→je
) не был применен автоматически, поэтому примените его вручную — Ctrl+ P: Кнопка импорта
- перезапустить
- проверятьпуть выполнения кода (цикл должен быть пропущен) — «Перешагнуть» F8(или"Анимация окончена", или используйтетрассировка)
- возобновить выполнение программы — «Выполнить» F9; путь выполнения кода необходимо повторить еще раз:
- ресурсы будут освобождены
- поток будет завершен (выход)
- соответствующие записи появятся на вкладке Журнал
Чтобы применить патч, откройте диалоговое окно «Патчи» Ctrl+ Pснова: кнопку «Файл патча» (временно сохраните исправленный файл LogiOptionsMgr.exe
в другом месте, а затем замените исходный).
Не забудьте отключить отладчик (меню Файл >Отсоединить) или немедленно завершить LogiOptionsMgr.exe
процесс (меню «Отладка» >Закрыть Alt+F2) перед заменой LogiOptionsMgr.exe
файла.
Примечание:В ходе выполнения вышеуказанных действий minidump\dump-*_*.dmp
в каталоге могут появиться минидампы LogiOptionsMgr.exe
— их можно смело удалять.
Примечание:в общем случае после замены LogiOptionsMgr.exe
лучше перезапустить его родителя ( LogiOptions.exe
) с помощью logoff Ctrl+ Alt+ Delete, Alt+ L/ login.