프로세서에 부담이 가중되고 프로세스 CPU 사용량이 낮으며 Filemon에서 활동이 없습니다.

프로세서에 부담이 가중되고 프로세스 CPU 사용량이 낮으며 Filemon에서 활동이 없습니다.

저는 다음 사양의 6년 된 노트북을 가지고 있습니다.

  • 운영 체제: Windows 8.1 Pro 64비트(6.3, 빌드 9600)

  • 제조사 및 모델: SAMSUNG 770Z5E/780Z5E

  • 프로세서: Intel(R) Core(TM) i7-3635QM CPU @ 2.40GHz

  • RAM: 8GB

최근에는 노트북이 뜨거워지고 팬이 미친 듯이 윙윙거리게 만드는 프로세스가 있는 것 같습니다. 저는 이 프로세스와 소프트웨어(Logitech 마우스 유틸리티)를 3년 넘게 사용해 왔습니다. 유일한 시스템 변경 사항은 분기에 한 번 적용되는 Windows 업데이트였습니다. 1년이 넘도록 아무것도 설치되지 않았습니다.

프로세스는 LogiOptionsMgr.exe입니다. 죽이자마자 노트북은 30초 안에 안정됩니다. 이상한 점은 프로세스가 1% 미만의 CPU를 사용한다고 주장하고 Filemon이 IO(디스크, 레지스트리, 네트워크 등)를 등록하지 않는다는 것입니다.

내가 보고 있는 모든 것은 내가 컴퓨터에 대해 알고 있는 것과 반대됩니다. 프로세스 사용률이 1% 미만으로 표시되는 경우 랩톱이 이와 같이 동작하는 원인이 되어서는 안 됩니다. 그리고 어쨌든 Filemon에 따르면 프로세스는 아무 작업도 수행하지 않는 것 같습니다. 다시 말하지만, 종료하면 노트북이 정상으로 돌아옵니다.

무슨 일이 일어나고 있는 걸까요?

답변1

따라서 Mokubai의 지시에 따라 AMD의 Switchable Graphics 소프트웨어는 Logitech 소프트웨어를 내 3D 그래픽 카드가 고성능 설정으로 작동하도록 요구하는 응용 프로그램으로 잘못 감지한 것으로 나타났습니다.

내 노트북에는 Intel 그래픽과 AMD Radeon 9700 시리즈가 내장되어 있습니다. 저는 모든 Logitech 소프트웨어를 성능보다 배터리 수명을 최적화하려는 소프트웨어로 명시적으로 취급하기 위해 AMD Catalyst 소프트웨어 내에 애플리케이션 프로필을 만들었습니다. 해낸 것 같습니다. 이 결함은 Windows 업데이트 후에 발생하므로 실제로 누구를 비난해야 할지 모르겠습니다.

답변2

iGPU로 마이그레이션한 후에도 LogiOptionsMgr.exe일정량의 와트를 계속 소비합니다. 아래에서는 문제를 완전히 제거하여 전기 요금을 줄이는 방법을 보여 드리겠습니다.

메모:당신은이것만 가지고 있는 게 아니야 문제(10,000명 이상 (약 34,557 명 )전체적으로):

내가 열면프로세스 해커"GPU" 및 "GPU 전용 바이트" 열을 추가하면 제 경우에는 LogiOptionsMgr.exeGPU의 0.94%(창을 이동할 때 6.19%)와 1.14MB를 사용합니다.

이제 문제(스레드, 호출 스택)를 지역화해 보겠습니다.

  1. Process Hacker에서: LogiOptionsMgr.exe프로세스를 두 번 클릭하고 속성 창에서: 스레드 탭으로 전환합니다.
  2. ▼ CPU 열 기준으로 정렬
  3. CPU를 가장 많이 사용하는 스레드를 일시 중단해 보십시오. 스레드의 상황에 맞는 메뉴 열기 > "일시 중단" 항목
  4. Process Hacker의 기본 창에서: 스레드 탭에서 GPU의 로드가 사라져야 합니다
    . 스레드 행이 회색으로 바뀌었습니다.
  5. 이제 호출 스택을 볼 수 있습니다(스레드를 두 번 클릭). 제 경우에는 스택이 다음과 같았습니다.
    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.exe3.20.35 입니다~ 아니다 취약한.

메모:의 스레드 하나를 일시 중지했음을 기억하십시오 LogiOptionsMgr.exe.

당신은x64dbg디버거. 경험해 보셨기를 바랍니다. 그렇지 않다면 더 쉽게 작업할 수 있는 몇 가지 설정이 있습니다(옵션 메뉴 > 기본 설정).

  • 이벤트탭 > "Break on" — 이 항목을 모두 선택 취소합니다. (나중에 "Entry Breakpoint*" 및 "Attach Breakpoint"를 활성화해 볼 수 있습니다.)
  • 예외탭: "범위 추가" 버튼 > 시작: 00000000, 끝:FFFFFFFF

의 시작하자:

  1. 파일 메뉴 >붙이다: 선택 LogiOptionsMgr.exe및 첨부
  2. 다음에 대한 기호 로드 d3d9.dll(이 작업은 한 번만 수행됨):
    • 기호 탭: 왼쪽 패널 > "d3d9.dll" 모듈 > 상황에 맞는 메뉴: "이 모듈에 대한 기호 다운로드"
  3. 프로그램 코드에서 다음 위치를 찾으세요. LogiOptionsMgr.exe+0xd4343(위 호출 스택의 #9):
    1. 스레드 탭(x64dbg)에서 이전에 일시 중단한 스레드로 전환합니다.
      1. 1"Suspend Count" 열이나 TID Process Hacker, dec → "ID" 열 x64dbg, hex 에서 찾으세요.
      2. 그것을 더블클릭하세요
    2. 당신은 스택의 맨 위에 있습니다. 조금 롤백하십시오.
      1. 호출 스택 탭: 상황에 맞는 메뉴: "의심되는 호출 스택 프레임 표시"
      2. 설명 열에서 "d3d9에서 logioptionsmgr....로 돌아가기...."를 찾습니다.
      3. 그것을 더블클릭하세요
    3. CPU 탭에서: 위로 스크롤asm이전 지침을 보려면 조금
      • 명령어 test가 현재 선택되어 있습니다(제 경우에는 — test eax,eax). 그 위에는 call지침이 있습니다 (내 경우에는 — call qword ptr ds:[rax+3C8])
    4. 명령어 에 중단점을 설정합니다 call. • 왼쪽의 회색 글머리 기호를 클릭하면 → 빨간색으로 변합니다.
    5. 현재(일시 중단된) 스레드 재개 — 스레드 탭: 스레드의 상황에 맞는 메뉴: "스레드 재개"
    6. d3d9.dll이제 CPU 탭에서 호출되는 의 함수 의 실제 이름을 볼 수 있습니다 . 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
      • 삼,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.exe에 싶어현재의우리에게 뭔가를 보여주세요…
      • 9,LogiOptionsMgr.exe+0xd4343
  4. 프로그램의 이 부분을 살펴보면"스텝 오버" 모드F8movzx eax,byte ptr ds:[rsi+38], 이 스레드가 다음 으로 시작하는 루프에서 회전하고 있음을 알 수 있습니다 .call qword ptr ds:[<&NtUserShowWindow>] ShowWindow) 이후 처음으로 돌아갑니다.call qword ptr ds:[<&PeekMessageW>]

루프의 시작 부분에는 루프의 시작/종료 조건이 있습니다.

test al,al
jne logioptionsmgr.13F904520

교체하면jne ~와 함께 je:

  1. 상황에 맞는 메뉴: 조립space
  2. jne로 교체하다je

… 그리고 F9프로그램 실행을 재개한 다음 다음에 의해 생성된 리소스를CoInitialize그리고Direct3DCreate9Ex(위의 asm 참조)이 제대로 릴리스되고 스레드가 종료되며 로그 탭에 다음 레코드가 나타납니다(NVIDIA의 GPU의 경우).

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

메모:하역psapi.dll응용 프로그램의 개인 마우스 설정이 작동을 중지(전환)할 것이라고 암시했을 수 있지만 개인 설정은 여전히 ​​작동합니다.

LogiOptionsMgr.exe패치를 최종적으로 커밋하기 전에 패치가 실행될 때 올바르게 작동하는지 확인해야 합니다 .

  1. 사전 준비:
    1. 패치 저장 - CPU 탭: asm 보기의 컨텍스트 메뉴: 패치 Ctrl+ P: 내보내기 버튼; 내 경우(v3.20.35의 경우) 패치 파일의 내용은 다음과 같습니다 LogiOptionsMgr.1337.
      >logioptionsmgr.exe
      00000000000D4317:85->84
      
    2. call qword ptr ds:[<&NtUserShowWindow>](위에서 언급한) 에 중단점을 설정합니다 .
  2. 준비:
    1. 다시 시작 LogiOptionsMgr.exe— 디버그 메뉴 > 다시 시작 Ctrl+F2
    2. 재시작 후 에서 프로그램 실행이 멈췄어야 하는데 call qword ptr ds:[<&NtUserShowWindow>], 보시다시피 패치( jneje)가 자동으로 적용되지 않아서 수동으로 적용합니다. — Ctrl+ P: Import 버튼
  3. 확인하다코드 실행 경로(루프를 건너뛰어야 함) — "Step over" F8(또는"애니메이트 오버", 또는 사용트레이싱)
  4. 프로그램 실행 재개 — "실행" F9; 코드 실행 경로를 다시 반복해야 합니다.
    • 자원이 공개됩니다
    • 스레드가 종료됩니다(종료).
    • 해당 기록이 로그 탭에 나타납니다.

패치를 커밋하려면 "패치" 대화 상자를 열고 Ctrl+ P다시 "패치 파일" 버튼을 엽니다(패치된 내용을 LogiOptionsMgr.exe다른 위치에 임시로 저장한 다음 원본을 교체합니다).

디버거를 분리하는 것을 잊지 마세요(파일 메뉴 >분리하다) 또는 즉시 프로세스를 종료합니다 LogiOptionsMgr.exe(디버그 메뉴 >닫기 Alt+F2) 파일을 교체하기 전에 LogiOptionsMgr.exe.

메모:위의 과정에서 미니덤프는 minidump\dump-*_*.dmp다음과 함께 디렉토리에 나타날 수 있습니다. LogiOptionsMgr.exe삭제해도 안전합니다.

메모:일반적인 경우에는 을 교체한 후 로그오프 + + , + / 로그인을 통해 LogiOptionsMgr.exe상위( )를 다시 시작하는 것이 좋습니다 .LogiOptions.exeCtrlAltDeleteAltL

관련 정보