Präzise Zeitmessung für Benchmark unter Embedded Linux

Gast #1882000
Lesenswert?

Hallo zusammen,

ich möchte ein paar Benchmarks (C sources) auf ein Embedded Linux System 
portieren.

Welche Möglichkeit gibt es zur präzisen Zeitmessung ?

Kann man bei der Funktion clock() aus der time.h Library etwas über die 
Genauigkeit sagen? Gibt es Alternativen?

Wie würdet ihr versuchen Ungenauigkeiten durch das Scheduling des OS zu 
minimieren?

Grüße
#1885041
Lesenswert?

Also ich habe immer sowas gemacht
1
timeval ts;
2
gettimeofday(&ts,0);
Da gehts dann mit ts.tv_usec auf µs runter.
Nach meiner Erfahrung ist es sehr genau.
gettimeofday wird aber glaub ich bald abgeschafft (laut POSIX) und man 
sollte clock_gettime. Ich denke clock() greift auf die gleichen 
Funktionen zurück...
#1885055
Lesenswert?

Guter Artikel dazu in iX 3/2004, Seite 102

clock() misst nicht die abgelaufene Zeit wie auf der Uhr,
sondern die verbrauchte CPU-Zeit eines Prozesses.
Dieser Wert kann deutlich niedriger sein (wenn andere Prozesse
auch zum Zuge kamen) oder deutlich höher (wenn ein Prozess
im Schnitt mehr als einen Kern bzw. eine CPU zugeteilt bekommt).

Die Genauigkeit ist primär durch die Auflösung begrenzt, die
wiederum erfährt man aus dem Makro CLOCKS_PER_SEC auf dem
jeweiligen System.
#1886681
Lesenswert?

Das time() aus der C-Lib?
Das löst nur in Sekunden auf (besser gesagt in time_t, und das ist
auf allen Systemen in Sekunden).

Dieses time() misst abgelaufene Uhrzeit im Gegensatz zu clock().
Unabhängig von der Genauigkeit messen clock() und time() völlig
verschiedene Dinge.
Mit time() kannst du messen, wieviele Tage die Baufirma braucht,
um dein Haus einzureissen. Mit clock() wird festgestellt,
wieviele Mannstunden dafür gebraucht wurden, also je nach
Urlaub, Krankenstand und gleichzeitig Beschäftigte und was
letztlich.

Ebenfalls die Uhrzeit (wie time()) wird vom bereits erwähnten
gettimeofday() geliefert, und zwar genauer als von time().

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren