Ablaufsysteme
Ablaufsysteme
Time stamp counter
Für Intel-Pentium-Prozessoren und Nachfolger kann man den Time Stamp Counter auslesen, der alle Taktzyklen nach dem letzten reboot zählt.
Dies kann auch aus einem Anwendungsprogramm gemacht werden. So hat man eine Uhr, die (fast) nichts kostet.
Probleme:
- Portabilität, es ist grundsätzlich problematisch solche Eigenschaften eines Prozessors zu verwenden. Andererseits ist der Prozessor sehr verbreitet und ein Ablaufsystem kann eine API anbieten (z.b.ACE HighResolutionTimer).
- Die Taktrate kann sich ändern. Da die elektrische Leistung proportional zur Taktrate ist, können Prozessoren ihre Taktrate ändern, um Energie zu sparen.
- bei 1Ghz läuft ein 32bit-TSC in wenigen Sekunden über, und ein 64-bit-Register ist nicht atomar auslesbar.
- Bei Mehrkernprozessoren können die TSCs unsynchronisiert sein.
Um zu sehen, ob und wie start die TSCs auseinanderlaufen, wird eine Driftuntersuchung gemacht.
Die Untersuchungsprogramme sind hier: tscana.tgz.
Merkmale:
In Linux kann man unter /proc/cpuinfo unter flags herausfinden, welche Merkmale der TSC hat:
constant_tsc | TSC hat konstante Rate → keine Uhrkorrektur notwendig |
nonstop_tsc | det TSC stoppt nicht in C-Zuständen |
rdtscp | RDTSCP-Instruktion vorhanden (AMD) |
tsc | RDTSC-Instruktion |
tsc_reliable | TSC sei vertrauenswürdig |
tsc_scale | AMD MST-basierte TSC-skalierung, Taktratenkontrolle |
(siehe auch x86cpufeatures)
D.h. Obige Probleme können spezifisch nach verwendeten Prozessor auftreten oder auch nicht, und man kann das Vorhandensein abfragen.
Links
- High resolution timing aus dem IO-Port-Programming HOWTO
- Engl. Wiki über Timestamp-Counter
- Manchmal muss man den TSC-Zugriff mit pctrl(2) freischalten
- Kern Kerntechnik: Richtiger Umgang mit der Zeit
- Arnd Heursch: Zeitdauern messen mit dem TSC Time Stamp Clock Register unter Linux auf x86PCs seit dem Pentium"
- kerrywong
-
Für die rdtsc-Messung laute die Formel so:
runtime_in_s=(t2-t1)/(CPU_TAKT_MHZ*1000)
, wobei man CPU_TAKT_MKZ
mit grep "cpu MHz" /proc/cpuinfo | cut -d':' -f2 | uniq bestimmt
(siehe aber auch die Bemerkungen oben)
- Using the RDTSC Instruction for Performance Monitoring
-
- Counting on the time stamp counter,2006
-
- timestamp.c bei opensolaris
- Implementierung eines highresolution timers für mehrere CPUs
Synchronisierung via timerinterupt, master-CPU zählt hoch, slave-CPU kontrolliert
Dieses ist aber der Mechanismus im Kern mit Koordinierung usw.
der offensichtlich nicht billig ist.
Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber