Les noyaux Linux plus récents ont un sysfs réglable /proc/sys/kernel/perf_event_paranoid
qui permet à l'utilisateur d'ajuster les fonctionnalités disponibles de perf_events
pour les utilisateurs non root, des nombres plus élevés étant plus sûrs (offrant ainsi moins de fonctionnalités):
De la documentation du noya nous avons le comportement suivant pour les différentes valeurs:
perf_event_paranoid:
Contrôle l'utilisation du système d'événements de performance par les utilisateurs non privilégiés (sans CAP_SYS_ADMIN). La valeur par défaut est 2.
-1: Autoriser l'utilisation de (presque) tous les événements par tous les utilisateurs Ignorer la limite de mlock après perf_event_mlock_kb sans CAP_IPC_LOCK
> = 0: interdire le point de trace de la fonction ftrace par les utilisateurs sans CAP_SYS_ADMIN Interdire l'accès au point de trace brut par les utilisateurs sans CAP_SYS_ADMIN
> = 1: interdire l'accès aux événements CPU par les utilisateurs sans CAP_SYS_ADMIN
> = 2: interdire le profilage du noyau par les utilisateurs sans CAP_SYS_ADMIN
J'ai 1
dans mon perf_event_paranoid
fichier qui devrait "Interdire l'accès aux événements CPU" - mais qu'est-ce que cela signifie exactement?
Une lecture simple n'impliquerait aucun accès aux événements du compteur de performances du processeur (tels que les événements Intel PMU), mais il semble que je puisse y accéder très bien. Par exemple:
$ perf stat sleep 1
Performance counter stats for 'sleep 1':
0.408734 task-clock (msec) # 0.000 CPUs utilized
1 context-switches # 0.002 M/sec
0 cpu-migrations # 0.000 K/sec
57 page-faults # 0.139 M/sec
1,050,362 cycles # 2.570 GHz
769,135 instructions # 0.73 insn per cycle
152,661 branches # 373.497 M/sec
6,942 branch-misses # 4.55% of all branches
1.000830821 seconds time elapsed
Ici, de nombreux événements sont des événements CPU PMU (cycles
, instructions
, branches
, branch-misses
, cache-misses
).
Si ce ne sont pas les événements CPU auxquels il est fait référence, quels sont-ils?
Dans ce cas événement CPU fait référence aux événements de surveillance par CPU plutôt que par tâche. Pour les outils perf
, cela limite l'utilisation de
-C, --cpu=
Count only on the list of CPUs provided. Multiple CPUs can be provided as a comma-separated list with no space: 0,1.
Ranges of CPUs are specified with -: 0-2. In per-thread mode, this option is ignored. The -a option is still necessary
to activate system-wide monitoring. Default is to count on all CPUs.
-a, --all-cpus
system-wide collection from all CPUs (default if no target is specified)
Pour perf_event_open
ceci considère le cas suivant:
pid == -1 and cpu >= 0
This measures all processes/threads on the specified CPU. This requires CAP_SYS_ADMIN capability or a /proc/sys/ker‐
nel/perf_event_paranoid value of less than 1.
Cela peut être spécifique à la version, la documentation citée est de 4.17. C'est ne autre question connexe .