Kworker, ¿qué es y por qué está acaparando tanta CPU?

136

Recientemente actualicé a Kubuntu Natty Beta 1 y he tenido muchos problemas con el proceso kworker . Por momentos usa casi la mitad de mi CPU. Además, por extraño que parezca, afecta mis puertos USB; cada vez que conecto una unidad USB, el proceso kworker entra en hiperimpulso, dejándome incapaz de trabajar.

He pensado en la presentación de un error, pero ya no he encontrado ninguna explicación razonable de lo que kworker es que pensé que debería saber en primer lugar.

davorao
fuente
Extraño, kworker se está ejecutando y contribuyendo a los despertares en un 10%, pero no tengo instalados los programas Kubuntu. Alos Nepomuk no está instalado.
dago
1
Por la respuesta de Afrazier, creo que ahora tiene algo que ver con el núcleo (por lo que la k en kworker es para el núcleo). Es por eso que también tendrías kworker ejecutándose en tu máquina Ubuntu.
davorao
1
Esta respuesta también puede ser útil para descubrir qué está haciendo un kworker: unix.stackexchange.com/questions/22851/…
anarcat
1
No deberías haber tomado esa última actualización del sistema operativo. Si tienes suerte, el siguiente lo arreglará.
nobar

Respuestas:

109

"kworker" es un proceso de marcador de posición para subprocesos de trabajo del kernel, que realiza la mayor parte del procesamiento real del kernel, especialmente en casos donde hay interrupciones, temporizadores, E / S, etc. Estos generalmente corresponden a la gran mayoría de los asignados " sistema "tiempo para ejecutar procesos. No es algo que se pueda eliminar de forma segura del sistema de ninguna manera, y no tiene ninguna relación con nepomuk o KDE (excepto en que estos programas pueden hacer llamadas al sistema, lo que puede requerir que el núcleo haga algo).

Hubo algunos informes de actividad excesiva de kworker para sistemas relativamente inactivos que comenzaron durante el desarrollo 2.6.36 ( discusión de ejemplo ), y amplios informes de confusión y problemas con 2.6.38 (aunque muchos de estos informes incluyen la palabra "Natty", por lo que supongo estas personas no han usado ningún kernel entre 2.6.35 (distribuido en Ubuntu 10.10) y 2.6.38 (distribuido en Ubuntu 11.04).

He encontrado muchos informes de algo que "solucionó" esto para uno u otro usuario. La mayoría de las "correcciones" parecen estar relacionadas con actualizaciones del kernel de varios tipos. Cuando la actualización puede rastrearse a un problema específico, a menudo parece que hay algún controlador o servicio del núcleo que ha sido parcheado para no comportarse mal: tengo la impresión de que hay una gran cantidad de cosas en el núcleo que pueden causar un comportamiento que se observa como uso excesivo de kworker.

Si encuentra el sistema inutilizable debido a la excesiva actividad de kworker, le recomendaría que intente hacer menos cosas. Si cree que no está haciendo nada, intente cerrar los servicios o temporizadores de larga duración (lectores RSS, lectores de correo, indexadores de archivos, rastreadores de actividad, etc.). Si esto no funciona, intente reiniciar. Si su sistema le permite habilitar o deshabilitar el hardware en un entorno previo al arranque, intente apagar el hardware que no esté usando. Si sucede en cada reinicio antes de hacer algo, puede intentar desinstalar cosas, pero en este punto querrá ejecutar herramientas de creación de perfiles de syscall para rastrear aplicaciones específicas que parecen estar causando esta sobrecarga.

Es de esperar que su sistema específico deje de expresar este comportamiento con una futura actualización del kernel (y muchas de las causas más comunes de esto se han resuelto).

Emmet Hikory
fuente
1
Tuve un problema de inicio de sesión lento que creo que está relacionado con esto; Me las arreglo
Aquarius Power
1
Quizás esto sea superfluo, pero felicitaciones por una respuesta muy claramente articulada. Eso es un inglés finamente expresado, señor.
Jon Carter
81

¿Qué es kworker? kworkersignifica un proceso de kernel de Linux que hace "trabajo" (procesamiento de llamadas al sistema). Puede tener varios de ellos en su lista de procesos: kworker/0:1es el que está en su primer núcleo de CPU, kworker/1:1el que está en su segundo, etc.

¿Por qué kworker acapara tu CPU? Para descubrir por qué un kworker está desperdiciando su CPU, puede crear rastreos de CPU: observe la carga de su procesador (con topo algo) y, en momentos de alta carga kworker, ejecute echo l > /proc/sysrq-triggerpara crear un rastreo. (En Ubuntu, esto necesita que inicies sesión sudo -s). Haga esto varias veces, luego observe las trazas al final de la dmesgsalida. Vea lo que sucede con frecuencia en los rastreos de la CPU, con suerte le indicará la fuente de su problema.

Ejemplo: e1000e. En mi caso, encontré un rastreo como este casi siempre:

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]

Me dio a entender un problema en el e1000emódulo de la tarjeta Ethernet y, de hecho, sudo rmmod e1000ehizo que la alta carga de la CPU desapareciera inmediatamente [ error n. ° e1000e # 26 ].

Tanius
fuente
44
echo l > /proc/sysrq-triggerparece no funcionar en proxmox diciendo sysrq: SysRq : This sysrq operation is disabled.tristemente.
hak8or
1
sysrq necesita ser reactivado con sysctl -w kernel.sysrq = 1 ver askubuntu.com/questions/911522/…
Sebastien
¿Cómo entendió que e1000 estaba causando el problema? ¿Solo porque se mantenía repetido?
onurcanbektas
@onurcanbektas Sí, el resultado que se repite con mayor frecuencia es la causa más probable. Debido a que las trazas inversas son verificaciones puntuales con qué está ocupada la CPU mientras está acaparada.
Tanius
70

¿Por qué kworker acapara tu CPU (cont.)? Como alternativa a mi otra respuesta aquí , Perf es una forma más profesional de analizar qué tareas del núcleo están acaparando su CPU:

  1. Instalar perf:

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

    (El segundo paquete debe coincidir con la versión de su kernel. Primero puede instalar solo linux-tools-commony llamar perfpara que le indique qué paquete necesita).

  2. Registre unos 10 segundos de retrocesos en todas sus CPU:

    sudo perf record -g -a sleep 10
    
  3. Analiza tu grabación:

    sudo perf report
    

    (Navegar por el gráfico de llamadas con , , , y Enter.)

Tanius
fuente
2
En mi sistema, ejecutándome dentro de una máquina virtual VMware, usando perf, rastreé el problema hasta el sd_modmódulo del kernel. La desactivación de SCSI en el vmxarchivo impidió que el módulo se scsi0.present = "FALSE"
cargara
E: No se puede encontrar el paquete linux-tools-3.11.0-15-generic E: No se pudo encontrar ningún paquete por glob 'linux-tools-3.11.0-15-generic' E: No se pudo encontrar ningún paquete por regex 'linux-tools-3.11.0-15-generic'
Paddy
@ Paddy: Verifique la respuesta nuevamente :-) "El paquete [linux-tools - * - generic] debe coincidir con la versión de su kernel. Primero puede instalar linux-tools-common y llamar a perf para que le diga qué paquete necesidades."
Tanius
8

Solo para que todos lo sepan. Me encontré con este problema, instalé perf (que es una gran herramienta), apuntó al bloqueo de giro y XFS. Eso apuntó a NFS. Entonces me di cuenta de que una de mis monturas estaba sin espacio. Al liberar espacio, la CPU de kworker cayó a 0.

¡Así que aparentemente esto puede ser un síntoma de quedarse sin espacio en el disco en un servidor NFS ocupado!

Erik Aronesty
fuente
1
Noté que tenía un colapso de kworker cuando se estaba ejecutando un virtualbox específico. Resulta que uno estaba ejecutando un NFS con mi host para compartir archivos. Sin embargo, no estaba cerca de estar lleno. Desmontar el NFS "resolvió" el problema. Supongo que compartiré con un montaje sshfs.
Programador
4

Recientemente instalé Ubuntu Natty en una unidad externa usb wd passport. Cuando comienzo en mi escritorio, que tiene aproximadamente dos años, todo funciona a las mil maravillas. Cuando inicio en mi nueva computadora portátil (sistema MSI gt680r), se ralentiza después de que despierto la computadora de la suspensión, o si conecto otro disco usb.

Los procesos de Kworker toman más y más CPU, y el mouse se congela de vez en cuando.

He leído varias soluciones en varios foros que no funcionaron.

Entré en la BIOS de mi computadora portátil, donde había:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Cambié por:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

y desde entonces, ya no se congela en natty en mi computadora portátil.

Permitiría la devolución si y cuando se corrige el problema.

CedCannes
fuente
1
¿Alguien puede explicar por qué sucede esto? ¿Cómo se conecta XCHI?
GuySoft