kworker线程的起源

在我使用内核3.2的新安装系统上,我看到一个kworker线程正在不断消耗CPU。 我想找出内核/模块的哪个部分创build了这个工作队列。

如何跟踪名为kworker / 0:3的kworker-thread到它在内核空间的原点?

我试图查看/ sys / kernel / debug / tracing / events / workqueue,但无法弄清楚。

Solutions Collecting From Web of "kworker线程的起源"

(在我看来,这是一个非常关键的话题,但这里是我在unix.stackexchange.com上发布的答案 。)

我在lkml上找到了这个线程,它回答了你的问题。 (甚至Linus自己也不明白如何找出这些线程的起源。)

基本上这样做有两种方法:

$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event $ cat /sys/kernel/debug/tracing/trace_pipe > out.txt (wait a few secs) 

为此,您需要在您的内核中编译ftrace 。

这将输出线程正在做什么,并且对于追踪多个小型作业是有用的。

 cat /proc/THE_OFFENDING_KWORKER/stack 

这将输出执行大量工作的单个线程的堆栈。 它可能会让你找出是什么导致这个特定的线程占用CPU(例如)。 THE_OFFENDING_KWORKER是进程列表中THE_OFFENDING_KWORKER的pid。

所以,一段时间后我找到了解决办法。 其实Anthon是正确的,它是发送中断的ACPI子系统。 在我的系统上,我禁用了下面的中断,kworker-thread被平息了。

 echo disable > /sys/firmware/acpi/interrupts/gpe1B echo disable > /sys/firmware/acpi/interrupts/gpe08 

但是直到现在还没有确定gpe08gpe1B是什么来自假的IRQ。

kworker /看门狗在不使用有线电源时会定期造成高负载 – 解决方法

有kworker(导致kernel_thread_helper + 0x6 / 0x10?)只有笔记本电脑通过电缆供电的线程1每5秒钟1秒钟到100%的CPU。 没有电池电量问题。 电池充满电无关紧要。

它或多或少地出现了,所以我想最近的Ubuntu更新是原因(现在是3.2.0-55-generic-pae)。

正在寻找半天,试图弄清楚的根本原因是,并试图禁用所有acpi中断,这并不重要。

将GRUB_CMDLINE_LINUX_DEFAULT =“acpi = off”添加到/ etc / defaults / grub最后。

正如我现在所发现的,我添加了这些确切的特殊的unicode引号,这可能解释了与“安静的飞溅”(默认引号),这困惑了我的不兼容性。 我不得不考虑一些更多的grub问题(启动菜单不显示,但我尝试,默认条目配置不使用…),所以我会离开测试以后。

PS:一个星期后,问题又回来了(没有重启,只能在两者之间暂停)。 这可能与使用USB鼠标相关。 掉电/通电帮助(重启没有)。 扔掉所有的grub选项。 我期待这个问题再次出现。

PPS:花了一些时间(半年),但是从公羊回来后又回来了。 没有最近的更新,只是插拔电源,就像我经常这样做。 没有USB设备插入/拔出。 有一个图腾运行(但没有播放)暂停期间。 电源插头掉电/上电不起作用 ,断电/拔掉电源线。

kworker是处理工作队列的内核线程。该线程在文件linux / kernel / workqueue.c文件中创建。