[kernel] compteurs de performances
Bonjour,
Je cherche à lire les compteurs de performances pour un module externe. Pour cela j'ai trouvé les fonctions :
extern struct perf_event *perf_event_create_kernel_counter(struct perf_event_attr *attr, int cpu, struct task_struct *task, perf_overflow_handler_t callback);
et
extern u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running);
dans ./include/linux/perf_event.h. Le problème c'est que les valeurs que je récupère avec perf_event_read_value sont (à priori) erronées...
J'ai récupéré un programme qui lit les registres en espace utilisateur et les valeurs ne sont pas les mêmes...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
static void perf_counter(unsigned int cpu){
struct perf_event_attr attr = {
.type = PERF_TYPE_SOFTWARE,
.config = PERF_COUNT_SW_CPU_CLOCK
};
u64 total=0, enabled=0, running=0;
struct perf_event *evt = perf_event_create_kernel_counter(&attr, cpu, NULL, f_overflow);
total = perf_event_read_value(evt, &enabled, &running);
printk(KERN_INFO "cpufreq(%u): governor Govtest perf : %llu %llu %llu", cpu, total,
enabled, running);
} |
Dans cette exemple le module m'affiche des valeurs entre 300 et 700, total est toujours inférieurs à enabled et running. A chaque test enabled et running sont égaux.
Normalement je devrais avoir une valeur proche de 1 000 000 000. Enfin quand je dis proche, c'est à 100 000-200 000 près.
merci d'avance pour votre aide !