Какой инструмент для поиска причины пиковых задержек во встроенном Linux? - PullRequest
0 голосов
/ 27 февраля 2019

В лучшем случае, если бы у меня был (отладочный) -инструмент, работающий в фоновом режиме и сообщающий мне имя процесса или драйвера, который нарушает мои требования к задержке для моей системы.Какой инструмент подходит?У вас есть краткий пример его использования для следующего случая?

Тестовый случай:

  • Осциллограф измеряет время между триггером входа GPIO и откликом на GPIOвыход.Обычно время отклика составляет 150 мкс.Я запускаю каждые 25 мсек.
  • Моя пользовательская тестовая программа linux использует poll () и read () + write () для отражения обнаруженного сигнала входа в качестве ответа на выход.
  • Ядро Linux исправлено патчем Preempt_rt.
  • В измерении часов я вижу пики времени отклика до 20 мс.

1 Ответ

0 голосов
/ 26 марта 2019

Наилучший реальный шанс -

  1. включить трассировку в конфигурации ядра и построить такое ядро ​​Linux:
CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_STACK_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_DEBUG_FS=y
затем запустите ваше приложение, пока не произойдут странные вещи, используя инструмент trace-cmd
trace-cmd start -b 10000 -e 'sched_wakeup*' -e sched_switch -e gpio_value -e irq_handler_entry -e irq_handler_exit /tmp/myUserApplication

и получите файл trace.dat.

trace-cmd stop
trace-cmd extract
Загрузите этот файл trace.dat в KernelShark и проанализируйте процессоры, потоки, прерывания, потоки kworker и потоки пользовательского пространства.Приятно видеть, кто блокирует систему.
...