Здравствуйте!
Периодически на прогоне вылетает система с консольными сообщениями:
[247462.730891] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[247462.736931] rcu: 1-...0: (5 ticks this GP) idle=4b5c/1/0x40000002 softirq=891703/891705 fqs=7233754
[247462.746150] (detected by 2, t=18548144 jiffies, g=1698361, q=2099245 ncpus=4)
[247462.753458] Sending NMI from CPU 2 to CPUs 1:
[247472.757938] rcu: rcu_sched kthread starved for 998 jiffies! g1698361 f0x0 RCU_GP_DOING_FQS(6) ->state=0x0 ->cpu=3
[247472.768279] rcu: Unless rcu_sched kthread gets sufficient CPU time, OOM is now expected behavior.
[247472.777312] rcu: RCU grace-period kthread stack dump:
[247472.782442] task:rcu_sched state:I stack:0 pid:12 ppid:2 flags:0x00000000
[247472.790887] __schedule from schedule+0x4c/0xe0
[247472.795526] schedule from schedule_timeout+0x74/0xe4
[247472.800676] schedule_timeout from rcu_gp_fqs_loop+0x10c/0x314
[247472.806607] rcu_gp_fqs_loop from rcu_gp_kthread+0x74/0x11c
[247472.812270] rcu_gp_kthread from kthread+0xd0/0xec
[247472.817158] kthread from ret_from_fork+0x14/0x2c
[247472.821956] Exception stack(0xf084dfb0 to 0xf084dff8)
[247472.827092] dfa0: 00000000 00000000 00000000 00000000
[247472.835349] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[247472.843603] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
[247472.850297] rcu: Stack dump where RCU GP kthread last ran:
[247472.855862] Sending NMI from CPU 2 to CPUs 3:
[247472.860305] NMI backtrace for cpu 3
[247472.860319] CPU: 3 PID: 0 Comm: swapper/3 Not tainted 6.1.0-rc6 #143
[247472.860330] Hardware name: Allwinner sun8i Family
[247472.860334] PC is at arch_cpu_idle+0x38/0x3c
[247472.860348] LR is at arch_cpu_idle+0x34/0x3c
[247472.860358] pc : [<c01073a8>] lr : [<c01073a4>] psr: 60010013
[247472.860364] sp : f085dfb0 ip : 02e68e04 fp : 00000000
[247472.860369] r10: 00000001 r9 : c0b265e8 r8 : c0ed9f5b
[247472.860374] r7 : c0e06bac r6 : c1098000 r5 : c0e06b50 r4 : 00000003
[247472.860380] r3 : c0116160 r2 : 35d47749 r1 : 00000000 r0 : 00000005
[247472.860386] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
[247472.860394] Control: 10c5387d Table: 42a9806a DAC: 00000051
[247472.860402] arch_cpu_idle from default_idle_call+0x24/0x34
[247472.860418] default_idle_call from do_idle+0xb8/0x124
[247472.860429] do_idle from cpu_startup_entry+0x18/0x1c
[247472.860439] cpu_startup_entry from secondary_start_kernel+0x118/0x120
[247472.860453] secondary_start_kernel from 0x401015a0
Похоже сбой диспетчера ядер.
В интернете почитал, что устраняет проблему переход на работу с одним ядром. Попробовать можно, но не хотелось бы урезать возможности. Может подскажите, что можно сделать для устранения, собственных знаний не хватает.
попробуйте отключить все ядра кроме одного. для этого в строку для ядра надо добавить аргумент maxcpus=1
ничего перекомпилировать не надо, обычно достаточно остановить загрузку u-boot и посмотреть содержимое bootargs
далее временно добавить туда вышенаписанный аргумент и загрузиться
потом проверяете стабильность работы, далее думаете как пофиксить для мультиядерности
Добрый день!
Спасибо за ответ.
Я все же попробовал пересобрать ядро для работы на одном процессоре. Проблема устранилась, все работает стабильно.
У меня на устройстве запущен CODESYS собранный на другом тулчейне, и как оказалось, он нестабильно работает на многоядерном процессоре, периодически примерно раз в сутки происходит крах системы, описанный выше. Похоже для работы приложения на многоядерном процессоре требуются специальные опции компилятора.
В общем результат меня устраивает, буду работать на одном ядре. Еще раз всем спасибо за поддержку.