FreeBSD Timecounters

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Dem FreeBSD Kernel stehen mehrere Zeitzähler (Time Counters) als Basis zur Errechnen der Systemzeit zur Verfügung. Beim Starten des Systems wählt FreeBSD automatisch einen bestimmten Zähler. In bestimmten Fällen - wenn Beispielsweise beim Starten des ntpd die Meldung "TIME_ERROR: 0x41: Clock Unsynchronized" erscheint, kann ein alternative Time Counter über ein sysctl gesetzt werden.[1] Dieser Artikel gibt Hintergrundinformationen zu den unterschiedlichen Time Counter.

Zeitinformationen in FreeBSD

Der FreeBSD Kernel verwendet mehrere Arten von zeitbezogenen Geräten:[2]

  • Echtzeituhren (Real time clocks): diese sind dafür verantwortlich, die Zeit in der realen Welt zu verfolgen, meistens wenn das System ausfällt.
  • Zeitzähler (Time counters): sind für die Verfolgung der Zeit verantwortlich, wenn das System läuft.
  • Ereigniszeitgeber (Event timers): sind verantwortlich für die Erzeugung von Unterbrechungen (Interrupts) zu einer bestimmten Zeit oder periodisch, um verschiedene zeitbasierte Ereignisse auszuführen.

Time counters

Heutzutage sind in Personalcomputern der Zeitstempelzähler (Time Stamp Counter, TSC), der ACPI-Zeitgeber (Advanced Configuration and Power Interface, ACPI) und oft auch der High Precision Event Timer (HPET) integriert. Diese Hardware-Zähler werden beim Systemstart auf 0 initialisiert und mit der Periode ihrer jeweiligen Oszillatoren inkrementiert. Da jeder Zähler für die Zeitmessung verwendet werden kann, wählt das Betriebssystem beim Systemstart den Zähler aus, den es für den zuverlässigsten hält, und stellt eine Schnittstelle für den Zugriff darauf bereit. Diese Schnittstelle wird unter FreeBSD Timecounter und unter Linux clocksource genannt und ist kernelintern.[3]

TSC

Der Zeitstempelzähler - Time-Stamp counter TSC - (wie ab der Intel P6-Familie implementiert) ist ein 64-Bit-Zähler, der nach einem RESET des Prozessors auf 0 gesetzt wird. Nach einem RESET erhöht sich der Zähler auch dann, wenn der Prozessor durch den HLT-Befehl oder den externen STPCLK#-Pin angehalten wird.[4][5]

Prozessorfamilien inkrementieren den Zeitstempelzähler unterschiedlich:

  • Für Pentium M-Prozessoren (Family [06], Model [09, 0D]); für Pentium 4-Prozessoren, Intel Xeon-Prozessoren (Family [0F], Modelle [00, 01 oder 02]); und für Prozessoren der P6-Familie: der Zeitstempelzähler erhöht sich mit jedem internen Prozessor-Taktzyklus. Der interne Prozessor-Taktzyklus wird durch das aktuelle Core-clock zu Bus-clock Verhältnis bestimmt. Übergänge in der Intel SpeedStep-Technologie können sich ebenfalls auf den Prozessortakt auswirken.
  • Für Pentium 4-Prozessoren, Intel Xeon-Prozessoren (Family [0F], Model [03] und höher); für Intel Core Solo und Intel Core Duo-Prozessoren (Family [06H], Model [0E]); für die Intel Xeon-Prozessoren der Serie 5100 und Intel Core 2 Duo-Prozessoren (Family [06], Model [0F]); für Intel Core 2 und Intel Xeon-Prozessoren (Family 06], DisplayModel [17]); für Intel Atom-Prozessoren (Family [06], DisplayModel [1C]): der Zeitstempelzähler inkrementiert mit einer konstanten Rate. Diese Rate kann durch das maximale Core-clock zu Bus-clock Verhältnis des Prozessors oder durch die maximal aufgelöste Frequenz, mit der der Prozessor hochgefahren wird, eingestellt werden. Die maximal aufgelöste Frequenz kann von der Basisfrequenz des Prozessors abweichen.
    Die spezifische Prozessorkonfiguration bestimmt das Verhalten. Konstantes TSC-Verhalten stellt sicher, dass die Dauer jedes Taktticks einheitlich ist, und unterstützt die Verwendung des TSC als Wanduhr-Timer, selbst wenn der Prozessorkern die Frequenz ändert.

i8254

Hierbei handelt es sich um den Time counter der Hardware-Uhr des Rechners (Real-Time Clock, RTC).

ACPI-safe

Ein Time counter, welcher auf ACPI basiert.

Beispiel: LES compact 4L

Die folgenden Ausgaben stammen von einem LES compact 4L (als Beispiel):

root@fw-home:~ # dmesg | grep Timecounter
Timecounter "TSC" frequency 1600052360 Hz quality 1000
Timecounter "i8254" frequency 1193182 Hz quality 0
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
Timecounters tick every 1.000 msec
TSC i8254 ACPI-safe
Takfrequenz CPU Takfrequenz

(1,6 GHz in diesem Beispiel)

1,19 MHz 3,57 MHz
Quality (in diesem Beispiel) 1000 0 850
root@fw-home:~ # sysctl kern.timecounter
kern.timecounter.tsc_shift: 1
kern.timecounter.smp_tsc_adjust: 0
kern.timecounter.smp_tsc: 1
kern.timecounter.invariant_tsc: 1
kern.timecounter.fast_gettime: 1
kern.timecounter.tick: 1
kern.timecounter.choice: ACPI-safe(850) i8254(0) TSC(1000) dummy(-1000000)
kern.timecounter.hardware: TSC
kern.timecounter.alloweddeviation: 5
kern.timecounter.timehands_count: 2
kern.timecounter.stepwarnings: 0
kern.timecounter.tc.ACPI-safe.quality: 850
kern.timecounter.tc.ACPI-safe.frequency: 3579545
kern.timecounter.tc.ACPI-safe.counter: 3332884
kern.timecounter.tc.ACPI-safe.mask: 16777215
kern.timecounter.tc.i8254.quality: 0
kern.timecounter.tc.i8254.frequency: 1193182
kern.timecounter.tc.i8254.counter: 41774
kern.timecounter.tc.i8254.mask: 65535
kern.timecounter.tc.TSC.quality: 1000
kern.timecounter.tc.TSC.frequency: 1600052360
kern.timecounter.tc.TSC.counter: 2006715792
kern.timecounter.tc.TSC.mask: 4294967295

Weitere Informationen

Einzelnachweise

  1. Why does the clock on my computer keep incorrect time? (www.freebsd.org/doc/faq)
  2. TIMECOUNTERS(4) Manpage (www.freebsd.org)
  3. Counter Availability and Characteristics for Feed-forward Based Synchronization (ISPCS 2009 International IEEE Symposium on Precision Clock, Synchronization for Measurement, Control and Communication, Brescia, Italy, October 12-16, 2009)
  4. Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A, Chapter 17.17 TIME-STAMP COUNTER (software.intel.com)
  5. Time Stamp Counter (en.wikipedia.org)


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

Broadcom BCM574xx VLAN Treiberproblem unter FreeBSD 13.2 mit bnxt Treiber
SSL routines tls process server certificate certificate verify failed - Authentication error
Timecounter HPET frequency 19200000 Hz quality 950