Computer hardware timers
✎ This article/section is a stub — some half-sorted notes, not necessarily checked, not necessarily correct. Feel free to ignore, or tell me about it.
Hardware perspective
The system's Real-Time clock (RTC)
- IO based, therefore fairly expensive setup (not practical for some purposes)
- Rate/resolution: depends on hardware. Approximately 30ms on a 32kHz crystal, and assume no better than 1 millisecond in the best case.(verify)
8254 PIT (Programmable Interval Timer)
- Resolution/rate: configurable, 1 millisecond (at best) (verify)
- Controls resolution of system timer (verify)
APIC timer
- Resolution: Varies (microsecond scale?(verify))
- Pauses under some conditions, so not directly useful for time-telling
ACPI Power Management Timer (PM, PMT)
- Accurate (if hardware not buggy)
Time Stamp Counter: ticks since reset
- rate/resolution depends on system (nanosecond scale?(verify))
- handy high-resolution counter on i386 processors since the Pentium (there are similar features on other architectures)
- ...but may be out of sync between cores on various processors - except those with constant-rate TSC (reported by the CPU)
- ...may vary with CPU voltage/frequency control, so not ideal for timekeeping
- readout with RDTSC opcode
- http://en.wikipedia.org/wiki/RDTSC
HPET
- Very precise (Rate/resolution varies. Example: ~70ns on 14MHz)
- Multiple independent timers (depends on hardware, at most 32?)
- Meant for short-term waiting
- http://en.wikipedia.org/wiki/High_Precision_Event_Timer
Programming perspective
gettimeofday()
- resolution depends on hardware as well as operating system. May be as precise as a few microseconds, and as rough as perhaps 10 milliseconds. (verify)
- Often depends on PIT rate? (verify)
clock_gettime() / clock_gettime()
- Resolution/rate: Varies, but better than gettimeofday (based on TSC)