Профилирование модулей ядра Linux - PullRequest
13 голосов
/ 23 апреля 2011

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

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 26 апреля 2011

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

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

0 голосов
/ 26 апреля 2011

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

...