Kworker, що це таке і навіщо так багато процесора?


136

Нещодавно я перейшов на Kubuntu Natty Beta 1, і у мене виникло багато проблем з робочим процесором . На моменти він використовує майже половину мого процесора. Також, як не дивно, це здається впливає на мої порти USB; щоразу, коли я підключаю USB-накопичувач, процес kworker переходить в гіперпривід, не даючи мені можливості працювати.

Я думав над тим, як подати помилку, але оскільки я навіть не знайшов жодного розумного пояснення щодо того, що таке kworker , я зрозумів, що мені слід дізнатися спочатку.


Як не дивно, kworker працює і сприяє пробудженню на 10%, але у мене не встановлено програм Kubuntu. Не встановлено Alos Nepomuk.
даго

1
з відповіді afrazier я думаю, що це має щось спільне з ядром (тому k у kworker - для ядра). так що саме тому у вас також буде працювати kworker на вашій машині Ubuntu.
davorao

1
Ця відповідь також може бути корисною для того, щоб дізнатися, чим займається kworker: unix.stackexchange.com/questions/22851/…
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.

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

Можна сподіватися, що ваша конкретна система перестане виражати цю поведінку майбутнім оновленням ядра (і багато найпоширеніших причин цього були вирішені).


1
У мене була проблема повільного входу, яка, на мою думку, пов’язана з цим; Мені вдається подолати це, затримуючи все, що розпочато таким чином: askubuntu.com/a/484856/46437
Водолій Сила

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 bug # 26 ].


4
echo l > /proc/sysrq-triggerздається, не працює на проксімокс, кажучи sysrq: SysRq : This sysrq operation is disabled.сумно.
hak8or

1
sysrq потрібно повторно включити за допомогою sysctl -w kernel.sysrq = 1 див. askubuntu.com/questions/911522/…
Себастьян

Як ви зрозуміли, що e1000 викликає проблему? Просто тому, що це повторювалося?
onurcanbektas

@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.)


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
Я помітив, що під час роботи конкретного віртуальної скрипти у мене закінчився краєвид. Виявляється, хтось запускав NFS з моїм хостом для обміну файлами. Однак він ніде не був повним. Відключення NFS "вирішило" проблему. Я думаю, я поділюсь із монтом на sshfs.
Programster

4

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

Процеси Kworker займають все більше процесорів, а миша час від часу замерзає.

Я прочитав кілька рішень на різних форумах, які не спрацювали.

Я ввійшов до біографії свого ноутбука, де був:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Я змінив на:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

і з цього моменту він більше не замерзає на natty на моєму ноутбуці.

Я б включив руку назад, якщо і коли проблема буде усунена.


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, і раніше згадана проблема зникла.
davorao

1
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
fossfreedom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.