Ok, ich glaube, ich habe es herausgefunden.
Für den von mir verwendeten Intel-Rechner lautet das Format wie folgt:<umask><eventselector>
wobei beide Hexadezimalwerte sind. Die führenden Nullen der umask können weggelassen werden, aber nicht für den Ereignisselektor.
Also für das Ereignis 0xB0
mit der Maske 0x01
Ich kann anrufen:
perf record -e r1B0 ./mytestapp someargs
Ich konnte die genaue Analyse im Perf-Kernel-Code nicht finden (irgendein Kernel-Hacker hier?), aber ich habe diese Quellen gefunden:
- Eine Beschreibung der Verwendung von perf mit Raw-Events im c't-Magazin 13/03 (Abonnement erforderlich), das einige Raw-Events mit ihrer Beschreibung aus dem Intel Architecture Software Developers Manual (Vol 3b) beschreibt
- Ein Patch auf der Kernel-Mailingliste, in dem diskutiert wird, wie man ihn richtig dokumentiert. Es spezifizierte, dass das obige Muster "... war x86-spezifisch und noch dazu unvollständig"
- (Aktualisiert) Die Manpage neuerer Versionen zeigt ein Beispiel auf Intel-Rechnern:
man perf-list
Aktualisieren :Wie in den Kommentaren erwähnt (danke!), kann der libpfm-Übersetzer verwendet werden, um den richtigen Ereignisdeskriptor zu erhalten. Die in den Kommentaren verlinkte Website (Bojan Nikolic:How to monitor the full range of CPU performance events), die vom Benutzer 'osgx' entdeckt wurde, erklärt es ausführlicher.
Anscheinend können Sie auch Folgendes verwenden:
perf record -e cpu/event=0xB1,umask=0x1/u ./mytestapp someargs
Ich weiß nicht, wo diese Syntax dokumentiert ist.
Sie können wahrscheinlich auch die anderen Argumente (edge, inv, cmask) verwenden.