Prozessor überlastet, CPU-Auslastung des Prozesses niedrig, keine Aktivität in Filemon

Prozessor überlastet, CPU-Auslastung des Prozesses niedrig, keine Aktivität in Filemon

Ich habe einen 6 Jahre alten Laptop mit folgenden Spezifikationen:

  • Betriebssystem: Windows 8.1 Pro 64-Bit (6.3, Build 9600)

  • Marke und Modell: SAMSUNG 770Z5E/780Z5E

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

  • Arbeitsspeicher: 8 GB

In letzter Zeit scheint es einen Prozess zu geben, der dazu führt, dass der Laptop heiß wird und die Lüfter wie verrückt surren. Ich habe diesen Prozess und die Software (Logitech-Maus-Dienstprogramm) seit über 3 Jahren. Die einzigen Systemänderungen waren Windows-Updates, die ich einmal im Quartal anwende. Seit über einem Jahr wurde nichts installiert.

Der Prozess ist LogiOptionsMgr.exe. Sobald ich ihn beende, beruhigt sich der Laptop innerhalb von 30 Sekunden. Das Seltsame ist, dass der Prozess nur angibt, weniger als 1 % der CPU zu verwenden, und Filemon keine IO (Festplatte, Registrierung, Netzwerk usw.) registriert.

Alles, was ich sehe, widerspricht dem, was ich über Computer weiß. Wenn die Prozessauslastung < 1 % beträgt, sollte das kein Grund dafür sein, dass sich der Laptop so verhält. Und laut Filemon scheint der Prozess ohnehin nichts zu tun. Beenden Sie ihn erneut, und der Laptop funktioniert wieder normal.

Was könnte los sein?

Antwort1

Nach der Anweisung von Mokubai stellte sich heraus, dass die Switchable Graphics-Software von AMD die Logitech-Software fälschlicherweise als eine Anwendung erkannte, die von meiner 3D-Grafikkarte verlangte, mit Höchstleistungseinstellungen zu starten.

Mein Laptop verfügt über integrierte Intel-Grafiken und auch über die AMD Radeon 9700-Serie. Ich habe Anwendungsprofile in der AMD Catalyst-Software erstellt, um alle Logitech-Software explizit als solche zu behandeln, die versucht, die Akkulaufzeit gegenüber der Leistung zu optimieren. Scheint so gewesen zu sein. Dieser Fehler trat nach einem Windows-Update auf, also weiß ich nicht wirklich, wer die Schuld trägt.

Antwort2

Auch nach der Migration LogiOptionsMgr.exeauf die iGPU wird weiterhin eine gewisse Menge an Watt verbraucht. Im Folgenden zeige ich, wie Sie die Stromrechnung senken können, indem Sie das Problem vollständig beseitigen.

Notiz:Du bistnicht der einzige mit diesem Problem(mehr als 10.000 (ca. 34.557) Personenin Summe):

Wenn ich öffneProzesshackerund addiere die Spalten „GPU“ und „GPU dedizierte Bytes“, dann sind in meinem Fall LogiOptionsMgr.exe0,94 % der GPU (6,19 % beim Verschieben eines beliebigen Fensters) und 1,14 MB ausgelastet.

Versuchen wir nun, das Problem zu lokalisieren (Thread, Aufrufstapel):

  1. in Process Hacker: Doppelklicken Sie auf LogiOptionsMgr.exeden Prozess > im Eigenschaftenfenster: wechseln Sie zur Registerkarte Threads
  2. Sortieren ▼ nach CPU-Spalte
  3. Versuchen Sie, den Thread anzuhalten, der die meiste CPU-Auslastung hat: Öffnen Sie das Kontextmenü des Threads > „Anhalten“
  4. im Hauptfenster von Process Hacker: die Belastung der GPU sollte verschwinden.
    Im Threads-Tab: die Thread-Zeile ist grau geworden
  5. Jetzt können Sie sich den Aufrufstapel ansehen (Doppelklick auf den Thread) – in meinem Fall sah der Stapel so aus:
    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
    
    Notiz:d3d9.dllIgnorieren Sie vorerst die Namen der Funktionen – sie sind ungenau (die richtigen Namen sehen Sie weiter unten).

Als nächstes versuchen wir, die problematische Stelle (Nr. 9 im obigen Aufrufstapel) im LogiOptionsMgr.exeCode zu lokalisieren und selbst zu beheben. Die Version meines Codes ist übrigens LogiOptionsMgr.exe3.20.35nicht verletzlich.

Notiz:Denken Sie daran, dass Sie einen Thread von angehalten haben LogiOptionsMgr.exe.

Sie benötigen diex64dbgDebugger. Ich hoffe, Sie haben Erfahrung damit, wenn nicht, dann sind hier ein paar Einstellungen, die die Arbeit damit erleichtern (Menü Optionen > Einstellungen):

  • VeranstaltungenRegisterkarte > „Break on“ – deaktivieren Sie dies alles (in Zukunft können Sie versuchen, „Entry Breakpoint*“ und „Attach Breakpoint“ zu aktivieren)
  • AusnahmenRegisterkarte: Schaltfläche „Bereich hinzufügen“ > Start: 00000000, Ende:FFFFFFFF

Lass uns anfangen:

  1. Menü „Datei“ >Anfügen: auswählen LogiOptionsMgr.exeund anhängen
  2. Symbole laden für d3d9.dll(dies wird nur einmal durchgeführt):
    • im Reiter „Symbole“: linker Bereich > Modul „d3d9.dll“ > Kontextmenü: „Symbole für dieses Modul herunterladen“
  3. Suchen Sie im Programmcode nach dieser Stelle: LogiOptionsMgr.exe+0xd4343(Nr. 9 im Aufrufstapel oben):
    1. Wechseln Sie zu dem Thread, den Sie zuvor angehalten haben – auf der Registerkarte „Threads“ (x64dbg):
      1. finden Sie es 1in der Spalte "Suspend Count" oder per TID Process Hacker, dec → die Spalte "ID" x64dbg, hex
      2. doppelklicken Sie darauf
    2. Sie befinden sich oben auf dem Stapel. Rollen Sie ein wenig zurück:
      1. im Reiter „Aufrufliste“: Kontextmenü: „Verdächtigen Call-Stack-Frame anzeigen"
      2. Suchen Sie in der Kommentarspalte nach „Zurück zu logioptionsmgr.… von d3d9.…“.
      3. doppelklicken Sie darauf
    3. in der Registerkarte CPU: Scrollen Sie nach obenasmein wenig, um die vorherigen Anweisungen zu sehen
      • die testAnweisung ist aktuell ausgewählt (in meinem Fall — test eax,eax); darüber steht die callAnweisung (in meinem Fall — call qword ptr ds:[rax+3C8])
    4. Setzen Sie einen Haltepunkt für die callAnweisung — klicken Sie auf • den grauen Punkt links → er wird rot
    5. den aktuellen (angehaltenen) Thread fortsetzen — im Threads-Tab: Kontextmenü des Threads: „Thread fortsetzen“
    6. d3d9.dllJetzt können Sie auf der Registerkarte „CPU“ den tatsächlichen Namen der aufgerufenen Funktion sehen : qword [rax+3C8]=<d3d9.public: virtual long __cdecl CBaseDevice::PresentEx(…) __ptr64>
      Der oben angezeigte Aufrufstapel sieht also folgendermaßen aus:
      • 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.exemöchtegegenwärtigzeig uns was…
      • 9,LogiOptionsMgr.exe+0xd4343
  4. Wenn Sie diesen Teil des Programms imModus „Übersteigen“F8, können Sie erkennen, dass sich dieser Thread in einer Schleife dreht, die mit movzx eax,byte ptr ds:[rsi+38](fast unmittelbar nachcall qword ptr ds:[<&NtUserShowWindow>] ShowWindow) und kehrt zum Anfang zurück nachcall qword ptr ds:[<&PeekMessageW>]

Am Anfang der Schleife steht die Eintritts-/Endbedingung der Schleife:

test al,al
jne logioptionsmgr.13F904520

Wenn Sie ersetzenjne mit je:

  1. Kontextmenü: Zusammenbauenspace
  2. ersetzen jnemitje

… und die Ausführung F9des Programms fortsetzen, dann werden die Ressourcen, die durchCoInitializeUndDirect3DCreate9Ex(siehe oben im ASM) wird ordnungsgemäß freigegeben, der Thread wird beendet und die folgenden Einträge werden auf der Registerkarte „Protokoll“ angezeigt (im Fall einer GPU von NVIDIA):

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

Notiz:Entladungpsapi.dllhat möglicherweise darauf hingewiesen, dass die persönlichen Mauseinstellungen für Anwendungen nicht mehr funktionieren (Umschalten), die persönlichen Einstellungen funktionieren jedoch weiterhin.

Bevor der Patch endgültig übermittelt wird, muss noch sichergestellt werden, dass er beim LogiOptionsMgr.exeStart korrekt funktioniert:

  1. Vorbereitende Maßnahmen:
    1. Speichern Sie den Patch – auf der Registerkarte „CPU“: Kontextmenü der ASM-Ansicht: Patches Ctrl+ P: Schaltfläche „Exportieren“. In meinem Fall (für v3.20.35) habe ich den folgenden Inhalt der Patch-Datei erhalten LogiOptionsMgr.1337:
      >logioptionsmgr.exe
      00000000000D4317:85->84
      
    2. Setzen Sie einen Haltepunkt auf call qword ptr ds:[<&NtUserShowWindow>](wie oben erwähnt)
  2. Vorbereitung:
    1. neu starten LogiOptionsMgr.exe— Debug-Menü > Neustart Ctrl+F2
    2. nach dem Neustart sollte die Programmausführung bei gestoppt worden sein call qword ptr ds:[<&NtUserShowWindow>], und wie Sie sehen, wurde der Patch ( jneje) nicht automatisch angewendet, wenden Sie ihn daher manuell an — Ctrl+ P: Schaltfläche „Importieren“
  3. überprüfender Code-Ausführungspfad (die Schleife muss übersprungen werden) — „Step over“ F8(oder"Animation über"oder verwenden SieRückverfolgung)
  4. Fortsetzung der Programmausführung — „Ausführen“ F9; der Codeausführungspfad muss noch einmal wiederholt werden:
    • Ressourcen werden freigegeben
    • Thread wird beendet (exit)
    • Die entsprechenden Datensätze werden auf der Registerkarte „Protokoll“ angezeigt.

Um den Patch zu übernehmen, öffnen Sie den Dialog „Patches“ Ctrl+ Perneut: Schaltfläche „Patch-Datei“ (speichern Sie den Patch vorübergehend LogiOptionsMgr.exean einem anderen Ort und ersetzen Sie dann den ursprünglichen).

Vergessen Sie nicht, den Debugger zu trennen (Menü Datei >Ablösen) oder beenden Sie den LogiOptionsMgr.exeProzess sofort (Menü „Debuggen“ >Schließen Alt+F2), bevor Sie die LogiOptionsMgr.exeDatei ersetzen.

Notiz:Während des oben genannten Vorgangs minidump\dump-*_*.dmpkönnten Minidumps im Verzeichnis mit dem erscheinen. LogiOptionsMgr.exeSie können bedenkenlos gelöscht werden.

Notiz:im Allgemeinen LogiOptionsMgr.exeist es nach dem Ersetzen des besser, das übergeordnete Element ( LogiOptions.exe) durch Abmelden Ctrl+ Alt+ Delete, Alt+ L/ Anmelden neu zu starten.

verwandte Informationen