Antwort

2

Leistungsüberwachungszähler (PMCs) müssen nicht initialisiert werden, sie müssen programmiert (oder eingestellt) werden, wenn die Software die Funktion verwenden möchte.

Die CPU macht nach einem Reset nichts mit den PMCs, zumindest nichts architektonisch Sichtbares (d. H. Für die Programmierer sichtbar).

Der Bootloader behandelt solche Dinge nicht.

Es ist ein Kernel-Modul, das die PMCs handlea weil sie Modell spezifische Register (MSR), die nur mit Anweisungen zugegriffen werden kann (wie rdmsr, wrmsr), die privilegiert sind (dh sie müssen den Code im Kernel-Raum laufen) . Das Kernelmodul kann dann die Funktionalität den Benutzerraumprogrammen entweder über die OS-Schnittstellen verfügbar machen oder indem die Anweisung rdpmc mit nicht privilegiertem Code ausgeführt wird (obwohl es nur das Lesen der bereits voreingestellten Zähler erlaubt).


Um mehr über PMCs finden Sie unter Intel Manual 3B, Chapter 18.

+0

IIRC, der Kernel kann direkten User-Space-Zugriff auf die Perf-Zähler ermöglichen. (also Dinge einrichten, damit die [RDPMC-Anweisung] (http://www.felixcloutier.com/x86/RDPMC.html) im User-Space funktioniert) –

+0

@PeterCordes Wenn ich mich nicht irre, können User-Space-Programme nur Verwenden Sie 'rdpmc' zum Lesen. Aber es ist erwähnenswert, danke! –

+0

Ich habe RDPMC nicht manuell verwendet, aber ich denke, es ist nur für das Lesen der tatsächlichen Zähler. Um auszuwählen, was Sie zählen möchten, brauche ich WRMSR. Dies ist jedoch ausreichend für sehr niedrige Overhead-Messungen, niedriger als sogar RDTSC. (Und Sie können Kerntaktzyklen zählen, nicht Wanduhr-Referenzzyklen.) –