Premiers tests

perf fournit une batterie de tests automatisés que vous pouvez lancer avec la command perf test. Pour s’affranchir des problèmes de permissions dans un premier temps, lancez-la en tant que root :

sudo perf test
 1: vmlinux symtab matches kallsyms                       : Ok
 2: Detect openat syscall event                           : Ok
 3: Detect openat syscall event on all cpus               : FAILED!
 4: Read samples using the mmap interface                 : Ok
 5: Test data source output                               : Ok
 6: Parse event definition strings                        : Ok
 7: Simple expression parser                              : Ok
 8: PERF_RECORD_* events & perf_sample fields             : Ok
 9: Parse perf pmu format                                 : Ok
10: DSO data read                                         : Ok
11: DSO data cache                                        : Ok
12: DSO data reopen                                       : Ok
13: Roundtrip evsel->name                                 : Ok
14: Parse sched tracepoints fields                        : Ok
15: syscalls:sys_enter_openat event fields                : Ok

    ... beaucoup d'autres tests ...

Si un test échoue (“FAILED!”) ou ne s’exécute pas (“Skip”), vous pouvez l’exécuter en mode verbeux pour essayer de comprendre pourquoi :

sudo perf test -v 3
 3: Detect openat syscall event on all cpus               :
--- start ---
test child forked, pid 5998
registering plugin: /usr/lib64/traceevent/plugins/plugin_cfg80211.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_function.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_hrtimer.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_jbd2.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_kmem.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_kvm.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_mac80211.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_sched_switch.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_scsi.so
registering plugin: /usr/lib64/traceevent/plugins/plugin_xen.so
sched_setaffinity() failed on CPU 2: Invalid argument test child finished with -1
---- end ----
Detect openat syscall event on all cpus: FAILED!

Ici, le problème est lié au fait que le test perf essaie d’exécuter du code sur un coeur CPU du serveur ambulant auquel il n’a pas accès, ce qui ne sera pas bloquant en pratique.

Notez que certains des tests de perf utilisent des fonctionnalités franchement obscures (ex : exécution de programmes Windows via wine), et qu’il n’est pas nécessaire que tous les tests passent pour utiliser perf.