Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "Programm-Bremse" gesucht (https://www.delphipraxis.net/151509-programm-bremse-gesucht.html)

taaktaak 20. Mai 2010 15:14


"Programm-Bremse" gesucht
 
Moin, Moin.

Eigentlich bin ich nicht der Meinung, dass mein PC überdurchschnittlich schnell ist - aber manchmal wünsche ich mir, die Geschwindigkeit doch stufenweise reduzieren zu können um Schwachstellen im Source besser entdecken können.

Gibt es hierfür Tools, die empfehlenswert sind?

s.h.a.r.k 20. Mai 2010 15:17

Re: "Bremse" für PC gesucht
 
Darf man fragen, was die Reduzierung der Geschwindigkeit bringen soll? :gruebel: Denn davon wären dann auch alle anderen Programme betroffen. Ist sowas erwünscht?

Besser wäre es wohl die Software, auf einem älteren Rechner zu testen, die die älteren CPUs auch manche Features nicht haben. Ebenso sind damals die HDDs langsamer gewesen, konnten kein NCQ, der RAM war ein SD-/DDR(2)-Ram etc.

Ich weiß leider nicht, ob man evtl. sowas vielleicht über VirtualBox oder vergleichbare Virtualisierer einrichten kann.

taaktaak 20. Mai 2010 15:23

Re: "Bremse" für PC gesucht
 
Nun, ich habe bei der Vorbereitung von rzDelphhiGuide für die Windows-Themes in einer VM (und da läuft ja alles schon spürbar langsamer) so einige Schwachstellen im Bildaufbau feststellen und beseitigen können. Abgesehen vom grundsätzlichen Lerneffekt für mich, ist der primäre Wunsch, dass diese Auswirkungen schlechter Programmierung nicht bei einem Anwender, sondern schon in meinen eigenen Tests entdeckt werden.

edit: Nun kommt mir ein Gedanke: Könnte man nicht zu Testzwecken innerhalb des Programmes optional eine besonders arbeitsintensive Aufgabe (in einem Thread?) ablaufen lassen? Das würde dann nur das zu testende Programm selbst verlangsamen!

s.h.a.r.k 20. Mai 2010 15:26

Re: "Bremse" für PC gesucht
 
Würde dir daher wohl einen älteren Rechner anraten, da du neuere Hardware zwar bremsen kannst, aber wohl nicht die Ausführung einzelner Befehle. Kannst dir ja ein Netbook mit einem Atom-Rechner holen und via Remote-Desktop darauf zugreifen, aber selbst das Ding hat schon einiges an Leistung. Andere Idee wäre ein alter Thinkpad T40 oder so. Kostet 150€ und hat einen Centrino drin mit 1,5GHz (oder auch ein wenig mehr). Das sehe ich im Moment wohl als untere Grenze der genutzten Hardware an.

Aber um eine konkrete Antwort auf deine Frage zu liefern: so eine Software kenne ich leider nicht :mrgreen:

rapante 20. Mai 2010 15:29

Re: "Bremse" für PC gesucht
 
Hallo,

also mit CPU Speed Adjuster (oder so ähnlich) lässt sich der CPU-Takt drosseln.

OldGrumpy 20. Mai 2010 15:30

Re: "Bremse" für PC gesucht
 
Alte Hardware hätte ich noch reichlich im Sortiment bis runter zum 386SX :mrgreen:

taaktaak 20. Mai 2010 15:30

Re: "Bremse" für PC gesucht
 
Ok, einen langsamen Rechner zu Testzwecken nutzen ist natürlich möglich. Ich hätte es gern bequem und praktisch per Knopfdruck...

Wird so etwas also in der professionellen Programmentwicklung nicht genutzt?

edit: Joo, alte Platinen hängen bei mir einige an der Wand :mrgreen:

himitsu 20. Mai 2010 15:33

Re: "Bremse" für PC gesucht
 
Im Notfall (also was die CPU-Leistung angeht), könntest du die Prozess-/Thread-Prioritäten herabsetzen und paralell einen mit einem anderem Prozess (Programm) eine höhe CPU-Last erzeugen, das sollte dann schon bremsend wirken.

Aber ein alter gebrauchter PC sollte diesbezüglich wohl einfacher zu realisieren sein, vorallem da eine derartige Auslastung nicht representativ sein muß.

[edit]
da schreibt man mal etwas zu langsam und schon sind massig neue Beiträge da :shock:

Meflin 20. Mai 2010 15:34

Re: "Bremse" für PC gesucht
 
Angebrachter wäre da wohl, einen Profiler zu verwenden. Klingt zumindest für mich so. Da ist es ganz egal, wie schnell dein Rechner ist, du findest trotzdem heraus, was die meiste Zeit in deinem Programm beansprucht ;)

Der König der Profiler ist hier wohl AutomatedQA AQTime, ist aber auch unbezahlbar. Aber das könnteste du dir mal angucken: http://delphitools.info/samplingprofiler/

rollstuhlfahrer 20. Mai 2010 15:39

Re: "Bremse" für PC gesucht
 
Folgende Lösung hätte ich noch: Sag deinem Programm, dass es nur 1 CPU verwenden darf und lasse einen Thread in dem Programm möglichst viel Schwachsinn Produzieren, also Speicher allokieren, vollschreiben mit Zufallswerten, den Speicher leeren und wieder freigeben. Damit bremst du gleichzeitig in einer VM den virtuellen RAM aus.
So ganz per Knopfdruck geht das nicht. Du könntest aber im BIOS die CPU untertakten, wenn das geht. Mit dem Problem des Garantieverlustes würde ich dann nicht rechnen, weil du ja a) weniger Wärme erzeugst, weil weniger Rechenleistung da ist und b) die CPU ja nicht übertaktet wird. Das Ganze ist dann allerdings mit einem Neustart verbunden und auch nur mit einem weiteren Neustart wieder rückgängig zu machen. Wenn du dann die CPU untertaktest, läuft übrigens auch das OS langsamer -> Der Test wird weit zeitaufwändiger. Ich würde einfach nur die CPU auslasten, wenn keine alternative Hardware zur Verfügung steht.

Du kannst auch mal schauen, was passiert, wenn du deiner VM den RAM entziehst, also soweit, dass Windows laufend auf die HDD auslagern muss. Dann hast du einen permanent langsamen Arbeitsspeicher.

Bernhard

Edit: Eine niedrige Prozesspriorität finde ich auch passend.

taaktaak 20. Mai 2010 15:39

Re: "Bremse" für PC gesucht
 
Hallo himitsu,
auf einen Beitrag von dir hatte ich gehofft. Nach dem Hinweis von s.h.a.r.k wäre es eigentlich besser, wenn man den Rechner (und damit alle übrigen Programme) nicht insgesamt ausbremst, sondern nur das eigene, zu testende Programm. Ist das nicht auch irgendwie möglich? Also mit einem als Bremse wirkenden "Nutzlos-Thread" innerhalb des Programms; diesen schaltet man dann je nach Bedarf ein/ab - oder ist das jetzt Unsinn??

//edit: Joo, Profiler, auch 'ne Idee.

// edit2:
...und lasse einen Thread in dem Programm möglichst viel Schwachsinn Produzieren...
JAAA, das ist meine Idee!! Wenn vielleicht jemand Lust hätte, so etwas - nur so zum Spass - zu coden.....
:love:

//edit3:
Da eigentlich nur das Programm selbst gebremst werden soll, werde ich den Titel mal ändern.

rapante 20. Mai 2010 16:11

Re: "Programm-Bremse" gesucht
 
Du könntest dir auch mal Bochs anschauen - damit
lassen sich die verschiedensten Systeme emulieren.

Namenloser 20. Mai 2010 17:12

Re: "Programm-Bremse" gesucht
 
Ich frage mich gerade, ob man so eine Programmbremse nicht über die Debugger-Schnittstelle programmieren könnte. Im Debugger ist es ja möglich, Breakpoints zu setzen, bzw. Code Stück für Stück auszuführen. Wenn man das automatisiert, also quasi automatisch den Code Zeile für Zeile ausführt, sollte man auf diese Weise das Programm auch ausbremsen können. Eventuell ist die Bremse allerdings zu stark, dann müsste man sich etwas einfallen lassen (z.B. größere Breakpoint-Abstände).

Der.Kaktus 20. Mai 2010 17:22

Re: "Programm-Bremse" gesucht
 
hi taaktaak,

da gabs mal was..."alte Spiele" zum runter takten..kleines Tool..erinner mich da an "Digger"..kaum ne Taste angefasst...verloren...wenns mir wieder einfaellt, gebe ich Bescheid (dat waren Zeiten *schwaerm*).

Medium 20. Mai 2010 17:33

Re: "Programm-Bremse" gesucht
 
Ich vermute, der Kaktus redet von DOSBox, was ein vollwertiger DOS Emu ist, und bei dem die Geschwindigkeit einfach anpassbar ist. Zum Win32 Anwendungen testen wäre das leider nicht brauchbar.

Der.Kaktus 20. Mai 2010 17:35

Re: "Programm-Bremse" gesucht
 
Zitat:

Zitat von Medium
Ich vermute, der Kaktus redet von DOSBox, was ein vollwertiger DOS Emu ist, und bei dem die Geschwindigkeit einfach anpassbar ist. Zum Win32 Anwendungen testen wäre das leider nicht brauchbar.

nee nee :-D ...hab was gefunden --> CPU-Speed-Adjuster

taaktaak 20. Mai 2010 18:02

Re: "Programm-Bremse" gesucht
 
Joo, habe die CPU-Bremse mal mit der Delphi-Sort-Thread-Demo ausprobiert: Keine Einstellung dieses Tools verändert (d.h. verlangsamt) die Ausführungsgeschwindigkeit dieses Demo-Programms in erkennbarer Weise.

Derzeit ist der "Nutzlos-Thread" mein gedanklicher Favorit...

DeddyH 20. Mai 2010 19:10

Re: "Programm-Bremse" gesucht
 
[OT]
Zitat:

Zitat von taaktaak
Derzeit ist der "Nutzlos-Thread" mein gedanklicher Favorit...

Damit würdest Du Dich auch gut an das Forum anpassen, hier gibt es auch reichlich davon :mrgreen: (SCNR^^)[/OT]

s.h.a.r.k 20. Mai 2010 19:52

Re: "Programm-Bremse" gesucht
 
Was soll denn so ein Thread bitte bringen? Ebenso planlos den Speicher zumüllen? Überlegt doch mal was bei "elementaren" Befehlen passiert? Die CPU führt diese ziemlich schnell aus, egal was nebenher passiert. Man hat heutzutage doch eh mind. einen Dual-Core, ergo ist das mit dem Thread eher planlos. Und da immer irgendwie was zu produzieren bringt wohl auch nichts, da der Zugriff auf RAM der zu 50% voll ist wohl genauso schnell ist, wie einer der nur zu 20% voll ist.

Zudem macht die Hardware die Geschwindigkeit beim Ausführen der Befehle aus und nicht. Wie willst du denn via Software Features einer CPU ausschalten, sodass man für nur ein Stück Software eine alte CPU vorgaukelt. Oder wie will man aus DDR2/3-RAM denn bitte SD-RAM machen?

Medium 20. Mai 2010 20:36

Re: "Programm-Bremse" gesucht
 
Wenn ich das richtig verstanden habe s.h.a.r.k, geht es doch nicht um Kompatibilitätstests mit alter Hardware, sondern einfach darum das Programm beim debuggen auszubremsen, um Effekte sichtbar zu machen, die sonst einfach nur zu schnell wieder vom Auge verschwunden sind. Ich muss zwar zugeben diesen Wunsch bislang nie verspürt zu haben, aber vorstellen kann ich's mir schon :)

Dieser Slugger-Thread ist dennoch so eine Sache, eben N-Core vor allem, und überhaupt hat man damit schon arg wenig Kontrolle über das was das OS draus macht. Ich würde evtl. eher dazu übergehen zu entsprechenden Schlüsselpunkten programmgesteuert Screenshots zu speichern (das kostet sogar auch Zeit! ;) ). Also quasi ein visuelles Debug-Log.

rollstuhlfahrer 20. Mai 2010 20:44

Re: "Programm-Bremse" gesucht
 
Ich glaube, ich muss nochmal erwähnen, dass bei dem Verlangsam-Thread der Prozess nur 1 einzige CPU verwenden darf (Stichwort: SetProcessAffinity() ). Ansonsten kann es wunderbar passieren, dass auf der einen CPU der Langsammacher läuft und auf der anderen das eigentliche Programm. So etwas sollte nicht passieren. Und es geht hier nicht unbedingt drum, verschiedene Operationen langsamer auszuführen, sondern einfach nur die Anzahl an Ausgeführten Operationen pro Zeiteinheit zu verringern. Da Windows immer die volle Last verwendet, wenn diese gebraucht wird, muss man Windows einfach sagen, dass der Rest schon durch was anderes belegt ist, und zwar hier der Langsammachthread. Das mit dem RAM-Zugriff ist nicht, um das RAM zu füllen, sondern um die RAM-Übertragungsgeschwindigkeit zu beeinflussen. Hier geht es ja auch um Bits pro Zeiteinheit. Es sollen nicht mehr Bits pro Zeiteinheit drüber, sondern weniger. Dazu muss man nicht unbedingt das RAM langsamer machen, sondern nur die Restkapazitäten voll ausreizen und dann wird der RAM-Zugriff tatsächlich langsamer, weil schon genug Müll drauf und wieder runter geht.

Wie ist denn die Idee, den virtuellen RAM so knapp zu machen, dass Windows generell auf die Festplatte auslagern muss?

Bernhard

PS: Das mit den zeitgesteuerten Screenshots finde ich nicht gut, weil zuerst fertig gezeichnet wird und erst dann der Screenshot aufgenommen wird. Es geht ja darum, Probleme während des Zeichnens zu finden und nicht danach.

s.h.a.r.k 20. Mai 2010 23:24

Re: "Programm-Bremse" gesucht
 
Zitat:

Zitat von Medium
Wenn ich das richtig verstanden habe s.h.a.r.k, geht es doch nicht um Kompatibilitätstests mit alter Hardware, sondern einfach darum das Programm beim debuggen auszubremsen, um Effekte sichtbar zu machen, die sonst einfach nur zu schnell wieder vom Auge verschwunden sind. Ich muss zwar zugeben diesen Wunsch bislang nie verspürt zu haben, aber vorstellen kann ich's mir schon :)

Naja, was ich halt sagen will ist (was sich scheinbar noch nicht ganz herauskristalisiert hat :mrgreen: ), dass es an sich unmöglich ist diverse Hardware-Features einfach "abzuschalten" und die CPU in den gewünschten "Mach-mal-langsam-Modus" zu setzen. Selbst durch Auslastung aller Cores wird das wahrscheinlich nicht funktionieren, da jedes OS wohl ein Load-Balancing eingebaut hat. Zumal ich echt jedem i7-Besitzer viel Spass wünsche *alle* seine Cores komplett auszulasten. Große Server mit vielen gleichzeitigen Zugriffen kommen da evetl. an ihre Grenzen.

Bandbreite zwischen RAM und CPU ist auch meist en masse vorhanden, ebenso zwischen HDD und CPU (zu diesem Punkt noch was weiter unten). Diese ganzen Punkte sind einfach Hardware-bedingt vorhanden. Und sowas effizient per Stück Software wie gewünscht ausblenden oder sonst was damit machen, halte ich für echt nicht sinnvoll(!) machbar.

Zitat:

Zitat von Medium
Dieser Slugger-Thread ist dennoch so eine Sache, eben N-Core vor allem, und überhaupt hat man damit schon arg wenig Kontrolle über das was das OS draus macht. Ich würde evtl. eher dazu übergehen zu entsprechenden Schlüsselpunkten programmgesteuert Screenshots zu speichern (das kostet sogar auch Zeit! ;) ). Also quasi ein visuelles Debug-Log.

Das mit dem Thread ist totaler Quatsch, da das OS damit macht, was es will -- soll es ja auch können, daher ist das OS ja da! Man kann scheinbar einen Thread auf eine CPU festnageln, aber ob das wirklich was bringt? Die Idee mit dem Screenshot ist auch so eine Sache. Wie viele Screenshots willst denn erstellen? Wann genau? Erwischst du genau die Stelle, an der es u. U. ein Problem gibt? Ist das dann evtl. auch noch reproduzierbar/korrigierbar?

Zitat:

Wie ist denn die Idee, den virtuellen RAM so knapp zu machen, dass Windows generell auf die Festplatte auslagern muss?
Und zu diesem Punkt: Windows lagert wohl intelligent aus und nicht einfach total planlos, ergo wirst du den Effekt eher weniger nutzen können, um die Verarbeitung enorm zu verlangsamen oder so Effekte feststellen zu können, die man sonst nur auf langsamen Rechnern hat.

Ich lasse mich echt gerne vom Gegenteil überzeugen, aber die Entwickler der heutigen Software und Hardware werden sich wohl Gedanken gemacht haben, sodass mehrere Programme nebenher einigermaßen gleich schnell laufen. Und je neuer die Hardware, desto schneller sollte es (in den meisten) Fällen sein, auch wenn man da Threads und was weiß ich noch alles einbaut...

Medium 21. Mai 2010 00:55

Re: "Programm-Bremse" gesucht
 
Zitat:

Zitat von rollstuhlfahrer
PS: Das mit den zeitgesteuerten Screenshots finde ich nicht gut, weil zuerst fertig gezeichnet wird und erst dann der Screenshot aufgenommen wird. Es geht ja darum, Probleme während des Zeichnens zu finden und nicht danach.

Es geht doch hier um eigenen Code oder? Wo ist dann das Problem, an Verdachtsstellen den betreffenden DC einfach fix in ein Bitmap zu schippern? Das kann ich, im Extremfall, nach jeder Zeichenoperation tun, oder aber an wichtigen/interessanten Stellen. Wenn während einer (von Windows aus gesehen) elementaren Zeichenoperation etwas schief läuft, ist ohnehin böse was im Argen, zumal diese ja wirklich sehr elementar sind. Das komplexeste ist da fast noch der Floodfill...

Und falls es hier beim TE um potenziell sichtbare "Glitches" während des Zeichnens geht, aber nach getaner Arbeit alles gut ausschaut: Hier im Forum suchenOffscreen Bitmap! (Sollte bei komplexerem aus mehreren Operationen zusammengezeichnetem ohnehin immer gemacht werden.)

taaktaak 21. Mai 2010 10:43

Re: "Programm-Bremse" gesucht
 
Moin, Moin.
Ich möchte mich bei allen Beteiligten für die interessanten Beträge bedanken. So wie Weltreiche entstehen und wieder vergehen, hat sich nun auch der Gedanke des "Nutzlos-Threads" in Luft aufgelöst. Ich werde nun, wie mehrfach vorgetragen, einfach mein altes Notebook für derartige Tests verwenden :-D

himitsu 21. Mai 2010 11:19

Re: "Programm-Bremse" gesucht
 
Es kommt ja immer darauf an, was du genau testen willst.

Einiges kann man ja auch innerhalb der Anwendung, über ein paar Sleep oder kleine Schleifchen, ausbremsen.
Also wenn es nur um ein paar bestimmte Stellen geht.

Oder wenn man wissen will, wo in einem bestimmten Code die meißte Zeit verloren geht, dann erstelt man sich halt ein Zeitprofil (Zeiten zu messen sollte nicht das Problem sein)

Dreamer69 21. Jun 2012 00:31

AW: "Programm-Bremse" gesucht
 
Auch wenn der Thread nun über 2 Jahre alt ist möchte ich etwas dazu beitragen.
Bei der Gelegenheit möchte ich mich bei allen hier bedanken.
Ich konnte hier sehr viele nützliche Tipps finden.


Ich hatte auch das Problem ein Programm ausbremsen zu müssen (Videoencoder), da, insbesondere in den Sommermonaten, mein PC beim stundenlangen encoden viel zu heiß wurde.
Abgesehen davon wurden andere Programme ausgebremst.

Ich nutze BES – Battle Encoder Shirase und es funktioniert einwandfrei.
http://mion.faireal.net/BES/

Vielleicht hilft es ja dem einen oder anderen.

lbccaleb 21. Jun 2012 07:02

AW: "Programm-Bremse" gesucht
 
Nicht getestet, weil ich von sowas eigentlich nicht so viel halte -.-

http://www.pcwelt.de/downloads/Cpuki...4-1301401.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz