Prérequis

Version noyau

perf utilise les compteurs de performance du CPU (Performance Monitoring Counters ou PMCs en anglais). Cette fonctionnalité est définie au niveau de la microarchitecture CPU, donc elle peut changer d’une génération de CPU à l’autre, et le code de perf devra alors être adapté.

Comme la partie de perf qui communique avec les PMCs est localisée dans le noyau linux (module events), il en résulte que pour éviter tout problème de support matériel avec perf, vous devez utiliser un noyau Linux aussi récent que possible, et au moins aussi récent que votre CPU.

Vous pouvez vérifier votre version de noyau avec la commande uname

uname -r
5.14.21-150400.24.21-default

…votre modèle de CPU avec la commande lscpu

lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          36
On-line CPU(s) list:             0-35
Thread(s) per core:              2
Core(s) per socket:              18
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz

   ... autres infos intéressantes dans l'absolu, mais pas ici ...

…et trouver les dates de sorties correspondantes sur :

Si votre noyau est un peu ancien par rapport à votre CPU, il est possible que votre distribution Linux vous donne accès à un noyau plus récent. Par exemple, les versions LTS de Ubuntu peuvent utiliser les noyaux des versions non-LTS via le mécanisme des Hardware Enablement Stacks (kernels -hwe). Consultez la documentation de votre distribution pour plus de détails.

Virtualisation et conteneurs

Dans l’ensemble, pour éviter les problèmes, il est fortement recommandé de privilégier quand c’est possible l’utilisation de perf sur des systèmes bare metal, sans virtualisation ni conteneurs. Néanmoins, avec un peu de travail, on peut faire entendre raison même à des systèmes virtualisés.

Les compteurs de performance CPU permettent de faire un suivi très fin de l’activité système, et ce suivi peut être malheureusement détourné à des fins d’espionnage. Pour cette raison, de nombreux hyperviseurs de machines virtuelles désactivent l’accès aux PMCs par défaut.

Si vous rencontrez des difficultés dans l’utilisation de perf sur un système virtualisé, il est possible que vous soyez face à ce problème. Dans ce cas, consultez la documentation de votre hyperviseur pour savoir comment autoriser la machine virtuelle à accéder aux PMCs.

L’utilisation de perf au sein de conteneurs qui s’exécutent nativement sous Linux ne devrait pas être sujette à des problèmes de ce type. En revanche…

  • La plupart des moteurs de conteneurs empêchent l’exécution de perf par défaut, il faut donner les bonnes permissions pour pouvoir utiliser perf.
  • La version de perf installée dans le conteneur doit être proche de la version du noyau du système hôte pour éviter des problèmes de compatibilité.
  • L’utilisation de conteneurs sous macOS et Windows implique l’utilisation d’une machine virtuelle, et est donc concernée par l’avertissement ci-dessus.