Ok, quindi immagino di averlo capito.
Per la macchina Intel che utilizzo, il formato è il seguente:<umask><eventselector>
dove entrambi sono valori esadecimali. Gli zeri iniziali di umask possono essere eliminati, ma non per il selettore di eventi.
Quindi per l'evento 0xB0
con la maschera 0x01
Posso chiamare:
perf record -e r1B0 ./mytestapp someargs
Non sono riuscito a trovarne l'esatta analisi nel codice del kernel perf (c'è qualche hacker del kernel qui?), ma ho trovato queste fonti:
- Una descrizione dell'uso di perf con eventi grezzi nella rivista c't 13/03 (abbonamento richiesto), che descrive alcuni eventi grezzi con la loro descrizione dall'Intel Architecture Software Developers Manuel (Vol 3b)
- Una patch sulla mailing list del kernel, che discute il modo corretto di documentarla. Specificava che il modello precedente era "... era specifico per x86 e incompleto"
- (Aggiornato) La pagina man delle versioni più recenti mostra un esempio su macchine Intel:
man perf-list
Aggiorna :Come sottolineato nei commenti (grazie!), il traduttore libpfm può essere utilizzato per ottenere il descrittore di evento appropriato. Il sito Web collegato nei commenti (Bojan Nikolic:How to monitor the full range of CPU performance events), scoperto dall'utente "osgx", lo spiega in modo più dettagliato.
Sembra che tu possa usare anche:
perf record -e cpu/event=0xB1,umask=0x1/u ./mytestapp someargs
Non so dove sia documentata questa sintassi.
Probabilmente puoi usare anche gli altri argomenti (edge, inv, cmask).