Сроки оптимизации загрузки ядра Linux - PullRequest
4 голосов
/ 10 июня 2010

Я пытаюсь оптимизировать время загрузки linux на встроенном устройстве (не на ПК)

В настоящее время для профилирования последовательности загрузки,
У меня включено информация о времени на printk журналы.

Это самый оптимальный способ?
Если нет, то как мне профилировать последовательность загрузки (с учетом времени) с минимальными издержками?

PS:
У меня есть терминал (устройства) через последовательное соединение &
Я использую TeraTerm поверх Windows-XP для доступа к нему.

Ответы [ 2 ]

2 голосов
/ 21 июня 2010

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

Возможно, вы захотите попробовать Bootchart.Это сценарий оболочки, который запускается в фоновом режиме во время загрузки и собирает данные из / proc.Несмотря на то, что он содержит больше служебной информации, чем информация о времени печати, он более подробный и позволяет профилировать запуск процесса и использование диска.

http://www.bootchart.org/

1 голос
/ 18 октября 2012

Прошло много времени, но я обновлял ответ здесь для справки.

Вот что я в итоге и сделал:

  1. Включены метки времени на моем клиенте последовательного терминалана ПК (TeraTerm).

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

  2. Добавлено printk() операторов в ядре.

    • 1-й в начале блока, который я пытался профилировать.
    • 2-й в конце блока, который я пытался профилировать.

Хотя существует небольшая задержка между тем, когда происходит событие на устройстве, и когдажурналы принимаются на главном ПК через последовательный порт, это довольно постоянное значение для данной аппаратной настройки.Следовательно, разница между двумя временными метками точно соответствует фактической разнице во времени между событиями на устройстве, которое сгенерировало эти журналы.Кроме того, накладные / побочные эффекты от 2 printk операторов минимальны.


ОБНОВЛЕНИЕ: 2 года спустя, и сотни часов отладки ядра позже, я бырекомендуем использовать трассировщики функций .Это требует немного усилий, чтобы учиться, хотя.Как хорошо объяснено здесь , необходимо:

  • Включить CONFIG_FUNCTION_TRACER в .config
  • Использовать trace_printk() вместоиз printk()
  • Проверьте выходные журналы по cat /sys/kernel/debug/tracing/trace
...