Ticks Pro Sekunde

Ticks Pro Sekunde, System Clock? CPU? BS?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Ticks Pro Sekunde
Hallo, ich hätte da mal eine Frage die ich für meine BA gewusst haben wollte :slight_smile:
Undzwar geht es darum:
Die Zeit wird durch einen Betriebssysteminternen Zähler gemessen. Dieser Zähler zählt die Ticks pro Sekunde und entspricht nicht dem System Clock der CPU.
Meine Frage wäre nun: Woher diese Auflösung kommt. Also es ist vom BS bestimmt, aber woran richtet sich das BS?

Würde mich freuen wenn mir jemand diese Frage beantworten könnte
Gruß


Solche Zaehler sind in der Regel in Hardware implementiert. Die Aufloesung haengt davon ab was diese Hardware leisten kann und wie sie konfiguriert ist.


Also es geht um die Zeitmessung in C#, dazu verwende ich die Klasse Stopwatch (http://msdn.microsoft.com/de-de/library/system.diagnostics.stopwatch(v=vs.110).aspx)

Hier kann man lesen, dass eigentlich die Ticks gezählt werden und daraus die verstrichene Zeit bestimmt werden kann. Es gibt außerdem eine Auflösung die Fest ist. (Stopwatch.Frequency)
Diese Auflösung ist bei jedem System anders. Und ich habe herausgefunden, dass diese Zähler eben nicht dem System-Clock der CPU entspricht. Aber eventuell abgeleitete ist?
Diese Auflösung wäre meine Frage, woher die genau kommt.

“Der Frequency-Wert hängt von der Auflösung des zugrunde liegenden Zeitgebermechanismus ab. Wenn die installierte Hardware und das Betriebssystem einen hochauflösenden Leistungsindikator unterstützen, spiegelt sich im Frequency-Wert die Frequenz dieses Indikators wider. Andernfalls basiert der Frequency-Wert auf der Frequenz des Systemzeitgebers.” http://msdn.microsoft.com/de-de/library/system.diagnostics.stopwatch.frequency(v=vs.110).aspx

Danke schon mal.


Also bei einem Linux ist das die Groesse der Zeitscheiben (genannt “jiffies”), die der Scheduler verwendet, d.h. die Zeit, auf die der Timer-Interrupt des Systems gestellt ist der den Scheduler periodisch aufruft. Heutiges Linux hat aber oft kein Zeitscheiben-basiertes Scheduling in dem Sinne mehr, d.h. der Scheduler wird nicht unbedingt periodisch aufgerufen sondern “wenns noetig ist”. Die Zeitscheibenzaehlung wird also durch Uhrablesen ersetzt. Ueblicherweise hat jeder CPU-Kern bei modernen Systemen dafuer eine lokale Uhr. Jetzt kommts dann sehr drauf an: sehr viele Systeme haben pro Sockel einen HPET (high precision electronic timer), und evtl pro Kern nochmal eine etwas ungenauere Uhr. Je nachdem was davon die wirre deutsche Microsoft-Uebersetzung jetzt meint und was dann wirklich verwendet wird kann eine dieser Uhren dann die Zeitstempel fuer diese Zeitscheiben-Pseudo-Zaehlung liefern. Das bestimmt die Genauigkeit und die Drift, sowohl einzelner Kerne und Sockel untereinander als auch zur “richtigen” Zeit.

Taktbasiert ist heutzutage uebrigens keine dieser Zeiten mehr, weil sich aktuelle CPUs dynamisch hoch- und runtertakten und weil die Taktfrequenz auch nicht sehr praezise gleichfoermig ist, wie man es fuer eine Uhr wollen wuerde.

Zeitbasen in modernen Systemen sind ein recht komplexes Thema, du kannst dich mal durch den entsprechenden Linux-Code klicken: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/kernel/time fuer so ein Gefuehl dafuer wieviel Kram es da so gibt. In Windows wird das nicht gross anders sein, weil halt die moderne Hardware so aussieht.

1 Like

Super Danke sehr! D.h. die Zeit wird in heutigen modernen Rechnern durch auslesen eines internen Zeitgebers, der verschieden in Hardware, je nachdem welchen Prozessor man verwendet, implementiert wird, gemessen. Das BS “liest” dann diesen Pseudo-Zeitschreiben-Zaehler und die Auflösung dieses Timers aus.


Die Stopwatch-Klasse benutzt anscheinend intern die [m]QueryPerformanceCounter[/m]-Funktion. Dazu gibt’s im Internet eine Reihe von Informationen, zum Beispiel: http://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx
Ist wohl so ähnlich wie [m]clock_gettime[/m] mit dem Argument [m]CLOCK_MONOTONIC[/m] unter unixoiden Systemen.


Das kommt alles von der Hardware: Acquiring high-resolution time stamps - Win32 apps | Microsoft Learn