ฉันมีปัญหาในการตรวจสอบปริมาณงานเครือข่ายที่ต้องการบนเซิร์ฟเวอร์ที่เชื่อมต่อกับเครื่องวิเคราะห์สเปกตรัม Signal Hound ผ่านอินเทอร์เฟซเครือข่าย 10GbEโดยพื้นฐานแล้ว ฉันสามารถรับทรูพุตที่ดีได้เมื่อเฉพาะกระบวนการดักจับคลื่นวิทยุกำลังทำงานอยู่ แต่เมื่อฉันรันกระบวนการอื่น ทรูพุตเริ่มลดลง ฉันใช้อะแดปเตอร์อีเทอร์เน็ต Aquantia PCIe กับอะแดปเตอร์ QNAP SFP+ 10GbE Thunderbolt 3
เมื่อฉันเรียกใช้โปรแกรมไพธอนอย่างง่ายเพื่อสำรวจความคิดเห็นจาก API ตัววิเคราะห์สเปกตรัมในโหมดการสตรีม ทุกอย่างทำงานได้ดีที่แบนด์วิธสูงสุด (~800MB/s) เมื่อฉันทำ
$ ความเครียด --cpu 8 --io 8 --vm 8 --hdd 8
เมื่อเปรียบเทียบกัน มันลดความเร็วลงเหลือประมาณ 600MB/s และฉันเริ่มทิ้งข้อมูลจำนวนมาก
สิ่งที่ฉันได้ลอง:
- กำลังอัปเดตไดรเวอร์
- ล้อเล่นกับพารามิเตอร์การรวมตัวและตัวเลือก ethtool มากมาย (MTU ฯลฯ )
- การปิดไฮเปอร์เธรดและการแยกกระบวนการออกเป็นคอร์เดียว (8 จาก 8) ผ่านการปักหมุดความสัมพันธ์ของซีพียู
- สิ่งนี้ยังเกี่ยวข้องกับการแยกอินเตอร์รัปต์ของเครือข่ายไปยังคอร์ของตัวเอง (7 จาก 8)
- ฉันยังเปลี่ยน core Governor เป็น "ประสิทธิภาพ" ดังนั้นจึงอยู่ที่ความถี่สูงสุดเสมอ
- ฉันยังลองปิดการขัดจังหวะอื่นๆ ส่วนใหญ่สำหรับคอร์ 7 และ 8 เพื่อป้องกันไม่ให้ทำงานช้าลง ตรวจสอบโดยแดชบอร์ด netdata
- โดยทั่วไปฉันลองทุกอย่างแล้ว ที่นี่
โดยพื้นฐานแล้ว ฉันรู้ว่ามันสามารถรันแบบเรียลไทม์ได้เพราะมันทำงานได้ดีเมื่อมันถูกจำกัดไว้ที่ 2 คอร์โดยตัวมันเอง แต่ด้วยเหตุผลบางอย่าง แม้ว่าคอร์อื่นๆ จะไม่รบกวนวงจรของ CPU หรือ IRQ ของเครือข่าย แต่เมื่อคอร์ 1-6 มีภาระงานมาก พวกมันจะทำให้กระบวนการหลักช้าลงอย่างมาก
ถ้ามันช่วยฉันพบว่า --vm4
ตัวเลือกสำหรับ ความเครียด
ทำให้เกิดการชะลอตัวมากที่สุด ดังนั้นฉันจึงสงสัยว่ามีบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำและอาจเป็นอินเทอร์เฟซ DRAM ไปยังการ์ดเครือข่าย
ฉันดึงผมออกมาโดยพื้นฐานแล้วพยายามดึงทุกแพ็กเก็ตจากวิทยุบนเครื่อง Ubuntu 20.04 (ซึ่งน่าจะทรงพลังมาก) ใครบ้างมีประสบการณ์กับแอปพลิเคชันเช่นนี้?
แก้ไข: ฉันคัดลอกเส้นโค้งประสิทธิภาพบางส่วนที่นี่:
นี่คือผลที่ฉันเห็น
นี่คือการใช้งานCore 6 อยู่ที่ 100% พร้อม softirqs ทั้งในช่วงที่มีความเครียดสูงและช่วง "เพิ่งจับภาพ" ฉันได้ลองแบ่งข้อมูลเครือข่ายออกเป็นสองคอร์ (5 และ 6) แต่หนึ่งในนั้นยังคงโหลดอยู่เสมอในขณะที่อีกคอร์หนึ่งดูเหมือนชัดเจน แม้ว่าพวกมันจะมีจำนวนอินเทอร์รัปต์ที่ใกล้เคียงกันก็ตาม
จำนวนจริงของ softirqs ลดลงใน CPU 6 ในช่วงที่การทดสอบความเครียดกำลังทำงาน
นี่คือเอฟเฟกต์ที่ฉันเห็นบน CPU6 softnet
นอกจากนี้ การขัดจังหวะดูเหมือนจะค่อนข้างเหมือนเดิมแม้ว่าจะมีความสอดคล้องกันน้อยลงเล็กน้อยในช่วงที่มีความเครียดสูง
นี่คือความเร็วเครือข่ายแบบตรงและดูไม่สอดคล้องกันเล็กน้อยในทั้งสองช่วงเวลา
ฉันกำลังมองหาความผิดปกติอย่างใกล้ชิด (แม้ว่าจะมีพล็อตมากมายใน netstat) และดูเหมือนว่าไม่มีหน่วยความจำระหว่างการประมวลผลในช่วงที่มีความเครียดสูง สิ่งนี้อาจนำไปสู่ปัญหาได้หรือไม่?
ถ้าใครต้องการแปลงเพิ่มเติมแจ้งได้นะครับ ฉันไม่สามารถสรุปปัญหาจากสิ่งเหล่านี้ได้ แต่ฉันหวังว่าข้อมูลนี้จะเพียงพอสำหรับแนวทางแก้ไขที่เป็นไปได้
ขอบคุณอีกครั้ง!