Utilisation de la mémoire d'un module de noyau
-
20-08-2019 - |
Question
Tout en essayant d’estimer la quantité de mémoire utilisée par un module du noyau (généralement des pilotes de périphérique), j’ai essayé d’utiliser l’utilitaire size qui donnait la taille des zones de mémoire statique du fichier .ko (. bss, .data, .text, etc.). Je m'attendais donc à ce que la somme de ces valeurs soit exactement égale à la sortie fournie par la commande lsmod immédiatement après l'insertion du module.
Aucune allocation de mémoire dynamique (kmalloc ou vmalloc) n’est effectuée dans la fonction init () afin de s’assurer qu’elle ne cause pas la différence. Alors pourquoi existe-t-il une disparité?
Curieusement, la plupart du temps, il a été constaté que le décalage était un montant fixe!
Les résultats de la commande sont répertoriés ci-dessous
taille chardev.ko
text data bss dec hex filename
172 448 1024016 1024636 fa27c chardev.ko
lsmod
Module Size Used by Tainted: P
chardev 1025040 0 - Live 0xc009d000
La solution
Vous dites qu'aucune allocation n'est effectuée dans la fonction init, mais cela prend-il en compte des appels tels que register_chrdev (9) qui allouent de la mémoire en interne pour l'instance de périphérique? Le commentaire selon lequel il s'agit d'une différence constante me fait me demander si cela pourrait en être la cause.
Autres conseils
Peut-être que les fonctions utilisées par le module sont comptées dans la taille du module? Essayez
cat /proc/kallsyms | grep module_name
La différence entre les deux tailles est 404. Texte + données + 404 = 1024. Peut-être s'agit-il d'un problème de granularité? Je ne sais pas comment la taille est calculée à l'intérieur du noyau ...
Cependant, le code du noyau et les données sont alloués en utilisant la mémoire dynamique. Et kmalloc utilise un bloc de mémoire pré-alloué. Il est donc fort probable qu’il y ait des arrondis lorsque les sections de code et de données sont allouées.
Essayez d’incrémenter la taille des sections de données et de voir si le changement de taille signalé par lsmod
Sans plus d'informations, je suis tenté de deviner que son débogage est un temps système. Je dis tenté car je n’ai pas la configuration de votre noyau.