लिनक्स 3.0.0-12-सर्वर पर केर्कर इतने सारे संसाधनों का उपभोग क्यों कर रहा है?


19

पिछले शुक्रवार को मैंने अपने उबंटू सर्वर को 11.10 पर अपग्रेड किया था, जो अब 3.0.0-12-सर्वर कर्नेल के साथ चलता है। तब से समग्र प्रदर्शन नाटकीय रूप से गिरा है। नवीनीकरण से पहले सिस्टम लोड लगभग 0.3 था, लेकिन वर्तमान में यह 8 कोर सीपीयू सिस्टम पर 16GB रैम (10GB मुफ्त, कोई स्वैप उपयोग नहीं) के साथ 22-30 पर है।

मैं BTRFS फाइल सिस्टम ड्राइवर और अंडरलेइंग एमडी सरणी को दोष देने वाला था, क्योंकि [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          

सवाल यह है: मैं कैसे ट्रैक कर सकता हूं कि क्यों काम करने वाले धागे इतने सारे संसाधनों (और कौन सा) का उपभोग करते हैं? या बेहतर: क्या यह 3.0 कर्नेल के साथ एक ज्ञात मुद्दा है, और क्या मैं इसे कर्नेल मापदंडों के साथ जोड़ सकता हूं?

संपादित करें:

मैंने BTRFS डेवलपर्स द्वारा सुझाए गए अनुसार कर्नेल को बिल्कुल नए संस्करण 3.1 में अपडेट किया। लेकिन दुर्भाग्य से यह कुछ भी नहीं बदला।


Askubuntu.com/questions/33640/… देखें । मैं एक बार में यह देखने के लिए कि कर्नेल मॉड्यूल को हटा रहा हूं, यह देखने के लिए उनके सुझावों को जोड़ूंगा कि क्या यह विशिष्ट है।
शॉन जे। गोफ

@ ShawnJ.Goff यह केवल परीक्षण और त्रुटि द्वारा प्रदान किया गया एक समाधान है। लेकिन मैं जानना चाहता हूं कि मैं अपराधी को कुछ (डीबगिंग) टूल से कैसे पहचान सकता हूं। इसके बाद मुझे प्रश्न में कर्नेल मॉड्यूल की ओर ले जाना चाहिए।
मेल्क १11

के साथ बूटिंग का प्रयास करें pcie_ports=compatया pcie_ports=native। (पहले 'मूल' का प्रयास करें। यह समस्या को ठीक करने की संभावना कम है लेकिन अन्य समस्याओं का कारण बनने की संभावना कम है।)
डेविड श्वार्ट्ज

@DavidSchwartz नहीं बदला। यह भी समस्या से बचने का सिर्फ एक समाधान होगा। लेकिन मुझे समस्या को स्वयं पहचानने की जरूरत है फिर एक समाधान पर विस्तृत करना होगा। मैं कारण की पहचान कैसे कर सकता हूं?
मेलक

जवाबों:


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

यह बहुत सारे काम करने वाले एक ही धागे के ढेर का उत्पादन करेगा। यह आपको यह पता लगाने की अनुमति दे सकता है कि सीपीयू को हॉग करने के लिए इस विशिष्ट धागे का क्या कारण है (उदाहरण के लिए)। THE_OFFENDING_KWORKERप्रक्रिया सूची में kworker की पिड है।


धन्यवाद। मुझे बार-बार स्टैक फ़ाइल को बिल्ली करना पड़ता था जब तक कि कुछ जानकारी प्रदान करने के लिए पर्याप्त समय नहीं मिला। मेरे मामले में, मुझे "acpi_ds_create_operands" और "input_polled_device_work" मिला। एक भाग्यशाली अनुमान ने मुझे -Eसोने का विकल्प देने की कोशिश की , और सीपीयू का उपयोग गायब हो गया!
joeytwield

5

समाधान है: मुझे नहीं पता कि कारण कैसे खोजना है। अब तक मुझे किसी ने नहीं बताया।

लेकिन BTRFS डेवलपर्स के साथ बात करने से btrfs ड्राइवरों में एक बग का पता चला जब बहुत कम समय में कई छोटी फाइलें लिखीं। यह 3.1 से 3.1 तक गुठली पर एक मुद्दा है। शायद यह 3.2 में तय हो जाए।

इस बीच मुझे वर्तमान कर्नेल के लिए एक पैच मिला जिसने समस्या को हल किया।


2

मेरा मुद्दा भी ऐसा ही था; केवर्कर्स थ्रेड स्टैक को देखते हुए:

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

मुझे लगा कि यह यूएसबी मॉड्यूल है। मैंने पहले एक और मशीन पर blithely rmmod'd सब usb और [uex] hci मॉड्यूल को महसूस किया था कि मुझे कीबोर्ड बंद हो गया था (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 * वाईफ़ाई + ब्लूटूथ मॉड्यूल। मुझे अब आश्चर्य हो रहा है कि अगर पावर-मैनेजमेंट कोड को यह पता चलता है कि यह एक ही डिवाइस है, अगर यह किसी अप्रयुक्त बीटी एडाप्टर को पावरडाउन करने की कोशिश करता है।

संदर्भ:

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
आप कैसे जानते हैं कि इसका कारण क्या है?
वॉनब्रांड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.