Kworker มันคืออะไรและทำไมมันถึงใช้งาน CPU มาก?


136

ฉันเพิ่งอัพเกรดเป็น Kubuntu Natty Beta 1 และผมได้รับมีปัญหามากกับกระบวนการkworker ในขณะนั้นมันใช้ซีพียูของฉันเกือบครึ่ง นอกจากนี้ยังมีผลกระทบต่อพอร์ต USB ของฉันอย่างน่าประหลาดใจ เมื่อใดก็ตามที่ผมเสียบในไดรฟ์ USB กระบวนการkworkerจะเข้าสู่ hyperdrive ทิ้งฉันไม่สามารถทำงานได้

ฉันคิดเกี่ยวกับการบันทึกข้อผิดพลาด แต่เนื่องจากฉันยังไม่พบคำอธิบายที่สมเหตุสมผลเกี่ยวกับสิ่งที่ฉันคิดว่านักทำkworkerฉันควรหาก่อน


แปลก kworker กำลังทำงานและมีส่วนร่วมในการปลุก 10% แต่ฉันไม่ได้ติดตั้งโปรแกรม Kubuntu ไม่ได้ติดตั้ง Alos Nepomuk
dago

1
จากการตอบสนองของ afrazier ฉันคิดว่าตอนนี้มันมีบางอย่างเกี่ยวกับเคอร์เนล (ดังนั้น k ใน kworker สำหรับเคอร์เนล) นั่นคือเหตุผลที่คุณจะต้องให้นักวิ่งทำงานบนเครื่อง Ubuntu ของคุณด้วย
davorao

1
คำตอบนี้อาจเป็นประโยชน์สำหรับการค้นหาสิ่งที่ kworker ทำ: unix.stackexchange.com/questions/22851/…
anarcat

1
คุณไม่ควรดำเนินการอัปเดตระบบปฏิบัติการล่าสุด หากคุณโชคดีคนต่อไปจะแก้ไข
ดี

คำตอบ:


109

"kworker" เป็นตัวยึดตำแหน่งสำหรับเคอร์เนลเธรดผู้ปฏิบัติงานซึ่งดำเนินการประมวลผลที่แท้จริงสำหรับเคอร์เนลโดยเฉพาะอย่างยิ่งในกรณีที่มีการขัดจังหวะตัวจับเวลา I / O ฯลฯ โดยทั่วไปจะสอดคล้องกับการจัดสรรส่วนใหญ่ " ระบบ "เวลาในการดำเนินกระบวนการ ไม่ใช่สิ่งที่สามารถลบออกได้อย่างปลอดภัยจากระบบในทางใดทางหนึ่งและไม่เกี่ยวข้องกับ nepomuk หรือ KDE อย่างสมบูรณ์ (ยกเว้นว่าโปรแกรมเหล่านี้อาจทำการเรียกระบบซึ่งอาจทำให้เคอร์เนลต้องทำอะไรบางอย่าง)

มีรายงานกิจกรรม kworker มากเกินไปสำหรับระบบที่ไม่มีการใช้งานเริ่มต้นในระหว่างการพัฒนา 2.6.36 ( ตัวอย่างการสนทนา ) และรายงานที่กว้างของความสับสนและปัญหาเกี่ยวกับ 2.6.38 (แม้ว่ารายงานเหล่านี้จำนวนมากจะรวมคำว่า "Natty" ไว้ด้วย บุคคลเหล่านี้ไม่ควรใช้เคอร์เนลระหว่าง 2.6.35 (เผยแพร่ใน Ubuntu 10.10) และ 2.6.38 (กระจายใน Ubuntu 11.04)

ฉันพบรายงานหลายอย่างของสิ่งที่ "แก้ไข" นี้สำหรับผู้ใช้รายหนึ่งหรือผู้อื่น ดูเหมือนว่า "การแก้ไข" ส่วนใหญ่จะเกี่ยวข้องกับการอัพเดตของเคอร์เนลหลายประเภท ที่สามารถติดตามการอัปเดตไปยังปัญหาที่เฉพาะเจาะจงได้ดูเหมือนว่ามักจะเป็นบริการไดรเวอร์หรือเคอร์เนลที่ได้รับการแก้ไขไม่ให้ทำงานผิดปกติ: ฉันรู้สึกว่ามีจำนวนมากในเคอร์เนลที่อาจทำให้เกิดพฤติกรรม ซึ่งถูกมองว่าเป็นการใช้งานช่างที่มากเกินไป

หากคุณพบว่าระบบใช้งานไม่ได้เนื่องจากมีกิจกรรมเวิร์คเคอเรเตอร์มากเกินไปฉันขอแนะนำให้พยายามทำสิ่งต่างๆให้น้อยลง หากคุณคิดว่าคุณไม่ได้ทำอะไรเลยลองปิดบริการหรือตัวจับเวลาที่ใช้งานมานาน (โปรแกรมอ่าน RSS ตัวอ่านจดหมายตัวอ่านดัชนีไฟล์ตัวติดตามกิจกรรม ฯลฯ ) หากวิธีนี้ใช้ไม่ได้ผลให้ลองรีสตาร์ท หากระบบของคุณอนุญาตให้คุณเปิดใช้งานหรือปิดใช้งานฮาร์ดแวร์ในสภาพแวดล้อมก่อนบูตให้ลองปิดฮาร์ดแวร์ที่คุณไม่ได้ใช้ หากเกิดขึ้นในการรีสตาร์ททุกครั้งก่อนที่คุณจะทำอะไรคุณสามารถลองถอนการติดตั้งสิ่งต่าง ๆ ได้ แต่ ณ จุดนี้คุณจะต้องเรียกใช้เครื่องมือทำโปรไฟล์ syscall เพื่อติดตามแอปพลิเคชันเฉพาะที่ดูเหมือนจะทำให้เกิดโอเวอร์โหลดนี้

หวังว่าระบบเฉพาะของคุณจะหยุดแสดงพฤติกรรมนี้ด้วยการอัพเกรดเคอร์เนลในอนาคต (และสาเหตุที่พบบ่อยที่สุดของปัญหานี้ได้รับการแก้ไข)


1
ฉันมีปัญหาการเข้าสู่ระบบช้าซึ่งฉันคิดว่าเกี่ยวข้องกับสิ่งนี้ ฉันจัดการเพื่อหลีกเลี่ยงปัญหาโดยการหน่วงเวลาทั้งหมดที่เริ่มต้นด้วยวิธีนี้: askubuntu.com/a/484856/46437
Aquarius Power

1
บางทีนี่อาจจะฟุ่มเฟือย แต่ความรุ่งโรจน์ในการตอบสนองที่ชัดเจนมาก นั่นเป็นภาษาอังกฤษที่แสดงออกอย่างละเอียด
Jon Carter

81

kworker คืออะไร kworkerหมายถึงกระบวนการเคอร์เนลของ Linux ที่ทำงาน "(การเรียกใช้ระบบ) คุณสามารถมีได้หลายรายการในรายการกระบวนการของคุณ: kworker/0:1เป็นรายการที่อยู่บนคอร์ซีพียูตัวแรกของคุณ, kworker/1:1รายการที่อยู่ในลำดับที่สองเป็นต้น

ทำไมคนงานถึงต้องทำงานกับซีพียูของคุณ? ในการค้นหาสาเหตุที่ kworker กำลังสูญเสียซีพียูของคุณคุณสามารถสร้าง CPU backtraces: ดูตัวประมวลผลที่โหลด (ด้วยtopหรือบางอย่าง) และในช่วงเวลาที่โหลดสูงผ่านkworkerดำเนินการecho l > /proc/sysrq-triggerเพื่อสร้าง backtrace (บน Ubuntu คุณต้องลงชื่อเข้าใช้ด้วยsudo -s) ทำสิ่งนี้หลายครั้งแล้วดู backtraces ที่ส่วนท้ายของdmesgเอาต์พุต ดูว่าเกิดอะไรขึ้นบ่อยครั้งใน CPU backtraces หวังว่าจะนำคุณไปยังแหล่งที่มาของปัญหาของคุณ

ตัวอย่าง: e1000e ในกรณีของฉันฉันพบ backtrace เช่นนี้เกือบทุกครั้ง:

Call Trace:
 delay_tsc+0x4a/0x80
 __const_udelay+0x2c/0x30
 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e]
 e1000e_read_phy_reg_igp+0x29/0x80 [e1000e]
 e1000e_phy_has_link_generic+0x85/0x120 [e1000e]
 e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e]
 e1000e_has_link+0x55/0xd0 [e1000e]
 e1000_watchdog_task+0x5e/0x960 [e1000e]

มันบอกให้ฉันรู้ถึงปัญหาในe1000eโมดูลการ์ดอีเธอร์เน็ตและแน่นอนว่าsudo rmmod e1000eการโหลดซีพียูระดับสูงจะหายไปทันที [ e1000e ข้อผิดพลาด # 26 ]


4
echo l > /proc/sysrq-triggerดูเหมือนว่าจะไม่ทำงานในเดือนหน้าพูดsysrq: SysRq : This sysrq operation is disabled.เศร้า ๆ
hak8 หรือ

1
sysrq ต้องถูกเปิดใช้งานใหม่ด้วย sysctl -w kernel.sysrq = 1 ดูaskubuntu.com/questions/911522//
เซบาสเตียน

คุณเข้าใจ e1000 ว่าเป็นสาเหตุของปัญหาได้อย่างไร เพียงเพราะมันถูกเก็บซ้ำ?
onurcanbektas

@onurcanbektas ใช่ - ผลลัพธ์ที่เกิดซ้ำบ่อยที่สุดคือสาเหตุที่เป็นไปได้มากที่สุด เนื่องจาก backtraces เป็นจุดตรวจสอบสิ่งที่ CPU ไม่ว่างขณะที่ hogged
tanius

70

ทำไม kworker ถึงทำให้ซีพียูของคุณ (ต่อ) เพื่อเป็นทางเลือกแทนคำตอบอื่น ๆ ของฉันที่นี่ Perf เป็นวิธีที่เป็นมืออาชีพมากขึ้นในการวิเคราะห์ว่างานเคอร์เนลกำลังยุ่งกับซีพียูของคุณอย่างไร:

  1. ติดตั้งperf:

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic
    

    (แพคเกจที่สองจะต้องตรงกับรุ่นเคอร์เนลของคุณคุณสามารถติดตั้งเพียงครั้งแรกlinux-tools-commonและโทรperfเพื่อให้มันบอกแพคเกจที่คุณต้องการ)

  2. บันทึก backtraces บาง 10 วินาทีบน CPU ทั้งหมดของคุณ:

    sudo perf record -g -a sleep 10
    
  3. วิเคราะห์การบันทึกของคุณ:

    sudo perf report
    

    (นำทางกราฟสายด้วย, , , และEnter.)


2
ในระบบของฉันทำงานในเครื่องเสมือน VMware โดยใช้perfฉันตรวจสอบปัญหาลงในsd_modโมดูลเคอร์เนล การปิดใช้งาน SCSI ในvmxไฟล์ทำให้โมดูลไม่สามารถโหลดและทำให้ระบบกลับสู่ความเร็วปกติ:scsi0.present = "FALSE"
feklee

E: ไม่สามารถหาแพ็คเกจ linux-tools-3.11.0-15-generic E: ไม่พบแพ็คเกจใด ๆ โดย glob 'linux-tools-3.11.0-15-generic' E: ไม่พบแพ็คเกจใด ๆ โดย regex 'linux-tools-3.11.0-15-generic'
Paddy

@Paddy: โปรดตรวจสอบคำตอบอีกครั้ง :-) "แพคเกจ [linux-tools - * - generic] จะต้องตรงกับรุ่นเคอร์เนลของคุณก่อนอื่นคุณสามารถติดตั้งเพียง linux-tools-common และโทร perf เพื่อบอกให้คุณทราบว่ามันแพ็คเกจไหน ความต้องการ."
tanius

8

เพียงเพื่อให้ทุกคนรู้ ฉันพบปัญหานี้ติดตั้ง perf (ซึ่งเป็นเครื่องมือที่ยอดเยี่ยม) มันชี้ไปที่การล็อคแบบหมุนและ XFS ชี้ไปที่ NFS จากนั้นฉันก็รู้ว่าหนึ่งในภูเขาของฉันไม่ว่าง การเพิ่มพื้นที่ว่างทำให้ kworker CPU ลดลงเหลือ 0

เห็นได้ชัดว่านี่อาจเป็นอาการของพื้นที่ว่างบนเซิร์ฟเวอร์ NFS ที่ไม่ว่าง!


1
ฉันสังเกตว่าฉันมีนักหลอมละลายที่ทำงานหนักเมื่อ virtualbox ที่เฉพาะเจาะจงกำลังทำงานอยู่ ปรากฎว่ามีคนกำลังเรียกใช้ NFS กับโฮสต์ของฉันสำหรับการแชร์ไฟล์ อย่างไรก็ตามมันไม่มีที่ไหนใกล้เต็ม การถอนการติดตั้ง NFS "แก้ไข" ปัญหา ฉันเดาว่าฉันจะแบ่งปันกับเมานท์ sshfs
โปรแกรม

4

ฉันเพิ่งติดตั้ง Ubuntu Natty บนไดรฟ์ภายนอกพาสปอร์ต WD เมื่อฉันเริ่มบนเดสก์ท็อปของฉันซึ่งมีอายุประมาณสองปีทุกอย่างใช้งานได้อย่างมีเสน่ห์ เมื่อฉันเริ่มแล็ปท็อปเครื่องใหม่ (ระบบ MSI gt680r) ของฉันมันจะช้าลงหลังจากฉันตื่นคอมพิวเตอร์จากโหมดสลีปหรือถ้าฉันเสียบดิสก์ usb อื่น

กระบวนการ Kworker ใช้ cpu มากขึ้นเรื่อย ๆ และเมาส์ค้างเป็นครั้งคราว

ฉันได้อ่านวิธีแก้ไขปัญหาต่าง ๆ ในฟอรัมต่าง ๆ ที่ใช้ไม่ได้

ฉันไปที่ไบออสของแล็ปท็อปซึ่งมี:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

ฉันเปลี่ยนเป็น:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

และตั้งแต่นั้นมันจะไม่หยุดอีกต่อไปใน natty บนแล็ปท็อปของฉัน

ฉันจะเปิดใช้งานมือกลับถ้าและเมื่อปัญหาได้รับการแก้ไข


1
ใครสามารถอธิบายได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น XCHI เชื่อมต่อกันอย่างไร?
GuySoft

0

ฉันคิดว่าการปิดใช้งาน Nepomuk สามารถช่วยคุณได้:

http://www.freetechie.com/blog/disable-nepomuk-desktop-search-on-kde-4-4-2-kubuntu-lucid-10-04/


ขอบคุณ แต่ตั้งแต่ฉันติดตั้ง Kubuntu 11.04 ใหม่ไปและปัญหาที่กล่าวถึงก่อนหน้านี้ได้หายไป
davorao

1
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนที่สำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
fossfreedom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.