Использование памяти модулем ядра - PullRequest
11 голосов
/ 19 марта 2009

При попытке оценить объем памяти, потребляемый модулем ядра (обычно это драйверы устройств), я попытался использовать утилиту size , которая давала размер областей статической памяти .ko (.bss .data, .text и т. д.). Поэтому я ожидал, что сумма этих значений будет точно равна выводу, заданному командой lsmod сразу после вставки модуля.

Динамическое выделение памяти (kmalloc или vmalloc) не выполняется в функции init (), чтобы гарантировать, что это не вызывает различий. Так почему существует несоответствие?

Любопытно, что в большинстве случаев это несоответствие было фиксированной величиной !!

Выводы команды перечислены ниже

размер 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

Ответы [ 3 ]

4 голосов
/ 24 марта 2009

Вы упомянули, что в функции init не выполняется выделение, но учитывает ли это вызовы, такие как register_chrdev (9), которые выделяют память внутри для экземпляра устройства? Комментарий о том, что это постоянная разница, заставляет меня задуматься, может ли это быть причиной.

1 голос
/ 19 марта 2009

Может ли функции, используемые модулем, учитываться в размере модуля? Попробуйте

cat /proc/kallsyms | grep module_name

Разница между этими двумя размерами составляет 404. Текст + данные + 404 = 1024. Может быть, это какая-то проблема гранулярности? Я не знаю, как рассчитывается размер внутри ядра ...

Однако код и данные ядра распределяются с использованием динамической памяти. А kmalloc использует предварительно выделенный блок памяти, поэтому вполне вероятно, что при выделении разделов кода и данных происходит некоторое округление.

Попробуйте увеличить размер разделов данных и посмотрите, не изменился ли размер сообщения lsmod

0 голосов
/ 20 марта 2009

Без дополнительной информации я испытываю желание догадаться, что это отладка. Я говорю соблазн, потому что у меня нет конфигурации вашего ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...