Pergunta

Ao tentar estimar a quantidade de memória consumida por um módulo do kernel (geralmente drivers de dispositivo), eu tentei usar o tamanho utilidade que deu o tamanho das áreas de memória estática do .ko (. bss, .data, .text etc). Então, eu estava esperando a soma desses valores a ser exatamente igual à saída dado pelo lsmod comando imediatamente após a inserção do módulo.

Sem alocação dinâmica de memória (kmalloc ou vmalloc) é realizado na função init () para garantir que ele não está causando o difference.So porque é que há uma incompatibilidade?

Curiosamente a incompatibilidade foi encontrado para ser um valor fixo na maioria das vezes !!

As saídas de comando são listadas abaixo

tamanho 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
Foi útil?

Solução

Você menciona que nenhuma alocação é feita na função init, mas o que levem em conta chamadas como register_chrdev (9) que alocar memória interna para a instância dispositivo? O comentário que é uma diferença constante faz-me pergunto se isso pode ser a causa.

Outras dicas

Pode ser as funções utilizadas pelo módulo são contados para o tamanho do módulo? Tentar

cat /proc/kallsyms | grep module_name

A diferença entre os dois tamanho é 404. Texto + dados + 404 = 1024. Pode ser que isso é algum tipo de problema granularidade? Eu não sei como o tamanho é calculado dentro do kernel ...

No entanto, o código do kernel e os dados são alocados usando memória dinâmica. E usos kmalloc pré-alocados bloco de memória, por isso, é bastante provável que haja algum arredondamento para cima quando as seções de código e dados são alocados.

Tente aumentar o tamanho das seções de dados e ver se o lsmod relatou mudança de tamanho

Sem mais informações, estou tentado a supor que sua sobrecarga de depuração. Eu digo tentado, porque eu não tenho a configuração do kernel.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top