Kworker, что это такое и почему он так сильно загружает процессор?

Недавно я обновился до Kubuntu Natty Beta 1, и у меня возникло много проблем с этим процессом кворкер. В некоторые моменты он использует почти половину моего процессора. Кроме того, как ни странно, это, похоже, влияет на мои USB-порты; всякий раз, когда я подключаю USB-накопитель, процесс кворкер переходит в гипердвигатель, оставляя меня неспособным работать.

Я думал о том, чтобы сообщить об ошибке, но так как я даже не нашел никакого разумного объяснения тому, что кворкер это я решил, что должен выяснить первым.

"kworker" - это процесс-заполнитель для рабочих потоков ядра, которые выполняют большую часть фактической обработки для ядра, особенно в тех случаях, когда имеются прерывания, таймеры, ввод-вывод и т.д. Обычно они соответствуют подавляющему большинству любого выделенного "системного" времени для запущенных процессов. Это не то, что можно безопасно удалить из системы каким-либо образом, и оно совершенно не связано с nepomuk или KDE (за исключением того, что эти программы могут выполнять системные вызовы, которые могут потребовать, чтобы ядро что-то сделало).

Было несколько сообщений о чрезмерной активности kworker для относительно простых систем, начиная с разработки 2.6.36 (пример обсуждения), а также многочисленные сообщения о путанице и проблемах с 2.6.38 (хотя многие из этих сообщений включают слово "Natty", поэтому я предполагаю, что эти люди не использовали какое-либо ядро между 2.6.35 (распространяется в Ubuntu 10.10) и 2.6.38 (распространяется в Ubuntu 11.04).

Я нашел много сообщений о чем-то, что "исправило" это для того или иного пользователя. Большинство "исправлений", по-видимому, связаны с различного рода обновлениями ядра. Там, где обновление можно отследить до конкретной проблемы, часто кажется, что это какой-то драйвер или служба ядра, которые были исправлены, чтобы не вести себя неправильно: у меня сложилось впечатление, что в ядре очень много вещей, которые могут вызвать поведение, которое наблюдается как чрезмерное использование kworker.

Если вы обнаружите, что система непригодна для использования из-за чрезмерной активности kworker, я бы рекомендовал попробовать делать меньше вещей. Если вы думаете, что ничего не делаете, попробуйте отключить длительно работающие службы или таймеры (программы чтения RSS, программы чтения почты, индексаторы файлов, трекеры активности и т.д.). Если это не сработает, попробуйте перезапустить. Если ваша система позволяет включать или отключать оборудование в среде предварительной загрузки, попробуйте отключить оборудование, которое вы не используете. Если это происходит при каждом перезапуске, прежде чем вы что-либо сделаете, вы можете попробовать удалить что-либо, но на этом этапе вам захочется запустить инструменты профилирования системных вызовов, чтобы отследить конкретные приложения, которые, по-видимому, вызывают эту перегрузку.

Следует надеяться, что ваша конкретная система перестанет проявлять такое поведение при будущем обновлении ядра (и многие из наиболее распространенных причин этого были устранены).

Что такое kworker? kworker означает процесс ядра Linux, выполняющий "работу" (обработку системных вызовов). У вас может быть несколько из них в вашем списке процессов: kworker/0:1 это тот, который находится на вашем первом ядре процессора, kworker/1:1 тот, что на твоем втором и т.д..

Почему kworker загружает ваш процессор? Чтобы выяснить, почему kworker тратит впустую ваш процессор, вы можете создать обратные трассировки процессора: следите за загрузкой вашего процессора (с top или что-то в этом роде) и в моменты высокой нагрузки через kworker, выполнить echo l > /proc/sysrq-trigger чтобы создать обратную трассировку. (В Ubuntu для этого вам необходимо войти в систему с помощью sudo -s). Проделайте это несколько раз, затем посмотрите обратные следы в конце dmesg выход. Посмотрите, что часто происходит в обратных отслеживаниях процессора, надеюсь, это укажет вам на источник вашей проблемы.

Пример: e1000e. В моем случае я почти каждый раз находил такой обратный путь:

Call Trace: delay_tsc+0x4a/0x80 __const_udelay+0x2c/0x30 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e] e1000e_read_phy_reg_igp+0x29/0x80 [e1000e] e1000e_phy_has_link_generic+0x85/0x120 [e1000e] e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e] e1000e_has_link+0x55/0xd0 [e1000e] e1000_watchdog_task+0x5e/0x960 [e1000e]

Это намекнуло мне на проблему в e1000e Модуль карты Ethernet, и действительно, sudo rmmod e1000e заставил высокую нагрузку на процессор немедленно исчезнуть [ошибка e1000e #26].

Почему kworker загружает ваш процессор (продолжение)? В качестве альтернативы мой другой ответ здесь, Perf - это более профессиональный способ проанализировать, какие задачи ядра загружают ваш процессор:

  1. Устанавливать perf:

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic

    (Второй пакет должен соответствовать вашей версии ядра. Вы можете сначала установить просто linux-tools-common и позвонить perf чтобы позволить ему сообщить вам, какой пакет ему нужен.)

  2. Запишите около 10 секунд обратных трассировок на всех ваших процессорах:

    sudo perf record -g -a sleep 10
  3. Проанализируйте свою запись:

    sudo perf report

    (Перейдите по графику вызовов с помощью , , , и Enter.)

Просто чтобы все знали. Я столкнулся с этой проблемой, установил perf (отличный инструмент), он указал на блокировку вращения и XFS. Это указывало на NFS. Потом я понял, что одному из моих скакунов не хватает места. Освобождение места привело к тому, что процессор kworker упал до 0.

Так что, по-видимому, это может быть признаком нехватки места на диске на загруженном сервере NFS!

Недавно я установил Ubuntu Natty на внешний накопитель usb wd passport. Когда я запускаю свой рабочий стол, которому около двух лет, все работает как по маслу. Когда я запускаю свой новый ноутбук (система MSI gt680r), он замедляется после того, как я вывожу компьютер из спящего режима или подключаю другой USB-диск.

Процессы Kworker занимают все больше и больше процессора, и мышь время от времени зависает.

Я прочитал несколько решений на различных форумах, которые не сработали.

Я зашел в bios своего ноутбука, где был:

Hand XCHI OFF: EnabledEHCI Hand OFF: disabled

Я переоделся для:

Hand XCHI OFF: disabledEHCI Hand OFF: disabled

и с тех пор он больше не зависает на нетти на моем ноутбуке.

Я бы включил обратную передачу, если и когда проблема будет устранена.

Я думаю, что отключение Непомука может вам помочь:

http://www.freetechie.com/blog/disable-nepomuk-desktop-search-on-kde-4-4-2-kubuntu-lucid-10-04/

Вам не следовало принимать это последнее обновление ОС. Если вам повезет, следующий исправит это.

Этот ответ также может быть полезен для выяснения того, что делает kworker: kernel - Why is kworker consuming so many resources on Linux 3.0.0-12-server? - Unix & Linux Stack Exchange

судя по ответу afrazier, теперь я думаю, что это как-то связано с ядром (так что k в kworker означает kernel). так вот почему у вас также должен быть запущен kworker на вашем компьютере с Ubuntu.

У меня есть Dell T40, и для меня сработало следующее решение: kernel - Ubuntu 16.04 kworker using high CPU constantly - Ask Ubuntu

Странно, kworker запущен и вносит свой вклад в пробуждения на 10%, но у меня не установлены программы Kubuntu. Алос Непомук не установлен.