Saya memiliki utas kworker dengan penggunaan CPU yang tinggi, yang menyebabkan layar sentuh saya sangat lambat dan tidak responsif. Menjalankan beaglebone dengan 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
Saya tidak dapat menginstal / menggunakan perf karena saya menjalankan kernel 4.1.15 dan perf hanya tersedia di 3.16 jadi saya tidak dapat melacak utasnya.
Saya mencoba beberapa solusi yang saya temukan online, tetapi tidak ada yang berhasil.
1) https://stackoverflow.com/questions/10846747/origin-of-a-kworker-thread
$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
$ cat /sys/kernel/debug/tracing/trace_pipe
Keluaran:
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) Menonaktifkan /sys/firmware/ascpi/gpe##
Namun, folder ascpi itu bahkan tidak ada di beaglebone saya.
3) https://askubuntu.com/questions/33640/kworker-what-is-it-and-why-is-it-hogging-so-much-cpu
echo l > /proc/sysrq-trigger
untuk membuat backtrace, output di akhir dmesg
Keluaran:
[ 3581.845525] sysrq: SysRq : Changing Loglevel
[ 3581.850338] sysrq: Loglevel set to 1
masalahnya adalah saya tidak mengerti mengapa masalah ini ada, atau dari mana asalnya - dan kemudian lebih lanjut, bagaimana menyelesaikannya.
Saya menjalankan GUI dan juga menjalankan CAN (python-can / socketCAN). Olahpesan CAN dapat dikendalikan melalui GUI.
Perilaku yang saya temukan adalah: Ketika GUI mulai - tidak ada utas kworker yang berat. Ketika CAN dimulai untuk pertama kalinya - utas kworker memakan 15-40% CPU.
Saya memiliki sakelar yang memungkinkan saya untuk berhenti mengirim pesan CAN (CAN on / off). Sekarang ketika saya mematikan CAN melalui GUI, thread kworker naik menggunakan 60% dari CPU.
Saya kira ada sesuatu yang mulai ketika antarmuka BISA pertama kali diaktifkan dan kemudian melanjutkan seluruh. Bagaimana cara menentukan dan memperbaiki ini?
T
/sys/devices/system/cpu/cpu0/cpufreq
bahkan tidak memiliki file boost untuk sistem saya - kecuali ada tempat lain yang akan diaktifkan / dinonaktifkan. bagaimana cara turbo memperbaiki ini? (atau menjadi penyebab masalah)