Processador sobrecarregado, baixo uso da CPU do processo, sem atividade no Filemon

Processador sobrecarregado, baixo uso da CPU do processo, sem atividade no Filemon

Eu tenho um laptop de 6 anos com as seguintes especificações:

  • Sistema operacional: Windows 8.1 Pro de 64 bits (6.3, Build 9600)

  • Marca e modelo: SAMSUNG 770Z5E/780Z5E

  • Processador: CPU Intel(R) Core(TM) i7-3635QM a 2,40 GHz

  • RAM: 8 GB

Ultimamente, parece haver um processo que está fazendo com que o laptop esquente e faça os ventiladores girarem loucamente. Eu tenho esse processo e o software (utilitário de mouse Logitech) há mais de 3 anos. As únicas alterações do sistema foram as atualizações do Windows, que aplico uma vez por trimestre. Nada foi instalado há mais de um ano.

O processo é LogiOptionsMgr.exe. Assim que eu o mato, o laptop se estabiliza em 30 segundos. O estranho é que o processo afirma estar usando <1% da CPU e o Filemon não registra nenhum IO (disco, registro, rede, etc.).

Tudo o que vejo vai contra o que sei sobre computadores. Se a utilização do processo estiver mostrando <1%, isso não deve ser motivo para o laptop se comportar assim. E em qualquer caso, o processo não parece estar fazendo nada de acordo com Filemon. Novamente, mate-o e o laptop voltará ao normal.

O que pode estar acontecendo?

Responder1

Então, após a orientação de Mokubai, descobriu-se que o software Switchable Graphics da AMD estava detectando erroneamente o software Logitech como um aplicativo que exigia que minha placa gráfica 3D funcionasse com configurações de alto desempenho.

Meu laptop possui gráficos Intel integrados e também AMD Radeon série 9700. Criei perfis de aplicativos no software AMD Catalyst para tratar explicitamente todos os softwares da Logitech como aqueles que tentam otimizar a vida útil da bateria em detrimento do desempenho. Parece ter feito isso. Essa falha ocorreu após uma atualização do Windows, então não sei quem é o culpado.

Responder2

Mesmo após a migração LogiOptionsMgr.exepara o iGPU, ele continuará consumindo uma certa quantidade de watts. Abaixo vou mostrar como reduzir a conta de luz eliminando completamente o problema.

Observação:Você énão é o único com isso problema(mais de 10.000 (aproximadamente 34.557) pessoasno total):

Se eu abrirHacker de processose adicione as colunas "GPU" e "Bytes dedicados à GPU", então no meu caso LogiOptionsMgr.exeutiliza 0,94% da GPU (6,19% ao mover qualquer janela) e 1,14 MB.

Agora vamos tentar localizar o problema (thread, pilha de chamadas):

  1. no Process Hacker: clique duas vezes no LogiOptionsMgr.exeprocesso> na janela Propriedades: mude para a guia Threads
  2. classificar ▼ por coluna da CPU
  3. tente suspender o thread que utiliza mais CPU: abra o menu de contexto do thread> item "Suspender"
  4. na janela principal do Process Hacker: a carga na GPU deve desaparecer
    na aba Threads: a linha do thread ficou cinza
  5. agora você pode olhar a pilha de chamadas (clique duas vezes no thread) - no meu caso, a pilha era assim:
    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
    
    Observação:ignore os nomes das d3d9.dllfunções por enquanto — eles são imprecisos (você verá os nomes corretos abaixo).

A seguir, vamos tentar localizar o local problemático (nº 9 na pilha de chamadas acima) no LogiOptionsMgr.execódigo e corrigi-lo nós mesmos. A propósito, minha versão LogiOptionsMgr.exeé 3.20.35não vulnerável.

Observação:lembre-se de que você suspendeu um tópico do LogiOptionsMgr.exe.

Você precisará dox64dbgdepurador. Espero que você tenha experiência com isso, caso contrário, aqui estão algumas configurações que facilitarão o trabalho (menu Opções > Preferências):

  • Eventosguia> "Break on" - desmarque tudo isso (no futuro, você pode tentar ativar "Entry Breakpoint*" e "Attach Breakpoint")
  • Exceçõesguia: botão "Adicionar intervalo" > início:, 00000000fim:FFFFFFFF

Vamos começar:

  1. Menu Arquivo >Anexar: selecione LogiOptionsMgr.exee anexe
  2. carregar símbolos para d3d9.dll(isso é feito apenas uma vez):
    • na guia Símbolos: painel esquerdo > módulo "d3d9.dll" > menu de contexto: "Baixar símbolos para este módulo"
  3. encontre este local no código do programa: LogiOptionsMgr.exe+0xd4343(nº 9 na pilha de chamadas acima):
    1. mude para o thread que você suspendeu anteriormente - na guia Threads (x64dbg):
      1. encontre-o 1na coluna "Contagem de suspensão" ou por TID Process Hacker, dec → coluna "ID" x64dbg, hex
      2. clique duas vezes nele
    2. você está no topo da pilha – retroceda um pouco:
      1. na guia Pilha de chamadas: menu de contexto: "Mostrar quadro de pilha de chamadas suspeito"
      2. na coluna Comentário: encontre "return to logioptionsmgr.… from d3d9.…"
      3. clique duas vezes nele
    3. na guia CPU: role para cimaasmum pouco para ver as instruções anteriores
      • a testinstrução está atualmente selecionada (no meu caso — test eax,eax); acima está a callinstrução (no meu caso - call qword ptr ds:[rax+3C8])
    4. defina um ponto de interrupção na callinstrução — clique no • marcador cinza à esquerda → ele ficará vermelho
    5. retomar o thread atual (suspenso) — na aba Threads: menu de contexto do thread: "Resume Thread"
    6. agora na aba CPU você pode ver o nome real da d3d9.dllfunção que está sendo chamada: qword [rax+3C8]=<d3d9.public: virtual long __cdecl CBaseDevice::PresentEx(…) __ptr64>
      ou seja, a pilha de chamadas mostrada acima se parece com isto:
      • 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::PresentExPresentExPresent- LogiOptionsMgr.exequerpresentemostre algo para nós…
      • 9,LogiOptionsMgr.exe+0xd4343
  4. se você percorrer esta parte do programa noModo "Passar por cima"F8, você pode perceber que esse thread está girando em um loop que começa com movzx eax,byte ptr ds:[rsi+38](quase imediatamente apóscall qword ptr ds:[<&NtUserShowWindow>] ShowWindow) e retorna ao início apóscall qword ptr ds:[<&PeekMessageW>]

No início do loop está a condição de entrada/fim do loop:

test al,al
jne logioptionsmgr.13F904520

Se você substituirjne com je:

  1. menu de contexto: Montarspace
  2. substituir jnecomje

… e retomar a execução F9do programa, então os recursos criados porCoInitializeeDirect3DCreate9Ex(veja acima no asm) será liberado corretamente, o thread será encerrado e os seguintes registros aparecerão na aba Log (no caso de GPU da NVIDIA):

DLL Unloaded: … nvd3dumx.dll
DLL Unloaded: … psapi.dll
Thread … exit

Observação:descarregandopsapi.dllpode ter sugerido que as configurações pessoais do mouse para aplicativos irão parar de funcionar (alternar), no entanto, as configurações pessoais ainda funcionam.

Antes de finalmente enviar o patch, resta garantir que ele funcione corretamente quando LogiOptionsMgr.exefor iniciado:

  1. pré-preparação:
    1. salve o patch — na aba CPU: menu de contexto da visualização do conjunto: Patches Ctrl+ P: botão Exportar; no meu caso (para v3.20.35), obtive o seguinte conteúdo do arquivo de patch LogiOptionsMgr.1337:
      >logioptionsmgr.exe
      00000000000D4317:85->84
      
    2. definir um ponto de interrupção no call qword ptr ds:[<&NtUserShowWindow>](foi mencionado acima)
  2. preparação:
    1. reinicie o LogiOptionsMgr.exe- menu Depurar> Reiniciar Ctrl+F2
    2. após a reinicialização, a execução do programa deveria ter parado no call qword ptr ds:[<&NtUserShowWindow>], e como você pode ver, o patch ( jneje) não foi aplicado automaticamente, então aplique-o manualmente — Ctrl+ P: botão Importar
  3. verificaro caminho de execução do código (o loop deve ser ignorado) — "Passar por cima" F8(ou"Animar acabou", ou usarrastreamento)
  4. retomar a execução do programa — "Executar" F9; o caminho de execução do código deve ser repetido novamente:
    • recursos serão liberados
    • thread irá terminar (sair)
    • os registros correspondentes aparecerão na aba Log

Para submeter o patch, abra a caixa de diálogo "Patches" Ctrl+ Pnovamente: botão "Arquivo de Patch" (salve temporariamente o patch LogiOptionsMgr.exeem outro local e depois substitua o original).

Não se esqueça de desconectar o depurador (menu Arquivo >Desanexar) ou encerrar imediatamente o LogiOptionsMgr.exeprocesso (menu Debug >Fechar Alt+F2) antes de substituir o LogiOptionsMgr.exearquivo.

Observação:durante o procedimento acima, minidespejos minidump\dump-*_*.dmppodem aparecer no diretório com LogiOptionsMgr.exe- é seguro excluí-los.

Observação:no caso geral, após substituir o LogiOptionsMgr.exe, é melhor reiniciar seu pai ( LogiOptions.exe) fazendo logoff Ctrl+ Alt+ Delete, Alt+ L/ login.

informação relacionada