ผมรู้สึกอูบุนตูได้รับการทำงานบิตซบเซาและจากนั้นผมไปดูกระบวนการที่ทำงานในนั้นและพบว่าหนึ่งซึ่งใช้สิ่งที่ต้องการ 50% ของ CPU ksoftirqd/0
ที่เรียกว่า
ไม่มีใครรู้ว่ากระบวนการนี้ทำอะไรทำไมมันใช้ซีพียูจำนวนมากและวิธีทำให้ซีพียูทำงานน้อยลง?
ผมรู้สึกอูบุนตูได้รับการทำงานบิตซบเซาและจากนั้นผมไปดูกระบวนการที่ทำงานในนั้นและพบว่าหนึ่งซึ่งใช้สิ่งที่ต้องการ 50% ของ CPU ksoftirqd/0
ที่เรียกว่า
ไม่มีใครรู้ว่ากระบวนการนี้ทำอะไรทำไมมันใช้ซีพียูจำนวนมากและวิธีทำให้ซีพียูทำงานน้อยลง?
คำตอบ:
คอมพิวเตอร์ของคุณสื่อสารกับอุปกรณ์ที่เชื่อมต่อผ่าน IRQ (คำขอขัดจังหวะ) เมื่ออินเทอร์รัปต์มาจากอุปกรณ์ระบบปฏิบัติการจะหยุดสิ่งที่กำลังทำอยู่และเริ่มจัดการกับอินเตอร์รัปต์นั้น
ในบางสถานการณ์ IRQs จะดำเนินการอย่างรวดเร็วซึ่งกันและกันและระบบปฏิบัติการไม่สามารถซ่อมบำรุงให้เสร็จสิ้นก่อนที่จะมาถึงอีกครั้ง สิ่งนี้อาจเกิดขึ้นได้เมื่อการ์ดเครือข่ายความเร็วสูงได้รับแพ็คเก็ตจำนวนมากในระยะเวลาอันสั้น
เนื่องจากระบบปฏิบัติการไม่สามารถจัดการ IRQs ที่พวกเขามาถึง (เพราะพวกเขามาถึงเร็วเกินไปหนึ่งหลังจากที่อื่น ๆ ) ksoftirqd
ระบบปฏิบัติการคิวพวกเขาสำหรับการประมวลผลในภายหลังโดยกระบวนการภายในพิเศษชื่อ
หากksoftirqd
ใช้เวลา CPU มากกว่าเปอร์เซ็นต์เพียงเล็กน้อยแสดงว่าเครื่องมีภาระการขัดจังหวะอย่างหนัก
จากหน้า 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
ksoftirqd เป็นเธรดเคอร์เนลต่อ cpu ที่ทำงานเมื่อเครื่องอยู่ภายใต้ภาระการขัดจังหวะแบบเบา ๆ ดังนั้นจึงไม่ได้กินซีพียูของคุณ แต่จะลดการโหลด IRQ ของคุณ