Seite 1 von 1

1.9: CPU-Wechsel

Verfasst: Di, 13. Jun 2006 19:03
von Tom
Huhu.

Hat jemand von Euch schon die Funktionen der neuen ASMP10.LIB/.DLL ausprobiert (CPULOAD)? Das Beispiel (TEST.EXE) liefert bei mir auf XP/Prof und mit einem 3-GHz-Pentium-4 (HT) zwar richtigerweise zwei Prozessoren, aber als Workload {0,0}, obwohl ich auf Prozessor 1 eine Xbase-App laufen habe, die den Prozessor voll auslastet. Als Antwort von _MPGetLeastUsed() erhalte ich immer Prozessor 1, ganz egal, was sonst noch so auf dem System läuft, zum Beispiel das Rendering eines Videos. Im Beispiel schaltet sich die CPU auch ordnungsgemäß um, aber meine App friert unmittelbar nach _MPSetCpu(2**(nProcessor-1)) ein (nProcessor ist der numerische Index des Prozessors mit der vermeintlich geringsten Last). Das funktionierte (bis auf die Messung des Workloads) mit den alten Funktionen (_sysSetCPU aus XPPRT1.DLL) ganz wunderbar, aber jetzt scheint der Wurm drin zu sein. Jemand eine Idee? :idea:

Re: 1.9: CPU-Wechsel

Verfasst: Di, 13. Jun 2006 19:30
von AUGE_OHR
hi,
Tom hat geschrieben: Hat jemand von Euch schon die Funktionen der neuen ASMP10.LIB/.DLL ausprobiert (CPULOAD)? Das Beispiel (TEST.EXE) liefert bei mir auf XP/Prof und mit einem 3-GHz-Pentium-4 (HT) zwar richtigerweise zwei
em ... äh ... ASMP10.LIB ... woher kommt die ? (hab ich nicht ?)

gruss by OHR
Jimmy

Verfasst: Di, 13. Jun 2006 19:39
von Tom
Hallo, Jimmy.

Es gab beim Download (der Prof. Subscription, wie ich vermute) eine Datei namens "CPULOAD.ZIP", die enthielt alle nötigen Daten und Dateien. In der 1.8/1.82 standen die Funktionen _sysGetCPU() und _sysSetCPU() zur Verfügung, die man aber aus der XPPRT1.DLL explizit laden mußte. Wenn man _sysSetCPU() iterativ aufrief, konnte man die Anzahl der Prozessoren ermitteln, analog dann auch setzen, während des Programmlaufes. Die neuen Funktionalität sollen ergänzend die Workload der Prozessoren anzeigen und die am wenigsten ausgelastete CPU ermitteln. Tun sie aber irgendwie nicht ... ](*,)

Verfasst: Di, 13. Jun 2006 20:32
von AUGE_OHR
hi,
Tom hat geschrieben: Es gab beim Download (der Prof. Subscription, wie ich vermute) eine Datei namens "CPULOAD.ZIP", die enthielt alle nötigen Daten und Dateien.](*,)
ah, das download hab ich noch gar nicht "ausgepackt"
schon mal mit dem sample :

C:\ALASKA\XPPW32\SOURCE\samples\solution\smp\

ausprobiert ob er "bis 2 zählen" kann ?

gruss by OHR
Jimmy

Verfasst: Di, 13. Jun 2006 20:39
von Tom
Hallo, Jimmy.

Genau diese Systematik habe ich zuvor genutzt. Sie funktioniert auch nach wie vor einwandfrei. Das Problem damit war, daß es keine Möglichkeit gab, die Auslastung des Prozessors zu ermitteln. Wir haben viele Kunden mit Terminal-Servern, die mit mehreren Prozessoren ausgestattet sind. Bisher haben wir über eine Flag die Anzahl der gestarteten Applikationsinstanzen mitgezählt und jeweils auf den Prozessor geladen, der die bisher geringste Anzahl Instanzen zu versorgen hatte. Das Problem damit war, daß zwar zwei Instanzen auf Prozessor 1 laufen konnten und eine auf 2, wodurch die nächste auch auf 2 geladen worden wäre, aber nicht berücksichtigt wurde, daß die zwei Instanzen auf Prozessor 1 möglicherweise überhaupt nichts taten, wohingegen die eine Instanz auf Prozessor 2 vielleicht eine monströse Auswertung fuhr und Vollast erzeugte. Die neuen Möglichkeiten sollten hier Abhilfe schaffen - einschließlich der Möglichkeit, während des Programmlaufs in einem neuen Thread alle dreißig Sekunden (oder so) die Lasten zu ermitteln und die App automatisch zu switchen.

Verfasst: Mi, 14. Jun 2006 8:21
von andreas
Hallo Tom,

ist es nicht einfacher, mit den neuen Methoden die Last abzufragen und mit der alten den Prozessor zu setzen?

Verfasst: Mi, 14. Jun 2006 8:44
von brandelh
Hallo,

was habt Ihr denn für 'Megaauswertungen'. Meine Programme laufen auf 3 Citrix Rechnern konkurierend für etwa 200 Anwender, wobei nicht immer alle angemeldet und gerade mit dem Programm beschäftigt sind.

Dateneingabe erzeugt 0% Last. Nur beim Speichern (keine Sekunde) oder beim Drucken (eigener Thread oder regelmäßiger Aufruf von appevent mit Zeitparameter) sieht man kurz eine Prozessorbelastung steigen, beides ist aber kurz. Der Druckjob geht dann an einen Druckserver und der Citrixrechner ist wieder frei.
Ich bekomme regelmäßig bestätigt, dass meine Programme (Zins-, Renten-, Leistungsberechnung etc.) keine nennenswerte Belastung für das System darstellen. RAM sollte genug da sein. Jedenfalls kein Vergleich zu Word oder Excel.
Ich glaube nicht, dass die mehrere CPUs in den Rechner haben (sind nicht mehr ganz taufrisch).

Verfasst: Mi, 14. Jun 2006 12:29
von Tom
Hallo, Andreas.
ist es nicht einfacher, mit den neuen Methoden die Last abzufragen und mit der alten den Prozessor zu setzen?
Habe ich in Erwägung gezogen, aber das ist ja die Krux: Mir wird immer Prozessor 1 als der am wenigsten ausgelastete angezeigt, und das Lastenarray ist immer {0,0} für beide Prozessoren. :(

@Hubert: Meine Applikation ist wirklich groß. Einzelne Auswertungen und Kalkulationen erzeugen hunderttausende Elemente umfassende multidimensionale Arrays, einige Druckjobs sind extrem intensiv, und einige Datenbankauswertungen und -erstellungen ebenfalls.

Verfasst: Mi, 14. Jun 2006 14:30
von andreas
Hallo Tom,

ich habe die Test.exe aus dem CPULoad auf unserem Terminalserver laufen lassen und habe das gleiche Problem, wie bei dir. Das einzige, was funktioniert, ist die Funktion JumpProcessors()
Habe ich in Erwägung gezogen, aber das ist ja die Krux: Mir wird immer Prozessor 1 als der am wenigsten ausgelastete angezeigt, und das Lastenarray ist immer {0,0} für beide Prozessoren.

Verfasst: Mi, 14. Jun 2006 14:42
von Tom
Hallo, Andreas.

Ich habe ein Beispiel an den Alaska-Support gefunkt. :wink:

Verfasst: Di, 12. Sep 2006 21:44
von Martin Altmann
Huhu *hicks*,
habt ihr mal die Antwort von Steffen in diesem Thread gelesen? Da gibt er interessante Hinweise zum Freigeben aller CPUs mittels des ARC-Files...

Viele Grüße,
Martin

Verfasst: Di, 12. Sep 2006 22:39
von AUGE_OHR
hi,
Martin Altmann hat geschrieben: habt ihr mal die Antwort von Steffen in diesem Thread gelesen? Da gibt er interessante Hinweise zum Freigeben aller CPUs mittels des ARC-Files...
typisch Steffen, ich frage mich bloss warum sowas nicht in den Help-File
steht ...

gruss by OHR
Jimmy