Tool zum exakt messen wie viel Performance ein Programm frisst (Win7)
-
Ich bräuchte ein Tool mit dem man auf Windows 7 möglichst genau messen kann wie viel Performance ein Programm frisst.
Das Tool muss nicht unbedingt Prozess-spezifisch messen, es würde reichen wenn systemweit gemessen wird wie viel Performance gerade benötigt wird. Dann kann ich einfach 1x im Leerlauf messen und dann 1x während das zu messende Programm läuft.
Weiters sollte das Tool einen Chart zeichnen können.
Im Prinzip also genau das was der TaskManager von Windows im "Performance" Tab anzeigt.Nur eben genauer als das was TaskManager anzeigt.
Etwas hintergrund, damit das Was und Warum etwas besser klar wird:
Windows 7 hat ja leider noch einen Kernel mit "Tick". Und ich vermute dass Windows 7 die Erfassung der verbratenen CPU Zeit nur im Scheduler Tick macht. Was natürlich bei Programmen die pro Sekunde zig oder hunderte male zwischen "läuft" und "wartet" wechseln zu total falschen Ergebnissen führen kann -- je nachdem wie diese "läuft"/"wartet" Zyklen mit den Scheduler-Ticks korrelieren. *
Eine Messung auf Windows 8.1 bzw. 10 macht als "Ersatz" auch keinen Sinn, da das Zielsystem Windows 7 ist, und es um einen Effekt des USB Treibers geht. Wenn also auf Windows 8.1 bzw. 10 ganz andere Werte gemessen werden als auf Windows 7, dann könnte das an 100 anderen Sachen wie eben z.B. einer Änderung im USB Treiber Stack liegen. Und damit wäre das Ergebnis wertlos.Was ich messen möchte: Ich habe ein Programm das periodisch mit einem über USB-to-RS232 angeschlossenen Kasterl kommuniziert - so mehrere zig male pro Sekunde.
Unter Windows XP sieht alles schön aus, die CPU Last im Task Manager ist mehr oder weniger "konstant" (=zittert recht "hochfrequent" zwischen 0 und 10% CPU Last herum).Unter Windows 7 habe ich dagegen ganz wilde Spikes in der CPU Auslastung. Alle ~20 Sekunden geht die CPU Last auf ~40% hoch (BTW: die Box hat einen Trinity Dual Core, das wären also ca. 80% eines Cores) und zwar für ca. 7-8 Sekunden. Dabei geht der rote Kernel-Time Graph schön mit dem grünen "gesamt" Graphen mit -- ist also fast alles Kernel Time. Dazwischen ist die CPU Last fast auf 0 (deutlich unter 5%).
Nachdem ich jetzt schon viele viele Dinge probiert habe, und nichts eine echte Besserung bringt, und ich auch einige andere "seltsame" Effekte beobachtet habe, beginne ich zu vermuten dass ich ein Phantom jage. D.h. dass das ganze bloss an der schrottigen gesampleten CPU-Auslastungs-Erfassung von Windows 7 liegt.
Einen einfachen Versuch dazu hab' ich auch schon unternommen, der deutet auch darauf hin dass ich damit richtig liege.Und jetzt würde ich Mittel und Wege suchen diesen Verdacht zu bekräftigen bzw. zu beweisen.
BTW: Im betroffenen System ist "Minimum processor state: 100%" eingestellt. Daran dass Windows die CPU runtertaktet sollte es also auch nicht liegen. (Wobei natürlich noch das BIOS dreinpfuschen könnte - da muss ich erst nachgucken ob und was ich da alles einstellen kann.)
*
Diesen Effekt kenne ich bereits, aber ich habe noch keine harten Fakten dazu gefunden - daher kann ich nicht 100% sicher sein. Was ich z.B. oft beobachtet habe ist dass Programme z.B. oft mit deutlich unter 10% CPU Last angezeigt werden, und wenn man die Berechnungen die die pro Sekunde machen z.B. verdoppelt steigt die angezeigte Auslastung auf einmal auf deutlich über 40% an. Jetzt könnte man sich natürlich Gründe überlegen wieso das in bestimmten Fällen sogar stimmen könnte (z.B. mehr Cache Misses etc. führen zu Skalierung deutlich schlechter als linear). Nur habe ich diesen Effekt schon so oft beobachtet, dass ich so-gut-wie überzeugt davon bin dass es Artefakte der Messung sind, und die Werte die TaskManager anzeigt einfach oft totaler Müll sind.
Falls jmd. einen Artikel dazu kennt, wo z.B. beschrieben wird wie die CPU Zeit Erfassung unter Windows < 8 funktioniert, wäre ich auch dankbar.
-
EDIT:
ARGH. Das hätte wohl besser in Themen rund um die IT gepasst. Sorry.
-
Hab jetzt nicht alles gelesen... Die Leistungsindikatoren kennst du wahrscheinlich?
-
Sind das die Performance Counter?
Ja, kenne ich.
Habs nicht probiert, aber ich vermute mal stark dass alles was von Windows selbst kommt nicht brauchbar ist. Wäre ja reichlich beknackt wenn Windows bessere Werte hätte und trotzdem nur Mist im TaskManager anzeigtps: Hab gerade
http://demandtech.com/wp-content/uploads/2012/04/Measuring-Processor-Utilization-in-Windows.pdf
gefunden.
Laut dem Artikel/Paper ist Resource Monitor unter Windows 7 deutlich genauer als Task Manager. Werd ich heute gleich mal probieren.Und Process Explorer soll auch genauer sein - werde ich ebenfalls probieren.
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum Themen rund um die IT verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Process Explorer
Die Kernel Time ist zwar immer noch genau so unsinnig wie im Task Manager, aber die gesamt CPU Auslastung ist mit Process Explorer flach.
-
hustbaer schrieb:
Process Explorer
Die Kernel Time ist zwar immer noch genau so unsinnig wie im Task Manager, aber die gesamt CPU Auslastung ist mit Process Explorer flach.Und was macht dich sicher dass der das Richtige anzeigt?
-
Die Summe vieler verschiedener Dinge.
* Etliche Artikel die man im Netz so findet, wo beschrieben steht dass der TaskManager auch unter Windows 7 noch den gesampleten Müll anzeigt, obwohl eigentlich bessere Daten verfügbar wären. (Die Auswertung dieser Besseren Daten würde bloss Rechenzeit kosten, und daher macht das der TaskManager nicht, weil er so billig wie möglich sein soll.)
* Der TaskManager zwischen den Spikes zwischen 0 und 2% CPU Auslastung an. Das ist mir immer schon suspekt vorgekommen - ist viel zu wenig. ProcessExplorer malt eine Kurve die so zwischen 9 und 12% schwankt. Was ich für sehr realistisch halte.
* Ich habe mir selbst ein Tool geschrieben das auf allen verfügbaren Cores auf IDLE Prioritä vor sich hin rechnet. Und mitzählt wie viele Berechnungsblöcke es schon geschafft hat. Und dann pro Sekunde guckt wie viele neue Blöcke dazugekommen sind, und damit einen schönen Graph zeichnet. Also einen "wie viel CPU Zeit ist auf IDLE Priority übrig" Graphen. Dieser Graph ist während mein Programm läuft auch wunderbar flach. Sobald ich daneben aber z.B. den Compiler anwerfe bricht der Graph meines Tools wie erwartet ein -- kompletten Unsinn kann ich also nicht programmiert haben
* Die Höhe und Frequenz der Spikes im TaskManager ändert sich mit der Frequenz des Heartbeat Interrupts.
ps: Und sicher bin ich mir eh nicht. Fast sicher.
-
Hallo
Windows 7 hat ja ein kernel mit tick..wie macht es den w8 oder w10? Wie ist der aufgebaut? Hätte dass gerne gewusst. Ein link wäre auch nice. Danke
-
Ticks hat Win 8 auch noch, aber eben dynamische. Tickless Kernels werden teilweise auch "Dynamic Tick"-Kernels genannt.
https://en.wikipedia.org/wiki/Tickless_kernel
Ich weiß ehrlich gesagt nicht, was genau Windows diesbezüglich macht, aber ich glaube nicht, dass es sich stark davon unterscheiden wird, was Linux macht:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/timers/NO_HZ.txt
-
Naja selbst der Wikipedia Artikel nennt es "tickless".
Weil etwas was nicht periodisch daherkommt eben kein "tick" mehr ist.
Womit der Begriff "dynamic tick" mMn. keinen Sinn macht. Ich verstehe was gemeint ist, aber ich bin der Meinung dass dabei der Begriff "tick" misbraucht wird.
-
Ich finde die Bezeichnung "tickless" schon ok. Aber der Hinweis auf den Alternativnamen erleichtert die Erklärung für Uneingeweihte, deren natürlichste erste Frage natürlich immer lautet "Aber was ersetzt denn dann den Tick?". Darauf dann zu antworten "Etwas, was sich ähnlich wie ein Tick verhält, aber kein echter Tick mehr ist." mag fachlich passen, lässt die vermeintliche Umbenennung aber wie Haarspalterei wirken.
-
Was du schreibst macht Sinn