เหตุใด ksoftirqd / 0 จึงใช้ CPU ทั้งหมดของฉัน


67

ผมรู้สึกอูบุนตูได้รับการทำงานบิตซบเซาและจากนั้นผมไปดูกระบวนการที่ทำงานในนั้นและพบว่าหนึ่งซึ่งใช้สิ่งที่ต้องการ 50% ของ CPU ksoftirqd/0ที่เรียกว่า

ไม่มีใครรู้ว่ากระบวนการนี้ทำอะไรทำไมมันใช้ซีพียูจำนวนมากและวิธีทำให้ซีพียูทำงานน้อยลง?

คำตอบ:


77

คอมพิวเตอร์ของคุณสื่อสารกับอุปกรณ์ที่เชื่อมต่อผ่าน IRQ (คำขอขัดจังหวะ) เมื่ออินเทอร์รัปต์มาจากอุปกรณ์ระบบปฏิบัติการจะหยุดสิ่งที่กำลังทำอยู่และเริ่มจัดการกับอินเตอร์รัปต์นั้น

ในบางสถานการณ์ IRQs จะดำเนินการอย่างรวดเร็วซึ่งกันและกันและระบบปฏิบัติการไม่สามารถซ่อมบำรุงให้เสร็จสิ้นก่อนที่จะมาถึงอีกครั้ง สิ่งนี้อาจเกิดขึ้นได้เมื่อการ์ดเครือข่ายความเร็วสูงได้รับแพ็คเก็ตจำนวนมากในระยะเวลาอันสั้น

เนื่องจากระบบปฏิบัติการไม่สามารถจัดการ IRQs ที่พวกเขามาถึง (เพราะพวกเขามาถึงเร็วเกินไปหนึ่งหลังจากที่อื่น ๆ ) ksoftirqdระบบปฏิบัติการคิวพวกเขาสำหรับการประมวลผลในภายหลังโดยกระบวนการภายในพิเศษชื่อ

หากksoftirqdใช้เวลา CPU มากกว่าเปอร์เซ็นต์เพียงเล็กน้อยแสดงว่าเครื่องมีภาระการขัดจังหวะอย่างหนัก


22

จากหน้า man ksoftirqdเป็นเคอร์เนลต่อซีพียูที่ทำงานเมื่อเครื่องอยู่ภายใต้ภาระการขัดจังหวะแบบ soft-heavy

คุณสามารถปรับแต่งการตั้งค่าเล็กน้อยโดยการกำหนดว่าซีพียูใดจะรับการขัดจังหวะ /proc/irq/$interrupt_number/smp_affinityคุณทำเช่นนี้โดยการเปลี่ยนเนื้อหาของ คุณสามารถรับรายการการขัดจังหวะและความหมายโดยการทำ:

cat /proc/interrupts

ตัวเลขในsmp_affinityคือบิตแมปของ cpus แสดงด้วยรหัสฐานสิบหก บิตขวาสุดมีความสำคัญน้อยที่สุด ตัวอย่างเช่นระบบของฉันมี 8 คอร์ หากฉันต้องการใช้เฉพาะแกน 1, 3 และ 4 ฉันจะตั้งค่า smp_affinity เป็น1a:

cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
  0     0     0     1     1     0     1     0    = 0001 1010 = 1a (in hex)

ส่วนตัวผมตั้งค่า cpu ใด ๆ เพื่อให้สามารถรับ interrupt 29 (eth0 ในระบบ 8-core ของฉัน) ด้วย:

sudo echo ff > /proc/irq/29/smp_affinity

4

ksoftirqd เป็นเธรดเคอร์เนลต่อ cpu ที่ทำงานเมื่อเครื่องอยู่ภายใต้ภาระการขัดจังหวะแบบเบา ๆ ดังนั้นจึงไม่ได้กินซีพียูของคุณ แต่จะลดการโหลด IRQ ของคุณ


1
ฉันรู้ว่ามันเป็น askubuntu.com แต่ใน Raspberry Pi นั้นค่อนข้างตรงกันข้าม ksoftirqd กำลังกิน CPU ทั้งหมดในการโหลด IRQ แบบเข้มข้น
machineaddict

ตามที่ฉันเข้าใจมัน ksoftirqd ประมวลผล softirq ที่เลื่อนออกไป (เมื่อพวกเขาไม่สามารถประมวลผลได้เร็วพอ) เมื่อมี softirq จำนวนมากและ / หรือใช้เวลา CPU นานในการประมวลผล ksoftirqd จะใช้เวลา CPU มาก
pabouk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.