Profilage des modules du kernel Linux

Je suis intéressé par le profilage d’un module pour le kernel Linux. Je l’ai essayé de cette façon:

  1. Construit le kernel avec CONFIG_PROFILING=y
  2. Amorcé le kernel avec le profile=2
  3. Réinitialiser le profileur par echo 123 > /proc/profile
  4. Le module a été chargé avec succès par un démon dédié
  5. Exécutez une application d’espace utilisateur qui utilise le module via des appels ioctl spécifiques. L’application de test a fonctionné comme prévu afin que le module fonctionne correctement.
  6. Lisez les informations de profilage en utilisant readprofile -p /proc/profile -m System.mapSystem.app a été généré avec le kernel.

Jusqu’ici tout va bien. Presque tout a fonctionné comme prévu. Ce qui n’a pas fonctionné, c’est que je n’ai pas eu d’informations sur mon module, c’est-à-dire qu’aucune fonction du module n’a été mentionnée.

Cependant, à ce propos, je me suis souvenu que j’avais oublié de recomstackr le module en utilisant CONFIG_PROFILING=y .

Ma question est donc la suivante: le module n’a-t-il pas été CONFIG_PROFILING=y dans le journal de profilage parce qu’il n’avait pas été compilé avec CONFIG_PROFILING=y ou existe-t-il une autre raison plus évidente que je ne connais pas?

Si on se demande pourquoi je pose la question plutôt que de l’essayer tout de suite, c’est parce que je ne peux pas le faire à la maison et que j’aime plutôt entendre ce que diraient les experts avant d’avoir à nouveau access au code.

Il ne semble pas possible que les modules soient profilés de cette manière car ils sont chargés dynamicment , ce qui signifie qu’ils sont absents du fichier System.map .

Une solution serait de construire le pilote dans le kernel . Malheureusement, cela ne fonctionne pas toujours car le système peut être conçu pour fonctionner uniquement avec le pilote intégré dans un module.

Je suggère que l’utilisation de oprofile devrait fonctionner.