PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Systemzeit & Uptime aus TimeStampCounter



7.e.Q
08-12-2005, 10:07
Hallo,

ich hab hier eine Funktion geschrieben, die mir aus dem TSC (TimeStampCounter der CPU, wird bei jedem Zyklus um 1 erhöht, abzufragen mit Direktive rdtsc) die Uptime des Systems berechnet. Mit dieser Funktion kann ich auch die aktuelle Systemzeit berechnen, indem ich mir bei dem ersten Aufruf den aktuellen Timestamp aus gettimeofday merke und diesen Wert bei jedem Aufruf auf die aktuelle Uptime draufrechne. Funktioniert gut soweit... nur laufen die Werte auseinander. Also der Timestamp, den ich berechne und der Timestamp, den mir gettimeofday zurückliefert (berechnet aus der timeval struct).

Das Delta zwischen den beiden Werten wird immer größer. Wie kann das sein?

Tick der Systemuhr ist Standard 10.000, Frequency ist 0.000 (s. adjtimex).


Helf wer kann! Danke

Gruß,
Hendrik

Joghurt
08-12-2005, 15:54
Wenn ich mich nicht irre, hat die Systemuhr einen eigenen Quarz, und der ist meistens auch nicht von guter Qualität. Jemand sprach mal von einem "eingeschweißtem Sandkorn". Das dürfte bei dem Taktgeber der CPU auch nicht anders sein, aber aufgrund der höheren Frequenz dürften sich die Fehler dort nicht so gravierend sein.

Ich würde im Zweifelsfall die TSC-Zeit nehmen.

RHBaum
09-12-2005, 14:40
Glaub grad annersrum ^^

Deine Bios uhr sollt nach einem jahr keine 3h falsch gehen ^^

wenn dein FSB Takt spinnt, intressiert das normal niemand :-)
Unser quarz hier fuer den Taktgeber aufn mainbord fuern FSB hat ne genauigkeit von 0,5% .... und schwankt in dem bereich abhaengig von der temperatur auch.

Also wenn ich mit queryperformancecounter die sache laufen lasse, und mit der anderen bios urh vergleiche kommen hier schon paar unnerschiede zusammen.

im Jahr = 365 * 5 / 1000 = 1,825 tage (extremfall)

den counter vom rtc kannst / sollst nehmen, um kurze messungen zu machen, und vorgaenge aufn eigenen PC zu vergleichen (performance messungen) die sache iss zwar "recht" ungenau, hat aber dafuer ne recht kleine aufloesung (man kann ms messen).

Brauchst du die werte im vergleich zu ner anderen uhr, nich so hoch aufloesend, aber viel genauer .... dann hol dir ne referenzzeit (bios uhr, atom uhr signal, NTP server) und korreliere die sache :-)
Bekommst du timestamps von unterschiedlichen quellen, musst du eh korrelieren . Du ahnst gar nich, was die HW (MessTechnik) manchmal so unnerschieben will :-)
Du misst die gleichen signale, nur mit unterschiedlicher Hardware, die werte passen nich, du suchst stundenlang die fehler, entwickelst vergleichsmessungen als programm nur um nachzuweisen das die zeitstempel der Hardware um 30µs pro Sekunde !!! auseinanderdriften ^^
So ist das leben in der welt der Messtechnik , ohne Vergleichsuhr geht da gar nix ^^

Ciao ...

7.e.Q
09-12-2005, 15:02
Ja, so ist das. Leider ist es in unserer Hardware nicht anders machbar. Innerhalb eines Baugruppenrahmens vielleicht über ein Referenzsignal auf dem VME-Bus, aber Einheitenübergreifend leider nicht, da die einzige Verbindung zwischen den Einheiten absolut variabel ist, was ja der große Vorteil unseres Systems ist. Wir können damit Last- und Ausfallmessungen zwischen verschiedensten Standorten machen. Leider auf kosten solcher Features, bzw. mit erhöhtem Entwicklunsaufwand zur Synchronisierung selbiger.