Наилучший реальный шанс -
- включить трассировку в конфигурации ядра и построить такое ядро 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 и потоки пользовательского пространства.Приятно видеть, кто блокирует систему.