Kworker neden Linux 3.0.0-12 sunucusunda çok fazla kaynak tüketiyor?


19

Geçen Cuma Ubuntu sunucumu 11.10'a yükselttim ve şimdi 3.0.0-12 sunucu çekirdeğiyle çalışıyor. O zamandan beri genel performans önemli ölçüde düştü. Yükseltmeden önce sistem yükü yaklaşık 0.3'dü, ancak şu anda 8GB'lık bir CPU sisteminde 16GB RAM (10GB boş, takas kullanılmadı).

[Md1_raid1] ve [btrfs-transacti] çok fazla kaynak tükettiği için BTRFS dosya sistemi sürücüsünü ve altta yatan MD dizisini suçlayacaktım. Fakat tüm [kworker / *: *] çok daha fazla tüketiyor.

sar Cuma gününden beri buna benzer bir şey çıktı:

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 

Ve iostatçok düşük bir yazma oranını doğrular:

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          

Soru şudur: Kworker ipliklerinin neden bu kadar çok kaynak (ve hangisi) tükettiğini nasıl izleyebilirim? Ya da daha iyisi: Bu, 3.0 çekirdeği ile ilgili bilinen bir sorun mu ve çekirdek parametreleriyle değiştirebilir miyim?

Düzenle:

Çekirdeği, BTRFS geliştiricileri tarafından önerilen yeni sürüm 3.1'e güncelledim. Ama ne yazık ki bu hiçbir şeyi değiştirmedi.


Bkz. Askubuntu.com/questions/33640/… . Belirli bir modül olup olmadığını görmek için çekirdek modüllerini teker teker kaldırma önerilerini eklerdim.
Shawn J. Goff

@ ShawnJ.Goff Bu sadece deneme yanılma ile sağlanan bir çözümdür. Ama suçluyu bazı (hata ayıklama) araçlarıyla nasıl tanımlayabileceğimi bilmek istiyorum. Bu beni söz konusu bir çekirdek modülüne yönlendirmelidir.
mailq

pcie_ports=compatVeya ile önyüklemeyi deneyin pcie_ports=native. (Önce 'yerli' deneyin. Sorunu çözme olasılığı daha düşüktür, ancak başka sorunlara neden olma olasılığı daha düşüktür.)
David Schwartz

@DavidSchwartz Değişmedi. Bu aynı zamanda sorunu önlemek için de bir çözüm olacaktır. Ama daha sonra bir çözüm üzerinde durmak için sorunu kendim tanımlamam gerekiyor. Nedeni nasıl belirleyebilirim?
mailq

Yanıtlar:


18

Sorunuza biraz cevap veren lkml'de bu konuyu buldum . (Görünüşe göre Linus'un kendisi bile bu ipliklerin kökenini nasıl bulacağına şaşkındı.)

Temel olarak, bunu yapmanın iki yolu vardır:

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

Bunun için çekirdeğinizde derlenecek ftrace'a ihtiyacınız olacak ve aşağıdakilerle etkinleştirebilirsiniz:

mount -t debugfs nodev /sys/kernel/debug

Linux'un işlev izleme özellikleri hakkında daha fazla bilgi ftrace.txt belgelerinde bulunabilir .

Bu, iş parçacıklarının ne yaptığını ortaya çıkarır ve birden çok küçük işi izlemek için yararlıdır.

cat /proc/THE_OFFENDING_KWORKER/stack

Bu, çok iş yaparak tek bir yığının yığınını çıkarır. Bu özel iş parçacığının CPU'yu tutmasına neden olan şeyi bulmanızı sağlayabilir (örneğin). THE_OFFENDING_KWORKERişlem listesindeki işçinin pididir.


Teşekkürler. Biraz bilgi sağlamak için yeterince uzun olana kadar yığın dosyasını tekrar tekrar kedi zorunda kaldı. Benim durumumda, "acpi_ds_create_operands" ve "input_polled_device_work" buldum. Şanslı bir tahmin, -Euyuma şansını denememi sağladı ve CPU kullanımı kayboldu!
joeytwiddle

5

Çözüm: Nedeni nasıl bulacağımı bilmiyorum. Kimse bana şimdiye kadar söylemedi.

Ancak BTRFS geliştiricileriyle konuşmak, çok kısa bir sürede çok sayıda küçük dosya yazarken btrfs sürücülerinde bir hata ortaya çıkardı. Bu, 3.0'dan 3.1'e kadar olan çekirdeklerde bir sorundur. Belki 3.2.

Bu arada mevcut çekirdek için sorunu çözen bir yama aldım.


2

Benzer bir sorunum vardı; işçinin iplik yığınına bakarak:

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

Bunun usb modülleri olduğunu düşündüm. Daha önce başka bir makinede tüm usb ve [uex] hci modülleri klavyeyi kapattığımı fark ettim (hatta ctrl-shift-sysrq-U!), Bu yüzden bunu yaptım:

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 

hile yaptı:

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

Şüphelim şu araç: RTL8723B * WIFI + Bluetooth Modülü. Güç yönetimi kodunun, örneğin kullanılmayan bir BT adaptörünü kapatmayı denediğinde aynı cihaz olduğunu fark edip etmediğini merak ediyorum.

bağlam:

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 (kök modunda)

Intel grafik kartı ile ilgili sorun


5
Bunun neden olduğunu nereden biliyorsun?
vonbrand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.