Профилирование модулей ядра Linux

Мне интересно профилировать модуль для ядра Linux. Я пробовал это так:

  • Построено ядро ​​с CONFIG_PROFILING=y
  • Загрузили ядро ​​с помощью profile=2
  • Reset профайлер echo 123 > /proc/profile
  • Модуль был успешно загружен специальным демоном
  • Запустите приложение, использующее модуль, через специальные вызовы ioctl. Тестируемое приложение работало так, как ожидалось, чтобы модуль работал нормально.
  • Прочитайте информацию профилирования с помощью readprofile -p /proc/profile -m System.map, где System.app был сгенерирован вместе с ядром.

До сих пор так хорошо. Почти все работало, как ожидалось. Однако, что не получилось, я не получил никакой информации о моем модуле, то есть не упоминалось о какой-либо функции из модуля.

Однако, во-вторых, я вспомнил, что забыл перекомпилировать модуль с помощью CONFIG_PROFILING=y.

Итак, мой вопрос: не отобразился ли модуль в журнале профилирования, потому что он не был скомпилирован с помощью CONFIG_PROFILING=y или есть еще одна очевидная причина, о которой я не знаю?

Если кто-то задается вопросом, почему я спрашиваю, а не пытаюсь это сразу, то это потому, что я не могу делать это дома, и я бы предпочел бы услышать, что сказал бы knowledgable, прежде чем я получу доступ к коду еще раз.

Ответы

Ответ 1

Невозможно профилировать модули таким образом, поскольку они загружаются динамически, а это значит, что они отсутствуют в файле System.map.

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

Ответ 2

Я предлагаю использовать oprofile.