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

Вопрос или проблема

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

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

«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, и действительно, команда 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: Включено
EHCI Hand OFF: отключено

Я изменил на:

Hand XCHI OFF: Отключено
EHCI Hand OFF: отключено

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

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

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

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

В моем случае,
команды сброса, такие как kworker/u16:3-flush-8:0, застряли на 100% процессора.
многие приложения зависали или вылетали.
sudo iotop сообщал о нулевой активности ввода-вывода.
sudo sync зависал навсегда.

Проблема была вызвана старым SSD-диском с множеством плохих секторов.
приложения пытались записывать на диск, но диск говорил нет.

Способ обхода:
удалить некоторые файлы, чтобы освободить место на диске,
чтобы диск мог повторно использовать хорошие сектора.
В моем случае снижение использования диска с 70% до 40% решило проблему.

Альтернатива:
игнорировать проблему, перезагрузить машину, рискуя потерей данных.

Ответ или решение

Что такое Kworker и почему он потребляет так много CPU?

Введение

Kworker — это ядро-процесс в операционной системе Linux, который обозначает потоки "рабочих" задач ядра. Эти потоки обрабатывают множество системных вызовов, необходимых для выполнения операций с устройствами, управления прерываниями, таймерами и другими функциями. В контексте использования Kubuntu Natty Beta 1 пользователи могут столкнуться с высокими нагрузками на CPU, связанными с kworker, что может вызывать не продуктивное поведение системы, особенно при подключении USB-устройств.

Почему Kworker потребляет так много CPU?

Основная причина высоких затрат CPU со стороны kworker заключается в его взаимодействии с драйверами устройств и другими компонентами ядра. Когда система реагирует на прерывания, связанные с оборудованием или другими событиями, задачам kworker необходимо выполнить необходимые операции. Если драйвер устройства неправильно ведет себя или вызывает слишком много прерываний, это может привести к чрезмерной загрузке CPU.

Некоторые общие причины высокой активности kworker включают:

  1. Проблемы с драйверами: Намного чаще всего виновниками являются неисправные или устаревшие драйвера устройств. Обновления ядра иногда корректируют подобные случаи, устраняя ошибки в реализации драйверов.

  2. Неисправности оборудования: Например, приемники USB могут некорректно обрабатывать прерывания, если есть аппаратные проблемы или неправильные настройки в BIOS.

  3. Отсутствие свободного дискового пространства: Как было упомянуто в описании проблемы, полные смонтированные файловые системы, например, NFS, могут приводить к высоким затратам ресурсов со стороны kworker, так как система пытается завершить операции записи, которые натыкаются на проблемы.

Способы диагностики и решения проблемы

Чтобы определить точное происхождение проблемы с kworker, рекомендуется воспользоваться следующими методами:

  1. Создание трассировки стека: В момент, когда вы наблюдаете высокую загрузку CPU со стороны kworker, выполните следующую команду для создания бэктрейса:

    echo l > /proc/sysrq-trigger

    Затем посмотрите в вывод dmesg для анализа, какие операции часто повторяются. Это может указать на источник проблемы.

  2. Использование инструмента perf: Установите perf и выполните следующие шаги:

    sudo apt-get install linux-tools-common linux-tools-$(uname -r)
    sudo perf record -g -a sleep 10
    sudo perf report

    Этот инструмент даст более глубокое понимание того, какие функции потребляют ресурсы CPU.

  3. Мониторинг использования диска: Возможно, причиной проблемы является нехватка места на диске, что также влияет на kworker. Команда iotop может помочь вам проверить активность ввода-вывода и определить, вызывает ли какое-либо приложение задержки.

  4. Обновление драйверов и ядра: Обязательно убедитесь, что все драйвера и компоненты системы обновлены до последних версий, так как это может решить множество проблем.

  5. Коррекция настроек BIOS: Корректировка параметров управления энергопотреблением, таких как EHCI Hand-off, может значительно снизить нагрузку на CPU.

Заключение

Kworker — важный процесс в системе Linux, отвечающий за выполнение задач, требующих обработки ядром. Его чрезмерная активность может быть результатом неправильного поведения драйверов, аппаратных проблем или нехватки системных ресурсов. Анализ и диагностика с использованием инструментов, таких как perf, может помочь в решении проблемы, а также в повышении стабильности и производительности вашей системы.

Оцените материал
Добавить комментарий

Капча загружается...