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

136

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

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

davorao
источник
Странно, но kworker работает и вносит свой вклад в пробуждения на 10%, но у меня не установлены программы Kubuntu. Алос Непомук не установлен.
Даго
1
из ответа afrazier теперь я думаю, что это как-то связано с ядром (так что k в kworker для ядра). вот почему у вас также будет работать kworker на вашей машине с Ubuntu.
Даворао
1
Этот ответ также может быть полезен для выяснения того, что делает kworker
anarcat
1
Вы не должны были брать это последнее обновление ОС. Если вам повезет, следующий исправит это.
nobar

Ответы:

109

«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, средства чтения почты, индексаторы файлов, средства отслеживания активности и т. Д.). Если это не работает, попробуйте перезапустить. Если ваша система позволяет вам включать или отключать оборудование в предзагрузочной среде, попробуйте отключить оборудование, которое вы не используете. Если это происходит при каждом перезапуске, прежде чем что-то делать, вы можете попытаться что-то удалить, но на этом этапе вам понадобятся инструменты профилирования syscall для отслеживания определенных приложений, которые, по-видимому, вызывают эту перегрузку.

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

Эммет Хикори
источник
1
У меня была проблема медленного входа в систему, которая, я думаю, связана с этим; Мне удается обойти это, отложив все, что запускается таким образом: askubuntu.com/a/484856/46437
Водолей Power
1
Возможно, это излишне, но слава очень четко сформулированный ответ. Это немного хорошо выраженный английский, сэр.
Джон Картер
81

Что такое 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 ].

tanius
источник
4
echo l > /proc/sysrq-triggerкажется, не работает на Proxmox, к sysrq: SysRq : This sysrq operation is disabled.сожалению.
hak8or
1
sysrq необходимо включить с помощью sysctl -w kernel.sysrq = 1, см. askubuntu.com/questions/911522/…
Себастьен
Как вы поняли, что e1000 вызывает проблему? Просто потому, что его повторяли?
онурканбектас
@onurcanbektas Да - наиболее часто повторяемый результат - наиболее вероятная причина. Потому что обратные следы - это выборочные проверки того, чем занят процессор, пока он загружен.
Танус
70

Почему 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.)

tanius
источник
2
В моей системе, работающей внутри виртуальной машины VMware, с помощью perfя отследил проблему до sd_modмодуля ядра. Отключение SCSI в vmxфайле помешало загрузке модуля и вернуло систему к нормальной скорости:scsi0.present = "FALSE"
feklee
E: Невозможно найти пакет linux-tools-3.11.0-15-generic E: Не удалось найти пакет по glob 'linux-tools-3.11.0-15-generic' E: Не удалось найти пакет с помощью regex 'linux-tools-3.11.0-15-generic'
Пэдди,
@Paddy: Пожалуйста, проверьте ответ еще раз :-) "Пакет [linux-tools - * - generic] должен соответствовать версии вашего ядра. Сначала вы можете установить просто linux-tools-common и вызвать perf, чтобы сообщить, какой пакет нуждается «.
Танус
8

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

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

Эрик Аронесты
источник
1
Я заметил, что у меня произошел крах kworker, когда работала конкретная виртуальная коробка. Оказывается, на моем хосте была запущена NFS для обмена файлами. Однако это было далеко не полностью. Размонтирование NFS «решило» проблему. Я предполагаю, что поделюсь с sshfs mount.
Programster
4

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

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

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

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

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Я поменял на:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

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

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

CedCannes
источник
1
Кто-нибудь может объяснить, почему это происходит? Как подключен XCHI?
GuySoft
0

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

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

наполнитель
источник
спасибо, но с тех пор я установил свежую копию Kubuntu 11.04, и вышеупомянутая проблема исчезла.
Даворао
1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
fossfreedom