Linux 3.0.0-12 서버에서 kworker가 많은 리소스를 소비하는 이유는 무엇입니까?


19

지난 금요일에 우분투 서버를 11.10으로 업그레이드했는데, 이제 3.0.0-12 서버 커널에서 실행됩니다. 그 이후 전반적인 성능이 크게 떨어졌습니다. 업그레이드하기 전에 시스템로드는 약 0.3 이었지만 현재 16GB RAM (10GB 사용 가능, 스왑 사용 안 함)이있는 8 코어 CPU 시스템에서 22-30입니다.

[md1_raid1]과 [btrfs-transacti]가 많은 리소스를 소비했기 때문에 BTRFS 파일 시스템 드라이버와 기본 MD 배열을 비난했습니다. 그러나 모든 [kworker / * : *]는 훨씬 더 많이 소비합니다.

sar 금요일 이후 지속적으로 이와 비슷한 것을 출력했습니다.

11:25:01        CPU     %user     %nice   %system   %iowait    %steal     %idle 
11:35:01        all      1,55      0,00     70,98      8,99      0,00     18,48 
11:45:01        all      1,51      0,00     68,29     10,67      0,00     19,53 
11:55:01        all      1,40      0,00     65,52     13,53      0,00     19,55 
12:05:01        all      0,95      0,00     66,23     10,73      0,00     22,10 

그리고 iostat매우 느린 쓰기 속도를 확인합니다.

sda             129,26      3059,12       614,31  258226022   51855269          
sdb              98,78        24,28      3495,05    2049471  295023077          
md1             191,96       202,63       611,95   17104003   51656068          
md0               0,01         0,02         0,00       1980        109          

문제는 kworker 스레드가 많은 리소스를 소비하는 이유를 추적하는 방법은 무엇입니까? 또는 더 좋습니다 : 이것은 3.0 커널의 알려진 문제이며 커널 매개 변수로 조정할 수 있습니까?

편집하다:

BTRFS 개발자가 권장하는 커널을 최신 버전 3.1로 업데이트했습니다. 그러나 불행히도 이것은 아무것도 바뀌지 않았습니다.


askubuntu.com/questions/33640/…을 참조하십시오 . 커널 모듈을 한 번에 하나씩 제거하여 특정 모듈인지 확인하는 제안을 추가합니다.
Shawn J. Goff

@ ShawnJ.Goff 이것은 시행 착오에 의해 제공된 해결 방법 일뿐입니다. 그러나 나는 (디버깅) 도구로 범인을 식별하는 방법을 알고 싶습니다. 그러면 문제의 커널 모듈이 나타납니다.
mailq

pcie_ports=compat또는로 부팅 해보십시오 pcie_ports=native. (먼저 '네이티브'를 시도하십시오. 문제를 해결할 가능성은 적지 만 다른 문제를 일으킬 가능성은 적습니다.)
David Schwartz

@DavidSchwartz 변경되지 않았습니다. 이것은 또한 문제를 피하기위한 해결책 일뿐입니다. 그러나 문제를 스스로 식별 한 다음 솔루션을 정교화해야합니다. 원인을 어떻게 식별 할 수 있습니까?
mailq

답변:


18

귀하의 질문에 약간의 대답 을하는 lkml 에서이 스레드를 발견 했습니다 . (리누스 자신조차도 그 스레드의 기원을 찾는 방법에 대해 당황한 것 같습니다.)

기본적으로 두 가지 방법이 있습니다.

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

이를 위해서는 커널에서 ftrace 를 컴파일하고 다음과 같이 활성화해야합니다.

mount -t debugfs nodev /sys/kernel/debug

Linux의 기능 추적 기능에 대한 자세한 내용은 ftrace.txt 설명서를 참조하십시오 .

그러면 스레드가 모두 수행하는 작업이 출력되며 여러 소규모 작업을 추적하는 데 유용합니다.

cat /proc/THE_OFFENDING_KWORKER/stack

이것은 많은 작업을 수행하는 단일 스레드의 스택을 출력합니다. 이 특정 스레드가 CPU를 예고하게 한 원인을 찾을 수 있습니다. THE_OFFENDING_KWORKER프로세스 목록에서 kworker의 pid입니다.


감사. 정보를 제공하기에 충분히 길어질 때까지 스택 파일을 반복해서 정리해야했습니다. 필자의 경우 "acpi_ds_create_operands"및 "input_polled_device_work"를 찾았습니다. 운이 좋은 추측으로 -E잠자기 옵션을 사용해 보았고 CPU 사용량이 사라졌습니다!
joeytwiddle

5

해결책은 : 원인을 찾는 방법을 모르겠습니다. 지금까지 아무도 말하지 않았습니다.

그러나 BTRFS 개발자와의 대화를 통해 짧은 시간에 많은 작은 파일을 작성할 때 btrfs 드라이버의 버그가 드러났습니다. 이것은 3.0에서 3.1까지의 커널에서 발생하는 문제입니다. 어쩌면 3.2에서 고정 될 수 있습니다.

그동안 문제를 해결 한 현재 커널에 대한 패치를 받았습니다.


2

비슷한 문제가있었습니다. kworker의 스레드 스택을 보면 :

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

[<ffffffffffffffff>] 0xffffffffffffffff
[<ffffffff810908f0>] kthread+0x0/0xe0
[<ffffffff81576432>] ret_from_fork+0x42/0x70
[<ffffffff810908f0>] kthread+0x0/0xe0
[<ffffffff810909b1>] kthread+0xc1/0xe0
[<ffffffff8108b520>] worker_thread+0x0/0x550
[<ffffffff8108b573>] worker_thread+0x53/0x550
[<ffffffff8108aa4b>] process_one_work+0x14b/0x420
[<ffffffff81405a3d>] rpm_idle+0x1ad/0x220
[<ffffffff8140509d>] __rpm_callback+0x2d/0xb0
[<ffffffffa01aef16>] usb_runtime_idle+0x26/0x30 [usbcore]
[<ffffffffa01aeef0>] usb_runtime_idle+0x0/0x30 [usbcore]
[<ffffffff8140686c>] __pm_runtime_suspend+0x5c/0x90
[<ffffffff81405b19>] __pm_runtime_idle+0x69/0x90
[<ffffffff81405295>] rpm_suspend+0x105/0x620
[<ffffffff8140513f>] rpm_callback+0x1f/0x70
[<ffffffff8140509d>] __rpm_callback+0x2d/0xb0
[<ffffffffa01aee50>] usb_runtime_suspend+0x0/0x80 [usbcore]
[<ffffffffa01aee7e>] usb_runtime_suspend+0x2e/0x80 [usbcore]
[<ffffffffa01adc4f>] usb_suspend_both+0xef/0x1f0 [usbcore]
[<ffffffffa01adb06>] usb_resume_interface.isra.6+0xa6/0x100 [usbcore]
[<ffffffffa01a0c63>] hub_resume+0x23/0x60 [usbcore]
[<ffffffffa01a0636>] hub_activate+0xc6/0x5c0 [usbcore]
[<ffffffffa01a9d3f>] usb_kill_urb+0x3f/0xa0 [usbcore]
[<ffffffffa019d249>] hub_port_status+0xd9/0x120 [usbcore]
[<ffffffff81088a4f>] __queue_work+0x12f/0x340
[<ffffffff810888b6>] insert_work+0x46/0xb0
[<ffffffffa01aa6d4>] usb_control_msg+0xc4/0x110 [usbcore]
[<ffffffffa01aa55a>] usb_start_wait_urb+0x9a/0x150 [usbcore]
[<ffffffff810a36f7>] update_curr+0xd7/0x120

나는 그것이 USB 모듈이라고 생각했다. 나는 이전에 다른 컴퓨터에서 모든 USB를 엉뚱하게 rmmod'd했고, USB 모듈은 키보드를 껐다는 것을 알았습니다 (ctrl-shift-sysrq-U조차도 아닙니다!).

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 ; )

root@hp:~# ( 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 

트릭을했다 :

grep -n ^ /proc/24910/stack | sort -rn | cut -d: -f 2-
[<ffffffffffffffff>] 0xffffffffffffffff
[<ffffffff810908f0>] kthread+0x0/0xe0
[<ffffffff81576432>] ret_from_fork+0x42/0x70
[<ffffffff810908f0>] kthread+0x0/0xe0
[<ffffffff810909b1>] kthread+0xc1/0xe0
[<ffffffff8108b520>] worker_thread+0x0/0x550
[<ffffffff8108b5ec>] worker_thread+0xcc/0x550

RTL8723B * WIFI + Bluetooth Module이라는 가제트입니다. 전원 관리 코드가 사용하지 않는 BT 어댑터의 전원을 끄려고 할 때 동일한 장치임을 인식하고 있는지 궁금합니다.

문맥:

root@hp:~# 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

root@hp:~# 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

root@hp:~# lsb_release -a
    No LSB modules are available.
    Distributor ID:    Debian
    Description:    Debian GNU/Linux stable-updates (sid)
    Release:    stable-updates
    Codename:    sid

root@hp:~# uname -a
    Linux hp 4.1.0-2-amd64 #1 SMP Debian 4.1.6-1 (2015-08-23) x86_64 GNU/Linux

root@hp:~# 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

-2

echo N >/sys/module/drm_kms_helper/parameters/poll (루트 모드에서)

인텔 그래픽 카드 문제


5
그게 원인이라는 것을 어떻게 알 수 있습니까?
vonbrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.