Seite 1 von 1
CPU load erzeugen
Verfasst: Montag 25. Januar 2010, 00:14
von conloos
Hallo,
ich will den Strom, den mein Rechner aufnimmt messen.
Dabei will ich nicht nur Ruhezustand und Volllast, sondern auch die Stufen dazwischen messen.
Hat jemand eine Idee wie ich das mit Python umsetze?
Ich dachte daran md5 Checksummen berechnen zu lassen, dabei hab ich aber wieder das Problem, dass die CPU 100% läuft.
Des weiteren ist das eine Multicore CPU ... das Script müsste alle CPUs gleichmäßig belasten.
Für Ideen oder Schnippsel wäre ich dankbar.
Con
Verfasst: Montag 25. Januar 2010, 06:28
von nemomuk
Vllt. sowas hier:
und das in mehreren Prozessen starten.
Verfasst: Montag 25. Januar 2010, 13:03
von start_with_python
http://majorgeeks.com/Toast_d867.html
Mit Toast bringst du jede CPU auf 100%. Pro CPU/Kern einmal öffnen.
Verfasst: Montag 25. Januar 2010, 17:01
von jens
der Klassiker ist eigentlich CPUBurn
Verfasst: Mittwoch 27. Januar 2010, 12:10
von conloos
Also, das Problem ist nicht die CPU auf 100% zu bekommen. Dazu hab ich was schickes auf irgend eine Seite gefunden.
Code: Alles auswählen
dd if=/dev/zero bs=100M | gzip | gzip -d | gzip | gzip -d | gzip | gzip -d > /dev/null
Damit werden alle CPUs in einem System schön auf 100% gebracht. BurnCPU wird übrigens nicht mehr weiterentwickelt und belastet nur eine CPU. Man könnte höchstens einen zweiten Prozess starte, hab ich aber nicht ausprobiert.
Mein Problem ist, ich möchte z.B eine CPU auf 40%, 60% und 80% bringen.
@SchneiderWeisse
Leider belastet das, meine CPU überhaupt nicht .... da müsste ich wahrscheinlich 100 Prozesse aufmachen.
Hat noch jemand Ideen?
Verfasst: Mittwoch 27. Januar 2010, 12:15
von jens
conloos hat geschrieben:Mein Problem ist, ich möchte z.B eine CPU auf 40%, 60% und 80% bringen.
Wozu sollte das gut sein???
Spontane Idee: Aus Zufallsdaten einen Hash berechnen lassen (MD5 oder SHA). Erst lässt man es mit time.sleep(0) laufen, um den Maximum Durchsatz zu erhalten. Danach regelt man den sleep Wert solange, um auf den Gewünschten Prozentsatz kommt.
Dennoch bleibt das Problem, das man erstmal nur ein CPU Core auslasten kann.
Verfasst: Mittwoch 27. Januar 2010, 16:05
von Gabelmensch
jens hat geschrieben:conloos hat geschrieben:Mein Problem ist, ich möchte z.B eine CPU auf 40%, 60% und 80% bringen.
Wozu sollte das gut sein???
Steht doch ganz oben, Leistungsaufnahme messen.
http://cpulimit.sourceforge.net/ kann das.
Verfasst: Mittwoch 27. Januar 2010, 16:23
von EyDu
Die Leistungsaufnahme der Strufen zwischen Nichtstun und voller Auslastung kannst du doch einfach berechnen. Wenn der Prozessor nicht zwischen verschiedenen Taktungen springt, dann dürfte die Aufnahme wohl näherungsweise linear sein.
Verfasst: Mittwoch 27. Januar 2010, 22:24
von Panke
EyDu hat geschrieben:. Wenn der Prozessor nicht zwischen verschiedenen Taktungen springt, dann dürfte die Aufnahme wohl näherungsweise linear sein.
Vielleicht will er gerade das messen?!
Verfasst: Mittwoch 27. Januar 2010, 23:02
von nemomuk
sowas hier bringt meine CPU zumindest auf ziemlich konstante CPU-Werte und man kann die Last auch ziemlich genau steuern indem man einfach den Timestep davon prozentual ändert. Musst halt mal etwas rumspielen.
Verfasst: Donnerstag 28. Januar 2010, 08:41
von mkesper
Das Interessanteste ist doch die Leistungsaufnahme während deiner realen Arbeit. Benchmarks bringen da wenig, meiner Meinung nach.
Verfasst: Donnerstag 28. Januar 2010, 09:50
von jens
SchneiderWeisse hat geschrieben:
sowas hier bringt meine CPU zumindest auf ziemlich konstante CPU-Werte
Was die Leistungsaufnahme anbelangt, muss man denke ich mehr machen. Ansonsten wird nur ein recht kleiner Teil der CPU belastet. Einen Hash zu berechnen oder irgendwas zu komprimieren ist da IMHO ein besserer Ansatz.
Verfasst: Donnerstag 28. Januar 2010, 13:42
von conloos
Erstmal, danke für die viele Hilfe,
@jens: Vollkommen richtig, das Problem ist, das diese Berechnungen von der FPU Einheit übernommen werden. Aber wie lastet man die komplette CPU reproduzierbar aus?
@mkesper: Leider ist die reale Arbeit nicht so einfach reproduzierbar. siehe unten ich beschreibe erstmal um was es genau geht.
@Gabelmensch: Hatte ich schon probiert, hatte es damit nicht ohne Probleme hingekommen (sorry ist jetzt Monate her).
Ich habe schreibe an eine Arbeit für meine UNI. Ich hab als Leihgabe 4 Server zu, wo ich die Leistungsaufnahme im Leerlauf ca. 1% und unter Vollast gemessen hab. Ich messe dazu parallel die Temperatur der CPUs mit einer Thermokamera.
Ich erwarte nämlich, das die Leistungsaufnahme nur in den CPUs stattfindet (Serveranwendung ohne GPU support), solange die die Festplatten ausgeklammert werden können.
Deshalb keine reelle Betrachtung unter Office- Anwendungen, sondern Berechnungen, wo die Festplatte raus gehalten wird.
Und da das verschiedene Architekturen sind, muss es 1:1 reproduzierbar sein.
Con
Verfasst: Donnerstag 28. Januar 2010, 13:50
von jens
conloos hat geschrieben:Vollkommen richtig, das Problem ist, das diese Berechnungen von der FPU Einheit übernommen werden. Aber wie lastet man die komplette CPU reproduzierbar aus?
Das ist halt nicht so einfach, weil eine CPU mittlerweile einen ganzen Haufen an "speziellen Sektionen" bereit hält. Wenn man es richtig machen will, muß man IMHO verschiedene CPU Typen auch mit verschiedenen Aufgaben belasten. Das ist wohl auch der Grund, warum es CPUBurn in verschiedenen Varianten gibt.
Verfasst: Freitag 29. Januar 2010, 10:22
von CM
jens hat geschrieben:conloos hat geschrieben:Mein Problem ist, ich möchte z.B eine CPU auf 40%, 60% und 80% bringen.
Wozu sollte das gut sein???
Dennoch möchte ich da einhaken. Mal für Nichtinformatiker: Ich dachte immer ein eine CPU *ist* ausgelastet (100 %) oder *ist nicht* ausgelastet (0%) - und Werte dazwischen zeigen nur ein zeitliches Mittel an. Ist das - zumindest grob - korrekt?
Verfasst: Freitag 29. Januar 2010, 11:12
von jens
Bin da jetzt auch nicht der super Experte. Aber IMHO ist 100% Auslastung != max. Leistungsaufnahme
Also nicht in allen Fällen verballert die CPU den meisten Strom.
Abgefahren wird die ganze Sache dann noch wenn der Takt sich dynamisch ändern kann, wenn Teile Schlafen gelegen werden kann usw.
Verfasst: Mittwoch 10. Februar 2010, 17:17
von philistion
Vielleicht solltest du einen Thread laufen lassen, der irgend eine sehr ausgewogene Arbeit macht (oder auch nur Pi-Nachkommastellen berechnet), dabei aber zwischen den verschiedenen Arbeitsschritten von außen festlegbare Pausen ( z.B. sleep(timetosleep) ) einhält.
In deinem Hauptprogramm betrachtest du dann live die Prozessorauslastung deines Programms und passt den "timetosleep" Wert in einer Art Regelschleife an. So könntest du die Auslastung genau zu deiner gewünschten Prozentzahl hintrimmen. Bei zu viel Auslastung erhöhst du den timetosleep-Wert und bei zu wenig reduzierst du ihn..
Verfasst: Dienstag 9. März 2010, 01:16
von veers
CM hat geschrieben:jens hat geschrieben:conloos hat geschrieben:Mein Problem ist, ich möchte z.B eine CPU auf 40%, 60% und 80% bringen.
Wozu sollte das gut sein???
Dennoch möchte ich da einhaken. Mal für Nichtinformatiker: Ich dachte immer ein eine CPU *ist* ausgelastet (100 %) oder *ist nicht* ausgelastet (0%) - und Werte dazwischen zeigen nur ein zeitliches Mittel an. Ist das - zumindest grob - korrekt?
Je nach Ansicht ist die CPU solange der Computer läuft auch immer ausgelastet. Wenn die CPU nicht ausgelastet ist, arbeitet sie einfach NOPs ab. Die Auslastung der CPU ist somit einfach die Zeit welche nicht vom Leerlaufprozess geschluckt wird. So gesehen ist deine aussage Richtig. In wirklichkeit ist natürlich alles viel komplexer.
http://de.wikipedia.org/wiki/Leerlaufprozess
Edit: Na toll nun habe ich einen ausgegrabenen thread ausgegraben.

Verfasst: Dienstag 9. März 2010, 08:37
von /me
veers hat geschrieben:Edit: Na toll nun habe ich einen ausgegrabenen thread ausgegraben.

Was meinst du wo die zombie-Prozesse herkommen?