PDA

View Full Version : Genaue Zeitmessung mit ILE COBOL



Tom74
26-10-07, 08:43
Hallo zusammen,

ich brauche für einen Test für bestimmte Funktionen eines Programms eine Möglichkeit, Zeitdifferenzen zwischen bestimmten Programmschritten zu ermitteln. Hierzu habe ich mich zuerst der Funktion

FUNCTION CURRENT-DATE

bedient, jedoch sehr schnell feststellen müssen, dass die Genauigkeit dieser Funktion zu Wünschen übrig lässt. 0,01 Sek. ist mit meine Zwecke eine viel zu geringe Auflösung die mein Ergebnis erheblich verfälscht.

Gibt es eine andere Möglichkeit der genaueren Zeitmessung ? z.B. durch den Aufruf eines externen Systembefehls von Cobols aus ? Oder gibt es Möglicherweise eine Cobol-Funktion die ich noch nicht kenne ?

Besten dank
Tom

holgerscherer
26-10-07, 08:55
0,01 Sek. ist mit meine Zwecke eine viel zu geringe Auflösung die mein Ergebnis erheblich verfälscht.

Hallo Tom,
ich würde die Idee wieder in die Schublade legen. Da OS/400 kein Echtzeit-Betriebssystem ist, ist eine so genaue Messung selten sinnvoll. Denn das OS kann ja aus einer Laune Deinen Job auslagern, und Dir mal eben 500ms klauen. Garantierte Reaktionszeiten im Millisekunden-Bereich kannst Du Dir auch nicht reservieren.

-h

BenderD
26-10-07, 09:26
Hallo,

embedded SQL bietet mit current_timestamp 10**-6 an Genauigkeit, hat allerdings selber einiges an Overhead, das c-API gettimeofday liefert die gleiche Genauigkeit, mit etwas weniger Überkopf - ich bin aber kein Experte für die Verwendung von C-APIs in COBOL und ohne ILE geht da garnix.

mfg

Dieter Bender


Hallo zusammen,

ich brauche für einen Test für bestimmte Funktionen eines Programms eine Möglichkeit, Zeitdifferenzen zwischen bestimmten Programmschritten zu ermitteln. Hierzu habe ich mich zuerst der Funktion

FUNCTION CURRENT-DATE

bedient, jedoch sehr schnell feststellen müssen, dass die Genauigkeit dieser Funktion zu Wünschen übrig lässt. 0,01 Sek. ist mit meine Zwecke eine viel zu geringe Auflösung die mein Ergebnis erheblich verfälscht.

Gibt es eine andere Möglichkeit der genaueren Zeitmessung ? z.B. durch den Aufruf eines externen Systembefehls von Cobols aus ? Oder gibt es Möglicherweise eine Cobol-Funktion die ich noch nicht kenne ?

Besten dank
Tom

holgerscherer
26-10-07, 09:31
Hallo,

embedded SQL bietet mit current_timestamp 10**-6 an Genauigkeit,

Die Frage ist ja nicht, wie hoch die Genauigkeit einer Angabe ist, sondern auch, was sie mir wirklich nützt. Da kommt es darauf an, was Tom mit seinen Messungen erreichen will.
Eventuell ist ja der Aufruf der API und die Speicherung der Messwerte nachher auch aufwändiger als die Messung der dazwischen enthaltenen Befehle :)

-h

BenderD
26-10-07, 10:33
@Holger: ich fand das für manche Zwecke bisher recht brauchbar und traue jedem erst mal zu sowas fachgerecht einzusetzen - wer nicht will, der braucht halt nicht, was grundsätzlich für alle meine Tipps gilt.


Die Frage ist ja nicht, wie hoch die Genauigkeit einer Angabe ist, sondern auch, was sie mir wirklich nützt. Da kommt es darauf an, was Tom mit seinen Messungen erreichen will.
Eventuell ist ja der Aufruf der API und die Speicherung der Messwerte nachher auch aufwändiger als die Messung der dazwischen enthaltenen Befehle :)

-h

Fuerchau
26-10-07, 10:47
Wenn ein Messintervall kürzer als 0,01 Sekunden ist, muss man einfach das Intervall verlängern.

Ansonsten kann man sicherlich auc C-Funktionen in Cobol einbinden:

call procedure "TIMEOFDAY" using ... returning ...

Es gibt irgendeine Zeitfunktion, die eine Struktur mit 2 Werten liefert:
Zeit in Sekunden set 1.1.1970 (Unix-Funktion) und Micro-Sekunden.