Autor Thema: performancecounter frequenz bzw. CPU-Takt  (Gelesen 2489 mal)

TomCat

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« am: 25. November 2016, 11:35 »
Hallo,
gibt es eine Möglichkeit die Frequenz des Performance-Counters bzw. die CPU-Frequenz auszulesen?
Der Befehl "rdtsc" gibt mir zwar den Inhalt des Taktzählers in 64-Bit Format, aber nicht die Frequenz mit der dieser hochgezählt wird. 

Welche Möglichkeiten hat man da?

THX
TomCat

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. November 2016, 06:30 »
Um die momentane mittlere Frequenz des TSC herauszubekommen, brauchst du eine zuverlässige (Zeit-)Referenz. Die bekommst du vom HPET (oder notfalls vom PIT), denn deren Grundtakt ist festgelegt. Du baust dir also eine Warteschleife bekannter Zeit (z.B. 10 ms) und liest vorher und nachher den TSC aus. Aus der Differenz kannst du die Schritte pro Sekunde und damit die Frequenz ableiten. Für gebrauchbare Ergebnisse sollte die Warteschleife Busy-Waiting ohne aktive Interrupts durchführen.

Die wahre CPU-Frequenz bekommst du über ACPI, aber das ist viel Arbeit.

Bedenke, dass der TSC keine stabile Zeitbasis ist. Es hängt von der konkreten Architektur ab, was er genau tut. Manchmal skaliert der TSC mit der CPU-Frequenz, manchmal nicht. Manchmal bleibt er im Idle stehen. Manchmal sind die TSCs mehrerer Cores auf einem Die synchronisiert, manchmal laufen sie auseinander. Manchmal sogar dann, wenn die Cores mit der gleichen Geschwindigkeit laufen.

TomCat

  • Beiträge: 32
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 29. November 2016, 09:27 »
Danke erstmal,

ich habe es bisher immer mit dem internen Timer gemacht. Der läuft ja mit 1,19.... MHZ. hab alle Interrupts
gesperrt und hatte dadurch einen sauberes Zeitintervall.  Das geht ja ganz gut soweit.
ich dachte halt, man könnte die Performancecounter-frequenz einfach irgendwo auslesen und würde sich so den ganzen
"Mess-Klimbim" sparen.
Aber scheint wohl nicht so einfach direkt zu gehen?
 

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 02. December 2016, 22:36 »
Der TSC zählt nur Takte, der weiß nicht, wie schnell die kommen und kann dir das darum nicht verraten. Du kannst ihn aber einmalig mit einem richtigen Timer abgleichen und solange du nichts seltsames mit der CPU anstellst (kein idle, kein frequency scaling), innerhalb eines Cores bleibst und das BIOS die CPU nicht wegen Überhitzung bremst, kannst du damit auch eine gute, kurze Zeit-Warteschleife realisieren.

Für alles andere solltest du den HPET oder PIT benutzen.

 

Einloggen