O encadeamento Kworker possui alto uso de CPU

0

Eu tenho um thread de kworker com alto uso de cpu, o que faz com que minha touchscreen fique muito lenta e sem resposta. Executando um beaglebone com o Debian.

 uname -r
 4.1.15-ti-rt-r43

 pid user     pr   ni     virt    res   shr s %cpu %mem time+     command
 90 root      20   0       0      0      0 R 34.7  0.0  14:16.48 kworker/u2:2

Não consigo instalar / usar perf porque estou executando um kernel 4.1.15 e o perf está disponível apenas em 3.16, portanto não consigo rastrear o segmento por meio desse

Eu tentei várias soluções que encontrei on-line, mas nenhuma delas funciona.

1) link

    $ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
    $ cat /sys/kernel/debug/tracing/trace_pipe 

Saída:

     python3-748   [000] d.h2   714.802127: workqueue_queue_work: work struct=ddec2368 function=flip_worker workqueue=dcd80600 req_cpu=2 cpu=4294967295
kworker/u2:2-67    [000] d.h2   714.817350: workqueue_queue_work: work struct=ddec2368 function=flip_worker workqueue=dcd80600 req_cpu=2 cpu=4294967295
kworker/u2:2-67    [000] d.h3   714.832576: workqueue_queue_work: work struct=ddec2368 function=flip_worker workqueue=dcd80600 req_cpu=2 cpu=4294967295
     python3-745   [000] d.s3   714.834340: workqueue_queue_work: work struct=ddd22e08 function=mcp251x_tx_work_handler [mcp251x] workqueue=dcff0200 req_cpu=2 cpu=429496$
irq/145-can1-737   [000] d..2   714.835555: workqueue_queue_work: work struct=ddd22e18 function=mcp251x_irq_work_handler [mcp251x] workqueue=dcff0200 req_cpu=2 cpu=42949$
kworker/u2:2-67    [000] d.h2   714.847801: workqueue_queue_work: work struct=ddec2368 function=flip_worker workqueue=dcd80600 req_cpu=2 cpu=4294967295


 $ cat /proc/90/stack
[<ffffffff>] 0xffffffff

2) Desativando /sys/firmware/ascpi/gpe##

no entanto, essa pasta ascpi não existe no meu beaglebone.

3) link

echo l > /proc/sysrq-trigger para criar um backtrace, saída no final de dmesg

Saída:

[ 3581.845525] sysrq: SysRq : Changing Loglevel
[ 3581.850338] sysrq: Loglevel set to 1

o problema é que não entendo por que esse problema existe ou de onde está surgindo - e depois, como resolvê-lo.

Estou executando uma GUI e também executando CAN (python-can / socketCAN). As mensagens CAN são controladas através da GUI.

O comportamento que eu encontrei foi: Quando a GUI é iniciada - não há thread de kworker pesado. Quando o CAN é iniciado pela primeira vez - o encadeamento kworker consome 15-40% da CPU.

Eu tenho um interruptor que me permite parar de enviar as mensagens CAN (CAN on / off). Agora, quando eu desligo CAN através da GUI, o encadeamento kworker usa 60% da CPU.

Suponho que algo está sendo iniciado quando a interface CAN é ativada e depois continua. Como faço para identificar e consertar isso?

T

    
por avelampudi 08.02.2017 / 23:20

0 respostas