Bien, supongo que lo descubrí.
Para la máquina Intel que uso, el formato es el siguiente:<umask><eventselector>
donde ambos son valores hexadecimales. Los ceros iniciales de la umask se pueden eliminar, pero no para el selector de eventos.
Así que para el evento 0xB0
con la máscara 0x01
Puedo llamar:
perf record -e r1B0 ./mytestapp someargs
No pude encontrar el análisis exacto en el código del kernel perf (¿algún hacker del kernel aquí?), pero encontré estas fuentes:
- Una descripción del uso de perf con eventos sin procesar en la revista c't 13/03 (se requiere suscripción), que describe algunos eventos sin procesar con su descripción del Manual para desarrolladores de software de arquitectura Intel (Vol 3b)
- Un parche en la lista de correo del núcleo, discutiendo la forma correcta de documentarlo. Especificaba que el patrón anterior era "... era específico de x86 e incompleto en eso"
- (Actualizado) La página de manual de las versiones más recientes muestra un ejemplo en máquinas Intel:
man perf-list
Actualizar :Como se señaló en los comentarios (¡gracias!), el traductor libpfm se puede usar para obtener el descriptor de evento adecuado. El sitio web vinculado en los comentarios (Bojan Nikolic:Cómo monitorear la gama completa de eventos de rendimiento de la CPU), descubierto por el usuario 'osgx', lo explica con más detalle.
Parece que también puedes usar:
perf record -e cpu/event=0xB1,umask=0x1/u ./mytestapp someargs
No sé dónde está documentada esta sintaxis.
Probablemente también puedas usar los otros argumentos (edge, inv, cmask).