Saltar al contenido

¿Por qué kworker consume tantos recursos en Linux 3.0.0-12-server?

Hola usuario de nuestro sitio, tenemos la respuesta a lo que estabas buscando, desplázate y la encontrarás más abajo.

Solución:

Encontré este hilo en lkml que responde un poco a tu pregunta. (Parece que incluso el propio Linus estaba desconcertado sobre cómo averiguar el origen de esos hilos).

Básicamente, hay dos formas de hacer esto:

$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
$ cat /sys/kernel/debug/tracing/trace_pipe > out.txt
(wait a few secs)

Para esto, necesitará que ftrace esté compilado en su kernel y habilitarlo con:

mount -t debugfs nodev /sys/kernel/debug

En la documentación de ftrace.txt se encuentra disponible más información sobre las funciones de rastreo de funciones de Linux.

Esto mostrará lo que están haciendo todos los subprocesos y es útil para rastrear múltiples trabajos pequeños.

cat /proc/THE_OFFENDING_KWORKER/stack

Esto generará la pila de un solo hilo haciendo mucho trabajo. Puede permitirle averiguar qué causó que este hilo específico acaparara la CPU (por ejemplo). THE_OFFENDING_KWORKER es el pid del kworker en la lista de procesos.

La solución es: no sé cómo encontrar la causa. Nadie me lo dijo hasta ahora.

Pero hablar con los desarrolladores de BTRFS reveló un error en los controladores btrfs al escribir muchos archivos pequeños en un período de tiempo muy corto. Este es un problema en kernels desde 3.0 hasta 3.1. Tal vez se solucione en 3.2.

Mientras tanto, obtuve un parche para el kernel actual que resolvió el problema.

Tuve un problema similar; mirando la pila de hilos del kworker:

while true ; do clear ; grep -n ^ /proc/24910/stack | sort -rn | cut -d: -f 2- ; sleep 1 ; done

[] 0xffffffffffffffff
[] kthread+0x0/0xe0
[] ret_from_fork+0x42/0x70
[] kthread+0x0/0xe0
[] kthread+0xc1/0xe0
[] worker_thread+0x0/0x550
[] worker_thread+0x53/0x550
[] process_one_work+0x14b/0x420
[] rpm_idle+0x1ad/0x220
[] __rpm_callback+0x2d/0xb0
[] usb_runtime_idle+0x26/0x30 [usbcore]
[] usb_runtime_idle+0x0/0x30 [usbcore]
[] __pm_runtime_suspend+0x5c/0x90
[] __pm_runtime_idle+0x69/0x90
[] rpm_suspend+0x105/0x620
[] rpm_callback+0x1f/0x70
[] __rpm_callback+0x2d/0xb0
[] usb_runtime_suspend+0x0/0x80 [usbcore]
[] usb_runtime_suspend+0x2e/0x80 [usbcore]
[] usb_suspend_both+0xef/0x1f0 [usbcore]
[] usb_resume_interface.isra.6+0xa6/0x100 [usbcore]
[] hub_resume+0x23/0x60 [usbcore]
[] hub_activate+0xc6/0x5c0 [usbcore]
[] usb_kill_urb+0x3f/0xa0 [usbcore]
[] hub_port_status+0xd9/0x120 [usbcore]
[] __queue_work+0x12f/0x340
[] insert_work+0x46/0xb0
[] usb_control_msg+0xc4/0x110 [usbcore]
[] usb_start_wait_urb+0x9a/0x150 [usbcore]
[] update_curr+0xd7/0x120

Supuse que son los módulos usb. Anteriormente, en otra máquina había grabado alegremente todos los dispositivos USB y [uex]Los módulos hci se dan cuenta de que había apagado el teclado (¡ni siquiera ctrl-shift-sysrq-U!), así que terminé haciendo esto:

MODS="uvcvideo ohci_hcd ehci_hcd xhci_hcd ohci_pci ehci_pci xhci_pci usbcore"
( echo $MODS $MODS | xargs -n 1 rmmod -v ; sleep 3 ; echo $MODS | xargs -n 1 modprobe -v ; )

[email protected]:~# ( echo $MODS $MODS | xargs -n 1 rmmod -v ; sleep 3 ; echo $MODS | xargs -n 1 modprobe -v ; )
rmmod: ERROR: Module ohci_hcd is in use by: ohci_pci
rmmod: ERROR: Module ehci_hcd is in use by: ehci_pci
rmmod: ERROR: Module xhci_hcd is in use by: xhci_pci
rmmod: ERROR: Module uvcvideo is not currently loaded
rmmod: ERROR: Module ohci_pci is not currently loaded
rmmod: ERROR: Module ehci_pci is not currently loaded
rmmod: ERROR: Module xhci_pci is not currently loaded
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/media/usb/uvc/uvcvideo.ko 
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/usb/host/ehci-hcd.ko 
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/usb/host/ohci-hcd.ko 
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/usb/host/xhci-hcd.ko 
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/usb/host/ehci-pci.ko 
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/usb/host/ohci-pci.ko 
insmod /lib/modules/4.1.0-2-amd64/kernel/drivers/usb/host/xhci-pci.ko 

Hizo el truco:

grep -n ^ /proc/24910/stack | sort -rn | cut -d: -f 2-
[] 0xffffffffffffffff
[] kthread+0x0/0xe0
[] ret_from_fork+0x42/0x70
[] kthread+0x0/0xe0
[] kthread+0xc1/0xe0
[] worker_thread+0x0/0x550
[] worker_thread+0xcc/0x550

Entonces, mi principal sospechoso es este dispositivo: RTL8723B * Módulo WIFI + Bluetooth. Me pregunto ahora si el código de administración de energía se da cuenta de que es el mismo dispositivo si intenta, por ejemplo, apagar un adaptador BT sin usar.

contexto:

[email protected]:~# lsusb
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 002: ID 0c45:651b Microdia 
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 002: ID 0bda:b001 Realtek Semiconductor Corp. 
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 007 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

[email protected]:~# lsmod | grep usb
    btusb                  45056  0
    btbcm                  16384  1 btusb
    btintel                16384  1 btusb
    bluetooth             438272  5 bnep,btbcm,btusb,btintel
    usbcore               200704  8 btusb,uvcvideo,ohci_hcd,ohci_pci,ehci_hcd,ehci_pci,xhci_hcd,xhci_pci
    usb_common             16384  1 usbcore

[email protected]:~# lsb_release -a
    No LSB modules are available.
    Distributor ID:    Debian
    Description:    Debian GNU/Linux stable-updates (sid)
    Release:    stable-updates
    Codename:    sid

[email protected]:~# uname -a
    Linux hp 4.1.0-2-amd64 #1 SMP Debian 4.1.6-1 (2015-08-23) x86_64 GNU/Linux

[email protected]:~# dmesg | tail -n 20
    [97865.088740] usb 2-4: SerialNumber: HP Webcam
    [97865.091557] uvcvideo: Found UVC 1.00 device HP Webcam (0c45:651b)
    [97865.105948] input: HP Webcam as /devices/pci0000:00/0000:00:13.2/usb2/2-4/2-4:1.0/input/input17
    [97865.189817] usb 3-3: new full-speed USB device number 2 using ohci-pci
    [97865.350981] usb 3-3: No LPM exit latency info found, disabling LPM.
    [97865.368958] usb 3-3: New USB device found, idVendor=0bda, idProduct=b001
    [97865.368969] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [97865.368976] usb 3-3: Product: Bluetooth Radio 
    [97865.368981] usb 3-3: Manufacturer: Realtek 
    [97865.368985] usb 3-3: SerialNumber: 00e04c000001
    [97865.375859] Bluetooth: hci0: rtl: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
    [97865.375867] Bluetooth: hci0: rtl: loading rtl_bt/rtl8723b_fw.bin
    [97865.375896] usb 3-3: firmware: failed to load rtl_bt/rtl8723b_fw.bin (-2)
    [97865.375902] usb 3-3: Direct firmware load for rtl_bt/rtl8723b_fw.bin failed with error -2
    [97865.375907] Bluetooth: hci0: Failed to load rtl_bt/rtl8723b_fw.bin
    [97865.397812] Bluetooth: hci0: rtl: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
    [97865.397821] Bluetooth: hci0: rtl: loading rtl_bt/rtl8723b_fw.bin
    [97865.397850] usb 3-3: firmware: failed to load rtl_bt/rtl8723b_fw.bin (-2)
    [97865.397856] usb 3-3: Direct firmware load for rtl_bt/rtl8723b_fw.bin failed with error -2
    [97865.397861] Bluetooth: hci0: Failed to load rtl_bt/rtl8723b_fw.bin

Si te ha sido de utilidad este post, nos gustaría que lo compartas con otros programadores y nos ayudes a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *