On 07/02/2022 21:52, Frank Graf wrote:
> Am Sat, 2 Jul 2022 14:00:36 +0200 schrieb Helmut Schellong:
>
>>
>> Ich hatte schon immer mal vorgehabt, den Counter TSC eines Intel-X86
>> auszuprobieren.
[...]
>> Einzig bei dem dreistufigen Booten _könnte_ es sich um den richtigen
>> run-Level handeln.
>> Denn dabei wird von einem Level 3 bei boot1 geschrieben, und Level 0 bei
>> BTX (TSS).
>
> Ich denke mit Level 0 ist der Modus der x86 CPUs gemeint:
>
>
https://de.wikipedia.org/wiki/Ring_(CPU)#Ring_0_(Kernel-Mode)
>
> Der Kernel läuft im Ring 0, die Userprozesse in Ring 3.
Ja, das paßt zu den Levels 0 und 3 beim Booten
und zum Level 0 privilegierter Instruktionen und 3 im userland.
> FreeBSD bietet eine Schnittstelle dazu (Performance counters):
>
> siehe "man pmc.tsc" bzw. "man pmc"
Danke, das kannte ich bisher nicht.
> Du willst das selber implementieren. Du könntest schauen wie das bei der
> libpmc realisiert wurde.
Wenn ich mehr als TSC will, würde ich durchaus die pmc-lib nutzen.
> So wie ich es verstehe, wird dazu das Kernelmodul "hwpmc" verwendet.
>
Ich hatte zum Ende der 1980er mal einen Geräte-Treiber unter SCO-Unix/386
implementiert, ein Dummy, dessen Code mit Level 0 gelaufen haben müßte.
Der hatte ein /dev/meins, das ich lesen und beschreiben konnte.
Und beim Systemstart wurde das Device in der Tabelle gelistet.
Unter FBSD dürfte das mit einem ladbaren Kernelmodul (kldload, kldstat, loader.conf) gehen.
Allerdings bin ich erstmal mit der simplen rdtsc-Lösung in Inline-Assembler zufrieden.