Warum arbeitet meine CPU nicht mit ihrem maximalen Potenzial, selbst wenn meine Anwendung (die die CPU-Ressourcen nutzt) zurückliegt?

30

Warum schöpft meine CPU nie aus, selbst wenn meine Anwendung, die 40% der CPU aufnimmt (aber 30 - 40% der CPU immer noch im Leerlauf bleibt), verzögert ist?

Bedeutet das:

  1. Es gibt eine Möglichkeit, die CPU zu zwingen, mit 100% zu laufen
  2. CPUs werden auf diese Weise hergestellt und ich kann nur neue Hardware kaufen.
  3. Die Einschränkung liegt bei der Anwendung und die Verzögerung wird sich auch bei besserer CPU nicht verbessern. (Unter der Annahme, dass die Anwendung perfekt ist, frage ich, ob die Software auf diese Weise ausgeführt wird?)
  4. Etwas anderes.
Nhu Thai Sanh Nguyen
quelle
4
Ich verstehe, worauf es bei OP ankommt. Ich verachte, dass Antivirus- oder Windows-Updates mein System völlig ruinieren und den einen Kern voll ausschöpfen. Lassen Sie den Rest von ihnen, was zu tun? Am Ende sitze ich 12 Minuten, bis ich wieder arbeiten kann.
10
Jede Anwendung, die selbst eine der mehreren gemeinsam genutzten Ressourcen auf einem Computer (CPU, Speicher, Speicher oder Netzwerk) maximal nutzt, kann das gesamte System verlangsamen, obwohl die verbleibenden gemeinsam genutzten Ressourcen nicht genutzt werden.
Ich sage Reinstate Monica
78
Ich programmiere seit 25 Jahren. Und ich kann Ihnen versichern - das ist keine Verschwörung. Es ist selten, Anwendungen zu finden, bei denen die CPU der Engpass ist. Die meisten Anwendungen warten auf andere Dinge wie Festplatte, RAM oder Netzwerk.
Contango
10
Nehmen wir an, Sie erledigen einige Berechnungsaufgaben - beispielsweise Steuern. Wenn Sie keine Arbeit erledigen, während Sie darauf warten, dass Ihre Steuerformulare per Post eingehen, werden Sie lange, lange keine Arbeit erledigen. Laggy Apps sind oft schlecht geschrieben. Sie blockieren den UI-Thread bei Vorgängen mit hoher Latenz wie Festplatten- oder Netzwerk-E / A, die nichts mit der CPU zu tun haben. Daher ist die CPU inaktiv und die App reagiert nicht. Eine schnellere CPU zu bekommen, hilft nicht. So gelangen Sie schneller zum Blockieren von Vorgängen mit hoher Latenz .
Eric Lippert
3
@ TwistyImpersonator: Das ist eine gute Analogie für Multithread-Programme mit vielen Konflikten. Wir sehen manchmal, dass ein Multithread-Programm auf einer schnelleren CPU langsamer ausgeführt wird, weil die CPU mehr Threads schneller in einen blockierten Zustand versetzt als eine langsamere CPU. Wenn jeder Fahrer in New York morgen ein zehnmal schnelleres Auto bekommen würde , würden sich die Pendelzeiten nicht verbessern . Sie würden schlimmer werden.
Eric Lippert

Antworten:

94

Sie führen wahrscheinlich Anwendungen mit einem Thread aus, die nur einen einzelnen CPU-Kern ausschöpfen können. Da 100% eines Kerns weniger als 100% der Kapazität einer Multi-Core-CPU ausmacht, erreicht die gesamte CPU-Auslastung nicht 100%.

Sie können dies bestätigen, indem Sie die einzelne Kernauslastung im Task-Manager anzeigen. Suchen Sie nach einzelnen Kernen, die sich der maximalen Auslastung nähern.

Ich sage Reinstate Monica
quelle
24
Aufgrund des Wechsels wird nur eine verteilte Verwendung angezeigt, die sich auf die Verwendung eines Kerns summiert. Grundsätzlich verwendet die App genau einen Kern, aber sie springt zwischen den Kernen herum, sodass jeder auf 1 / n gemittelt wird.
Aganju
62
Ich würde auch sagen, dass es möglich ist, dass die CPU nicht der eigentliche Engpass ist.
16
Ich erinnere mich vage, dass die Zwergenfestung einen Kern zu 100% zu eng gemacht hat, und er begann, andere Teile in einen zweiten Thread abzutrennen, was dazu führte, dass der "Haupt" -Thread zu 100% gesperrt war und der "Hintergrund" -Thread zwischen 20 und 60% lag. Auf einem Quad-Core sind das ... 30-40%.
Mooing Duck
3
Vergessen Sie nicht den Turbo-Modus auf CPUs. Der Taskmanager berücksichtigt dies bei der Berechnung des Lastprozentsatzes nicht. Auf meinem i5-4570S sehe ich oft eine Last von ungefähr 30%. Das ist ein Kern (25%) mit regulären 2,9 GHz auf 3,4 GHz. 25 * 3,4 / 2,9 ist fast 30%. Mit einer höheren Spreizung zwischen Normal- und Turbofrequenz können wir höher werden.
Sunzi
7
@AytAyt - Ich würde noch einen Schritt weiter gehen und sagen, es ist nicht nur möglich, es ist fast sicher . Solange die OP-Anwendung nicht ausschließlich mit Zahlen arbeitet (oder überall Spin-Locks verwendet), ist es sogar mit einem Multithread-Programm ziemlich schwierig, eine CPU vollständig zu laden. Jedes Festplatten- oder Netzwerk-E / A verlässt Leerlaufzyklen, und angesichts der Erwähnung einer "verzögerten" App durch das OP scheint es wahrscheinlich, dass eine gewisse Netzwerkkommunikation im Spiel ist.
Donnerstag,
49

Sie haben Ihr Betriebssystem nicht angegeben. Also wird die Antwort gerne geläufig sein.

Anwendungen können aus verschiedenen Gründen eingeschränkt sein. Der Engpass kann sein in:

  • Zentralprozessor
    • langsame Geschwindigkeit
    • Single / Low Threaded Apps (können nicht alle Cores / Threads nutzen)
  • I / O
    • Plattendurchsatz
    • Festplattenlatenz
    • Netzwerkdurchsatz
    • Netzwerk-Latenz
  • Erinnerung
    • Kapazität
    • Durchsatz
    • Latenz
    • unzureichender Cache
    • Ort (NUMA)
    • tauschen

Und es gibt noch mehr Gründe, die nicht so häufig vorkommen.

Sehen Sie sich also Ihre Systemressourcen an und versuchen Sie, Ihr System auf andere Engpässe als nur die Gesamt-CPU-Auslastung zu analysieren.

Jaroslav Kucera
quelle
9
Außerdem: Die Grafikkarte verfügt über eine separate GPU, E / A und einen separaten Speicher. Dies kann auch das Problem sein.
Mooing Duck
2
@MooingDuck Stimmt, aber das ist normalerweise nur dann ein Problem, wenn die betreffende Anwendung tatsächlich die GPU verwendet (dh ein 3D-Spiel oder eine CUDA / OpenCL-App oder
ähnliches
13

Im Allgemeinen spreche ich von Staub, wenn Leute von einem langsamen Computer sprechen. Als ehemaliger Computertechniker mit 15 Jahren Berufserfahrung stellte ich fest, dass das einfache Ausblasen von Staub die Leistung erheblich verbessern kann.

Ich spreche nicht von einer dünnen, kaum wahrnehmbaren Staubmenge, sondern von großen Klumpen oder sogar Matten, die einen normalen Luftstrom verhindern. Ich habe Kühlkörper gesehen, die im Grunde genommen einen Filter über sich hatten, der Staub war, und keinen eigentlichen Filter. Dies verhindert, dass eine erhebliche Menge Luft die CPU jemals kühlt. Wenn Sie Staub auf diese Weise entfernen, werden die Lüfter in der Regel sofort leiser und Ihre Komponenten halten länger. Hitze hatte so manchen Computer getötet, den ich reparieren sollte.

Wenn Sie mit der Idee des Wärmeproblems einhergehen, können Sie auch eine bessere Wärmeleitpaste ausprobieren. Das weiße cr @ p, mit dem die meisten Prozessoren geliefert werden, ähnelt dem Yugo der Wärmeleitpaste. Ich benutze Arctic Silver, aber es gibt sogar bessere Sachen. Arctic Silver handelt von einem Porche (unter Verwendung der Auto-Bewertungsskala), aber es gibt Ferrari- und Supercar-Varianten.

Prozessoren neigen dazu, bei Überhitzung langsamer zu werden. Dies ist eine physikalische Sache sowie eine "Selbsterhaltung", die in vielen CPUs programmiert ist. Ich weiß nicht, ob es im Task-Manager noch 100% anzeigt oder ob es 40% anzeigt (wie Sie sehen), aber es kann eine erhebliche Verlangsamung sein, während die CPU versucht, den Kühlkörper und den Lüfter laufen zu lassen. " aufholen."

Eine andere Sache, die Ihre CPU verlangsamen könnte, ist die GPU. Wenn Sie grafikintensive Spiele oder Dienstprogramme (wie CAD) ausführen, hält Ihre GPU möglicherweise Ihre CPU zurück. Eine bessere Grafikkarte zu bekommen, könnte etwas sein, das man sich ansehen sollte. Die Verwendung der falschen richtigen Karte kann Sie auch zurückhalten. Spielekarten sind (normalerweise) nicht für die Verwendung mit CAD- und Workstation-Karten ausgelegt, und Workstation-Karten eignen sich (normalerweise) auch nicht für Spiele. Einige tun es, aber die meisten nicht.

Wie @Jaroslav Kucera erwähnte, könnte es sich um eine Festplatte handeln. Wenn Sie die HD (s) sehr oft treffen, können Sie den Vorgang verlangsamen. Normalerweise führe ich mehrere Laufwerke aus. Eines speziell für das Betriebssystem und andere (s) für Software, Windows-Auslagerungsdateien, persönliche Dateien usw. Abgesehen davon, dass Sie sich bei einem Betriebssystemausfall nicht so viele Gedanken über das Sichern persönlicher Daten machen müssen, wird die Arbeitsbelastung durch mehrere Festplatten erheblich erhöht. Das gleichzeitige Lesen und Schreiben auf dieselbe Festplatte kann die Festplatte erheblich verlangsamen. Die Verwendung von SHDs kann dies mildern, jedoch nicht vollständig. Photoshop und Videobearbeitungssoftware sind dafür bekannt, dass sie HDs hart treffen. Das Lesen von einer Festplatte und das Ausgeben auf eine zweite Festplatte ist der richtige Weg. Dies hilft auch das Leben Ihrer HDs. Ich gehe auch mit aktiver Kühlung auf meine HDs. Ich habe keine Festplatte mehr getötet, seit ich vor über 15 Jahren einen Lüfter und einen Kühlkörper eingebaut habe. Google ihnen, sie sind billige Versicherung.

Ob Sie es glauben oder nicht, Ihr Netzteil könnte Sie auch verlangsamen. Wenn Sie nicht genug Strom haben (oder Ihr Netzteil ist alt oder ein billiger, überbewerteter chinesischer POS), können Leistungsprobleme auftreten. Ich habe aus erster Hand gesehen, welche seltsamen Betriebssystemprobleme ein flockiges Netzteil verursachen kann. Sie suchen sowohl nach Spannung als auch nach Ampere. Vergewissern Sie sich daher, dass diese den Spezifikationen des Netzteils entsprechen, wenn Sie diesen Weg gehen, und stellen Sie sicher, dass sie Ihren Strombedarf decken oder übertreffen. Wenn Ihre Komponenten insgesamt 500 Watt haben und Sie ihnen sogar 475 Watt geben, ist das schlecht. Ich empfehle, Ihre Anforderungen um etwa 20% zu übertreffen, damit Sie nicht so schnell ein neues Netzteil kaufen müssen, wenn Ihr Netzteil älter wird (und die Leistung sinkt) und Ihre anderen Komponenten älter werden (und mehr Leistung benötigen).

Einschließlich der anderen Antworten hier gibt es noch weitere Gründe, warum Ihr Computer langsam läuft. Abgesehen von der Option PSU wurde das, worüber ich sprach, sehr häufig gesehen, als ich Computertechniker war. Das Durchführen eines Benchmarks und anderer Tests ist die einzige Möglichkeit, dies herauszufinden. Das Austauschen von Teilen löst möglicherweise nicht einmal das Problem, wenn es sich um eine Kombination mehrerer Teile handelt, die die Verlangsamung verursacht.

Und, AFAIK, es gibt keine Möglichkeit, Ihren Computer zu zwingen, 100% des Prozessors zu verwenden. Die CPU und das Betriebssystem wissen, was sie zu tun haben, und sind in der Regel sehr gut in ihrer Arbeit. :-) Ich glaube, noch niemand hat einen Weg gefunden, eine CPU zwangsweise so zu speisen, dass sie zu 100% läuft, wenn Sie es für richtig halten. Zumindest nicht ohne zusätzlichen Müll, damit der Prozentsatz "gut aussieht".

Wenn Sie 40% und nicht und eine ganzzahlige Aufteilung von 100% (wie 25%, 33% oder 50%) sehen, habe ich das Gefühl, dass es sich nicht um ein einzelnes Threading-Problem handelt. Es könnte sein, aber das ist nicht der Punkt, an den ich denke. +1 an @Twisty Impersonator für das sofortige Aufrufen.

Viel Glück beim Herausfinden! Ich habe Tage damit verbracht, diese Art von Dingen herauszufinden, nur um die meisten Eingeweide als "letzte Möglichkeit" zu ersetzen.

computercarguy
quelle
1
+1, um auf die Möglichkeit hinzuweisen, dass eine Anwendung an einer ausgelasteten GPU hängen bleiben kann.
Ich sage Reinstate Monica
6
Ich habe vergessen zu erwähnen, dass Rauchen in der Nähe Ihres Computers eines der schlimmsten Dinge ist, die Sie tun können. Es hinterlässt eine böse, grobe und ekelhafte (kann das nicht genug betonen), orangefarbene, klebrige Sauerei, die nicht beseitigt werden kann. Staub wird anbacken und kann nicht mehr entfernt werden. Sie könnten es mit einem Autoteile-Ölbad oder einem Schallwasserbad abbekommen, aber ich habe diese Schwierigkeiten nie durchgemacht. Sogar die Reinigung des Gehäuses ist vergeblich.
Computercarguy
2
Nur aus der Sicht eines Entwicklers wird die CPU tun, was Sie ihm sagen. Wenn das Maximum nicht bei 100% liegt, wartet Ihr Programm auf andere Ereignisse (Festplatten-E / A, Netzwerk, Benutzereingaben, Systemmeldungen usw.). Wenn Sie etwas für die CPU zu tun haben, verwendet sie automatisch 100% (vorausgesetzt, es handelt sich um eine Multithread-Anwendung), um das zu tun, was Ihr Programm benötigt.
JPhi1618
2
@ JPhi1618: Du vergisst die Hitze. Unabhängig davon, was Sie vorgeben, wird die CPU bei Überhitzung automatisch auf weit unter 100% gedrosselt.
Mooing Duck
9
@ JPhi1618 CPUs werden normalerweise gedrosselt, indem ihre Frequenz skaliert wird (Untertaktung). Statt mit beispielsweise 3,0 GHz werden sie also mit 2,0 GHz betrieben. Daher kann eine thermisch gedrosselte CPU immer noch eine Auslastung von 100% melden, da jeder "Arbeitsslot" belegt ist und nur weniger "Arbeitsslots" in der Zeiteinheit verfügbar sind.
el.pescado
3

Dies können Energiespareinstellungen im BIOS oder im Betriebssystem sein. Viele moderne CPUs und Motherboards verfügen über Einstellungen, mit denen die CPU sparsamer mit dem Stromverbrauch umgehen kann (insbesondere bei Laptops, bei denen der Akku eine lange Lebensdauer haben soll). Möglicherweise können Sie eine solche Einstellung deaktivieren. Vergewissern Sie sich jedoch, dass Sie wissen, was Sie tun, da sich neben der Einstellung in der Regel andere Dinge befinden, die die Funktionalität des Computers auf andere wichtige Weise beeinträchtigen können.

mathreadler
quelle
2

Ich bin regelmäßig zu 100% ausgelastet, wenn ich Rendering- und Rechenaufgaben mache. Ich werde sicherstellen, dass das Hyperthreading 100% erreicht und die Anweisungsreihenfolge eine große Sache ist. Intel und AMD verfügen beide über eine große Menge an Hardware, die für die Neuordnung von Befehlen vorgesehen ist, um so viele Ausführungskerne wie möglich zu füllen. Wenn Sie 30% auf einer modernen Maschine erhalten, können Sie

  • Check Temps - Intel & AMD beide downclocken, wenn sie heiß werden und es zeigt sich als Stottern und Stacheln.
  • Mach nicht viel damit .... Beispiele sind:
    1. Surfen im Internet
    2. Email
    3. Die meisten einfachen Spiele
    4. Ich würde fast garantieren, dass es sich bei Ihrem Problem um eines oder alle der folgenden Probleme handelt, beginnend oben:
  • Besorgen Sie sich eine SSD
  • Besorgen Sie sich eine SSD
  • Holen Sie sich Ihr Betriebssystem auf die SSD und verschieben Sie normale Daten auf ein herkömmliches Multi-TB-Laufwerk. Windows benötigt mehr Zugriff auf seine lokalen Dateien als alles andere.
  • Bonazai Buddy?
  • Halten Sie alle Laufwerke mindestens über 10% ihrer Kapazität. NTFS ist ein Journal-Dateisystem und die Leistung nimmt ab, je voller das Laufwerk wird.
  • Sie benötigen ein NVMe-Laufwerk / SSD für Ihr Betriebssystem so schnell wie möglich (ja, ich habe es noch einmal gesagt). Die Leistung ist erstaunlich und setzt sich im zweiten Teil fort ... Ein großer Einzelhändler verkaufte heute Samsung 961 NMVe 512 GB-Laufwerke für 300 US-Dollar, was für den normalen Gebrauch ausreichend ist.
  • Windows 10 ist GPU-schwer. Eine billige dedizierte Grafikkarte kann sowohl Speicher als auch CPU entlasten. Sie können die APU weiterhin in Kombination mit der Grafikkarte verwenden, sparen jedoch etwas RAM und VRAM ist im Allgemeinen viel schneller.
  • CPUs mit niedrigerer Kernanzahl sind auch speichergebunden. Wenn Sie sich die i7s ansehen, laufen alle mit Quad-Channel-DDR in 4 Bänken. AMDs Epyc-Chips werden 8-Kanal-DDR5 mit 64 Kernen sein. Hilft nicht. Schließlich, und ich kann das nicht genug betonen, werfen Sie das Geld auf so viel RAM, wie Ihr Computer nehmen wird. Ich habe 32 GB und kaufe später in diesem Jahr 32 weitere. Windows verwendet etwas Ähnliches wie Superfetch, das etwas neuer ist und den Arbeitsspeicher im Arbeitsspeicher komprimiert, der nicht verwendet wird, sodass Programme und Daten bei Bedarf einfach entpackt werden können. Als weiteres Beispiel führe ich eine Linux-VM für die Entwicklung aus, habe 6/12 Kerne und 16 GB RAM zugewiesen und nach dem ersten Laden der SSD startet sie in ~ 3 Sekunden. CPU wird heutzutage von solchen Optimierungen als sehr billig angesehen ...

All das scheint zu viel zu sein, bis ich nicht mehr in der Lage bin, ein Projekt mit 70.000 Dateien zu kompilieren oder riesige Camera Raw-Dateien auf 17 "x26" x600 dpi bei 16-Bit-Farben zu skalieren. Selbst bei 100% iger Auslastung sind die Ressourcen so überfordert, dass Sie nicht langsamer werden. Neulich stellte ich fest, dass ich zwei VMs und einen Wolf 2 zusammen mit zwei IDEs geladen hatte (ich bin abgelenkt, verklage mich) und bemerkte keine Verlangsamung. Dies ist eine ~ 1500 $ Maschine BTW, nichts Besonderes, und am langsamsten im Laufe der Jahre gekauft. Die Hälfte davon ist eine der Radeon RX64s, weil meine Grafikkarte 6 Jahre alt war. Riesiger Unterschied in Render und so. Durch ein Upgrade wird Ihre Hardware wahrscheinlich besser genutzt, als wenn Sie davon ausgehen, dass Sie nur 30% nutzen.

Wenn ich eine 5400 U / min-Festplatte in diesen Computer für das Betriebssystem stecken würde, würde das wie totaler Mist ablaufen.

TL; DR, es klingt, als ob Sie gerade CPU-gebunden sind. Geben Sie ein paar Hundert für mindestens eine 256-GB-SSD für das Betriebssystem, 8 GB RAM und eine niedrigere Spielerkarte aus, und der Computer wird Jahre halten. Dieser hat 6 Jahre überlebt, bevor ich endlich einen Prozessor und eine Mobo-Aktualisierung durchgeführt habe und ungefähr 25 Mal am Tag eine komplette Cross-Compiler-Suite mit der alten Ausrüstung kompiliert habe.

Nenn mich übertrieben, aber ich empfehle keine 8 Tesla-Karten oder so. :-) Führen Sie kleinere Upgrades durch, wenn Sie können, und ich denke, Sie werden viele dieser Probleme lösen. Ich habe vor Jahren eine SSD zu einem Q6600-System hinzugefügt und die Leistung verdreifacht.

JimmyShinny
quelle
1

Ohne die Einzelheiten Ihres Programms zu kennen, ist es schwer zu sagen, aber da in einer anderen Antwort die Möglichkeit eines Singlethreads für die Anwendung untersucht wird, werde ich die Anwendung so betrachten, als würde sie ordnungsgemäßes Multithreading verwenden.

Eine häufige Sache, die übersehen wird, sind physische Kerne im Vergleich zu "Hyperthread-Kernen". Hyperthreading zeichnet sich bei vielen kurzen Aufgaben mit anderen Engpässen als der CPU aus. Bei Tasks mit engen CPU-Engpässen sind Sie immer noch durch Ihre physische Kernanzahl begrenzt, die in der Regel die Hälfte Ihrer Hyperthread-Kernanzahl beträgt. Im absolut schlimmsten Fall zeigt Ihr Task-Manager möglicherweise nur eine Auslastung von 50% an, da in seinen Diagrammen Hyperthread-Kerne gezählt werden. In Wirklichkeit sind Ihre physischen Kerne möglicherweise zu 100% ausgelastet. Im Allgemeinen würden Sie jedoch mehr als das anzeigen, da Ihr Betriebssystem das Hyperthreading für andere nicht verwandte Aufgaben verwenden kann.


quelle
Würde "richtiges Multithreading" nicht bedeuten, einen Thread mit Arbeit für jeden logischen Kern anstatt für jeden physischen Kern zu haben? Wenn Sie für jeden logischen Kern eine enge Schleife ausführen, sollte der Task-Manager 100% mit Hyperthreading melden. AFAIK, die "prozentuale Auslastung" im Task-Manager basiert auf der Zeit, die der betreffende Thread im ausführbaren Zustand und auf einem logischen Kern eingeplant war, und nicht unbedingt auf der Zeit, die er beispielsweise tatsächlich auf einer ALU ausgeführt hat . Das Betriebssystem würde wahrscheinlich nicht einmal wissen, dass (nur der CPU-Mikrocode würde.)
Reirab
1
"Normaler" Maschinencode verwendet nur 2 bis 3 der 6 oder mehr Anweisungsports bei modernen CPUs. Ganz zu schweigen von den Pipeline-Verzögerungen, die durch Verzweigungs- und Cache-Fehler verursacht wurden. Hyperthreading hilft, diese Lücken zu schließen. Es ist fast immer ein Gewinn, es zu benutzen. Einige Codetypen, wie Video-Codierung / -Decodierung oder stark optimierte Matrix-Mathematik, eignen sich nicht gut dafür. Aber das ist ungewöhnlich.
Zan Lynx