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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top