เหตุใด kworker จึงใช้ทรัพยากรมากมายบน Linux 3.0.0-12- เซิร์ฟเวอร์


19

เมื่อวันศุกร์ที่แล้วฉันอัพเกรดเซิร์ฟเวอร์ Ubuntu เป็น 11.10 ซึ่งตอนนี้ทำงานกับเคอร์เนล 3.0.0-12 เซิร์ฟเวอร์ ตั้งแต่นั้นมาประสิทธิภาพโดยรวมก็ลดลงอย่างมาก ก่อนที่การอัปเกรดโหลดระบบจะอยู่ที่ประมาณ 0.3 แต่ปัจจุบันอยู่ที่ 22-30 ในระบบ CPU 8 คอร์ที่มี RAM ขนาด 16GB (ฟรี 10GB ไม่มีการใช้ swap)

ฉันจะตำหนิไดรเวอร์ระบบไฟล์ BTRFS และอาร์เรย์ MD ที่อยู่ภายใต้เนื่องจาก [md1_raid1] และ [btrfs-transacti] ใช้ทรัพยากรจำนวนมาก แต่ [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 และฉันสามารถปรับแต่งมันด้วยพารามิเตอร์เคอร์เนลได้หรือไม่?

แก้ไข:

ฉันอัปเดตเคอร์เนลเป็นเวอร์ชันใหม่ 3.1 ตามที่นักพัฒนา BTRFS แนะนำ แต่น่าเสียดายที่นี่ไม่ได้เปลี่ยนแปลงอะไรเลย


ดูaskubuntu.com/questions/33640/… . ฉันจะเพิ่มคำแนะนำของเขาในการลบโมดูลเคอร์เนลทีละครั้งเพื่อดูว่ามันเป็นโมดูลที่เฉพาะเจาะจง
Shawn J. Goff

@ ShawnJ.Goff นี่เป็นเพียงวิธีแก้ปัญหาโดยการลองผิดลองถูก แต่ฉันต้องการทราบว่าฉันสามารถระบุผู้ร้ายด้วยเครื่องมือ (การดีบัก) บางอย่างได้อย่างไร นี่ควรนำฉันไปยังโมดูลเคอร์เนลที่เป็นปัญหา
mailq

ลองบูตด้วยหรือpcie_ports=compat pcie_ports=native(ลอง 'ดั้งเดิม' ก่อนมันมีโอกาสน้อยที่จะแก้ไขปัญหา แต่มีโอกาสน้อยกว่าที่จะทำให้เกิดปัญหาอื่น ๆ )
David Schwartz

@DavidSchwartz ไม่ได้เปลี่ยน นี่จะเป็นเพียงวิธีการแก้ปัญหาเพื่อหลีกเลี่ยงปัญหา แต่ฉันต้องระบุปัญหาด้วยตัวเองเพื่อที่จะอธิบายรายละเอียดเกี่ยวกับวิธีแก้ปัญหา ฉันจะระบุสาเหตุได้อย่างไร
mailq

คำตอบ:


18

ฉันพบกระทู้นี้ใน lkmlที่ตอบคำถามของคุณเล็กน้อย (ดูเหมือนว่าแม้แต่ Linus เองก็ยังงงว่าจะหาต้นกำเนิดของเธรดเหล่านั้นได้อย่างไร)

โดยทั่วไปมีสองวิธีในการทำสิ่งนี้:

$ 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

ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งอำนวยความสะดวกฟังก์ชั่นตามรอยของลินุกซ์ที่มีอยู่ในเอกสาร ftrace.txt

สิ่งนี้จะแสดงสิ่งที่เธรดกำลังทำอยู่และมีประโยชน์สำหรับการติดตามงานเล็ก ๆ หลายงาน

cat /proc/THE_OFFENDING_KWORKER/stack

สิ่งนี้จะเอาท์พุทสแต็คของเธรดเดียวที่ทำงานหนักมาก อาจช่วยให้คุณค้นหาสาเหตุที่ทำให้เธรดเฉพาะนี้ทำให้หมาด ๆ CPU (ตัวอย่าง) THE_OFFENDING_KWORKERเป็น pid ของ kworker ในรายการกระบวนการ


ขอบคุณ ฉันต้อง cat ซ้ำไฟล์สแต็กจนกว่ามันจะนานพอที่จะให้ข้อมูลบางอย่าง ในกรณีของฉันฉันพบ "acpi_ds_create_operands" และ "input_polled_device_work" การเดาที่โชคดีทำให้ฉันลองใช้-Eตัวเลือก sleepd และการใช้งาน 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 และโมดูล hci ทั้งหมด [uex] รู้ตัวว่าฉันปิดแป้นพิมพ์ (ไม่ใช่แม้แต่ 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

ดังนั้นหัวหน้าของฉันสงสัยว่าเป็น gadget นี้: RTL8723B * WIFI + โมดูลบลูทู ธ ฉันสงสัยว่าตอนนี้ถ้ารหัสการจัดการพลังงานรู้ตัวว่ามันเป็นอุปกรณ์เดียวกันถ้ามันพยายามที่จะยกตัวอย่างเช่นอะแดปเตอร์ 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 (ในโหมดรูท)

ปัญหากับกราฟิกการ์ด Intel


5
คุณรู้ได้อย่างไรว่านั่นคือสาเหตุ?
vonbrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.