Mengapa kworker mengonsumsi begitu banyak sumber daya di Linux 3.0.0-12-server?

19

Jumat lalu saya memutakhirkan server Ubuntu saya menjadi 11,10, yang sekarang berjalan dengan kernel 3.0.0-12-server. Sejak itu kinerja keseluruhan telah menurun secara dramatis. Sebelum peningkatan, beban sistem sekitar 0,3, tetapi saat ini berada pada 22-30 pada sistem CPU 8 inti dengan 16GB RAM (gratis 10GB, tanpa swap digunakan).

Saya akan menyalahkan driver sistem file BTRFS dan array MD yang mendasari, karena [md1_raid1] dan [btrfs-transacti] menghabiskan banyak sumber daya. Tetapi semua [pekerja / *: *] mengkonsumsi lebih banyak.

sar telah menghasilkan sesuatu yang mirip dengan ini sejak Jumat:

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 

Dan iostatmenegaskan tingkat penulisan yang sangat buruk:

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          

Pertanyaannya adalah: Bagaimana saya bisa melacak mengapa benang pekerja menghabiskan begitu banyak sumber daya (dan yang mana)? Atau lebih baik: Apakah ini masalah yang diketahui dengan kernel 3.0, dan dapatkah saya mengubah dengan parameter kernel?

Edit:

Saya memperbarui Kernel ke versi baru 3.1 seperti yang direkomendasikan oleh pengembang BTRFS. Tapi sayangnya ini tidak mengubah apa pun.

mailq
sumber
Lihat askubuntu.com/questions/33640/… . Saya akan menambahkan sarannya menghapus modul kernel satu per satu untuk melihat apakah itu spesifik.
Shawn J. Goff
@ ShawnJ.Goff Ini hanya solusi yang disediakan oleh coba-coba. Tapi saya ingin tahu bagaimana saya bisa mengidentifikasi pelakunya dengan beberapa alat (debugging). Ini kemudian akan membawa saya ke modul kernel yang dimaksud.
mailq
Coba boot dengan pcie_ports=compatatau pcie_ports=native. (Coba 'pribumi' terlebih dahulu. Ini lebih kecil kemungkinannya untuk memperbaiki masalah tetapi lebih kecil kemungkinannya untuk menyebabkan masalah lain.)
David Schwartz
@DavidSchwartz Tidak berubah. Ini juga akan menjadi solusi untuk menghindari masalah. Tetapi saya perlu mengidentifikasi masalah sendiri untuk kemudian menguraikan solusi. Bagaimana saya bisa mengidentifikasi penyebabnya?
mailq

Jawaban:

18

Saya menemukan utas ini di lkml yang sedikit menjawab pertanyaan Anda. (Sepertinya Linus sendiri bingung bagaimana mencari tahu asal usul utas-utas itu.)

Pada dasarnya, ada dua cara untuk melakukan ini:

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

Untuk ini, Anda perlu ftrace untuk dikompilasi di kernel Anda, dan untuk mengaktifkannya dengan:

mount -t debugfs nodev /sys/kernel/debug

Informasi lebih lanjut tentang fasilitas fungsi pelacak Linux tersedia di dokumentasi ftrace.txt .

Ini akan menampilkan semua utas yang sedang dilakukan, dan berguna untuk melacak beberapa pekerjaan kecil.

cat /proc/THE_OFFENDING_KWORKER/stack

Ini akan menampilkan tumpukan satu utas yang melakukan banyak pekerjaan. Anda dapat mengetahui apa yang menyebabkan utas khusus ini memakan CPU (misalnya). THE_OFFENDING_KWORKERadalah pid dari pekerja dalam daftar proses.

anarcat
sumber
Terima kasih. Saya harus berulang kali mengecat file tumpukan sampai cukup lama untuk memberikan beberapa info. Dalam kasus saya, saya menemukan "acpi_ds_create_operands" dan "input_polled_device_work". Tebakan beruntung membuat saya mencoba -Eopsi untuk sleepd, dan penggunaan CPU menghilang!
joeytwiddle
5

Solusinya adalah: Saya tidak tahu bagaimana menemukan penyebabnya. Sejauh ini tidak ada yang memberi tahu saya.

Tetapi berbicara dengan pengembang BTRFS mengungkapkan bug pada driver btrfs ketika menulis banyak file kecil dalam periode waktu yang sangat singkat. Ini adalah masalah pada kernel dari 3.0 hingga 3.1. Mungkin diperbaiki di 3.2.

Sementara itu saya mendapat patch untuk kernel saat ini yang menyelesaikan masalah.

mailq
sumber
2

Saya memiliki masalah serupa; melihat tumpukan thread pekerja:

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

Saya pikir itu adalah modul usb. Saya sebelumnya di komputer lain dengan senang hati rmmod'd semua usb dan [uex] modul hci menyadari bahwa saya telah mematikan keyboard (bahkan tidak ctrl-shift-sysrq-U!), Jadi saya akhirnya melakukan ini:

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 

melakukan trik:

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

Jadi tersangka utama saya adalah gadget ini: RTL8723B * WIFI + Modul Bluetooth. Saya bertanya-tanya sekarang apakah kode manajemen daya menyadari itu adalah perangkat yang sama jika mencoba untuk misalnya mematikan power adapter BT yang tidak digunakan.

konteks:

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
selamat tinggal
sumber
-2

echo N >/sys/module/drm_kms_helper/parameters/poll (dalam mode root)

Masalah dengan kartu grafis Intel

RaqUi
sumber
5
Bagaimana Anda tahu bahwa itu penyebabnya?
vonbrand