Профилирование модулей ядра 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.