kworker eating 85% CPU 1 most of the time!

I'm running Ubuntu 18.04, kernel 5.4.81, and kworker/0:1+kac is using 85% CPU 1 most of the time.

Here is some useful info:

  • top output:

    top cmd

  • System Monitor CPU load:

    CPU load pic

  • perf report:

    Samples: 56K of event 'cycles', Event count (approx.): 29364654484
      Children      Self  Command          Shared Object                 Symbol
    +   80.07%     0.00%  kworker/0:1-kac  [kernel.kallsyms]             [k] ret_from_fork
    +   80.07%     0.00%  kworker/0:1-kac  [kernel.kallsyms]             [k] kthread
    +   80.07%     0.00%  kworker/0:1-kac  [kernel.kallsyms]             [k] worker_thread
    +   79.96%     0.03%  kworker/0:1-kac  [kernel.kallsyms]             [k] process_one_work
    +   79.93%     0.00%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_os_execute_deferred
    +   78.59%     0.01%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ev_asynch_execute_gpe_m
    +   78.54%     0.01%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ns_evaluate
    +   78.25%     0.01%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ps_execute_method
    +   78.10%     0.03%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ps_parse_aml
    +   75.07%     0.71%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ps_parse_loop
    +   49.25%     0.52%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ds_exec_end_op
    +   27.27%     0.25%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ns_lookup
    +   26.93%     0.19%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ns_search_and_enter
    +   26.48%    26.16%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ns_search_one_scope
    +   26.00%     0.05%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ds_evaluate_name_path
    +   19.60%     3.27%  kworker/0:1-kac  [kernel.kallsyms]             [k] acpi_ut_update_object_refere
    +   17.80%     0.00%  swapper          [kernel.kallsyms]             [k] secondary_startup_64
    +   17.80%     0.00%  swapper          [kernel.kallsyms]             [k] cpu_startup_entry
    +   17.78%     0.03%  swapper          [kernel.kallsyms]             [k] do_idle
    +   17.29%     0.01%  swapper          [kernel.kallsyms]             [k] call_cpuidle
    +   17.28%     0.00%  swapper          [kernel.kallsyms]             [k] cpuidle_enter
    

Solution 1:

I was helped taming such kworker runaway processes by disabling an interrupt, inspired by this thread and an old answer by Mauro Mascia anwered, burried on this site because it has unfortunately been marked as a "Duplicate" to another question, that did not provide a solution. Therefore, users will not easily find it.

The Ubuntu bug report on this issue (not solved) is 887793. It also contains a suggestion to workaround the issue:

echo N > /sys/module/drm_kms_helper/parameters/poll

I used the approach described here. It is somewhat complicated because it involves finding out the interrupt(s) that cause the issue. I have a single line in the form of

echo "disable" > /sys/firmware/acpi/interrupts/#####

(with ##### denoting the interrupt number, which will be different between computers) in the crontab of root.

I did not test the first approach, and I do not know which of both approaches is impacting system performance the least (if at all noticeable - and in many case by far preferred over a runaway kworker process).