Score:2

วิธีตรวจสอบปริมาณงานจากอุปกรณ์เครือข่าย 10GbE บน Ubuntu 20.04 ภายใต้ภาระหนัก

ธง jp

ฉันมีปัญหาในการตรวจสอบปริมาณงานเครือข่ายที่ต้องการบนเซิร์ฟเวอร์ที่เชื่อมต่อกับเครื่องวิเคราะห์สเปกตรัม Signal Hound ผ่านอินเทอร์เฟซเครือข่าย 10GbEโดยพื้นฐานแล้ว ฉันสามารถรับทรูพุตที่ดีได้เมื่อเฉพาะกระบวนการดักจับคลื่นวิทยุกำลังทำงานอยู่ แต่เมื่อฉันรันกระบวนการอื่น ทรูพุตเริ่มลดลง ฉันใช้อะแดปเตอร์อีเทอร์เน็ต Aquantia PCIe กับอะแดปเตอร์ QNAP SFP+ 10GbE Thunderbolt 3

เมื่อฉันเรียกใช้โปรแกรมไพธอนอย่างง่ายเพื่อสำรวจความคิดเห็นจาก API ตัววิเคราะห์สเปกตรัมในโหมดการสตรีม ทุกอย่างทำงานได้ดีที่แบนด์วิธสูงสุด (~800MB/s) เมื่อฉันทำ

$ ความเครียด --cpu 8 --io 8 --vm 8 --hdd 8

เมื่อเปรียบเทียบกัน มันลดความเร็วลงเหลือประมาณ 600MB/s และฉันเริ่มทิ้งข้อมูลจำนวนมาก

สิ่งที่ฉันได้ลอง:

  1. กำลังอัปเดตไดรเวอร์
  2. ล้อเล่นกับพารามิเตอร์การรวมตัวและตัวเลือก ethtool มากมาย (MTU ฯลฯ )
  3. การปิดไฮเปอร์เธรดและการแยกกระบวนการออกเป็นคอร์เดียว (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 ในช่วงที่การทดสอบความเครียดกำลังทำงาน หมายเลข IRQ อ่อน

นี่คือเอฟเฟกต์ที่ฉันเห็นบน CPU6 softnet CPU6 ซอฟท์เน็ต

นอกจากนี้ การขัดจังหวะดูเหมือนจะค่อนข้างเหมือนเดิมแม้ว่าจะมีความสอดคล้องกันน้อยลงเล็กน้อยในช่วงที่มีความเครียดสูง ขัดจังหวะ

นี่คือความเร็วเครือข่ายแบบตรงและดูไม่สอดคล้องกันเล็กน้อยในทั้งสองช่วงเวลา ข้อมูลเครือข่าย

ฉันกำลังมองหาความผิดปกติอย่างใกล้ชิด (แม้ว่าจะมีพล็อตมากมายใน netstat) และดูเหมือนว่าไม่มีหน่วยความจำระหว่างการประมวลผลในช่วงที่มีความเครียดสูง สิ่งนี้อาจนำไปสู่ปัญหาได้หรือไม่? ป้อนคำอธิบายรูปภาพที่นี่

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

ขอบคุณอีกครั้ง!

jp flag
เบรนแดน เกร็กก์กำลังรอคุณอยู่ เริ่มต้นด้วยหน้าเว็บของเขา https://www.brendangregg.com/ เริ่มรวบรวมเมตริกประสิทธิภาพของระบบ มองหาคอขวด
Eric avatar
jp flag
ขอบคุณอเล็กซ์สำหรับคำแนะนำ! ฉันได้แก้ไขโพสต์ต้นฉบับด้วยเส้นโค้งประสิทธิภาพที่มากขึ้น เพื่อหวังว่าจะมีคนที่ฉลาดกว่าฉันสามารถช่วยฉันคิดได้ว่าเกิดอะไรขึ้น
Score:0
ธง jp

ตกลง ฉันคิดว่าฉันพบคำตอบสำหรับปัญหาของฉันแล้ว ฉันคิดว่ากราฟสำคัญที่นี่คือกราฟ "softirq" ภายใต้การทำงานปกติ ฉันไม่คิดว่ามันควรจะสูงขนาดนั้น

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

แต่นั่นไม่ใช่ทั้งหมด -- เพื่อทำความเข้าใจเรื่องนี้ ฉันใช้เวลาพอสมควรในการจัดทำโปรไฟล์เพื่อหาว่าทำไมฉันถึงเห็นผลที่ฉันเห็น (ขอบคุณ @AlexD สำหรับแหล่งข้อมูล) นี่คือกราฟเปลวไฟของ CPU 7 ที่ตรึงซึ่งกำลังเรียกใช้ไดรเวอร์ API: ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็น มันใช้เวลามากในการจัดสรรหน่วยความจำข้อบกพร่องของหน้า (ซึ่งควรเป็นเบาะแสอื่น แม้ว่าฉันจะไม่ได้โพสต์ไว้ที่นี่ นั่นอธิบายว่าทำไมต้องวิ่ง ความเครียด กับ --vm4 ให้ผลลัพธ์ที่แย่ที่สุด - มันก่อให้เกิดการแย่งชิงหน่วยความจำซึ่งทำให้ไดรเวอร์ทำงานช้าลงอย่างมาก นอกจากนี้ หลังจากทดสอบเล็กน้อย ฉันคิดว่ามันต้องการมากกว่าหนึ่งคอร์อยู่ดี (มันทิ้งแพ็กเก็ตที่ตรึงไว้ที่คอร์ 7 อย่างเดียว แต่ถูกตรึงไว้ที่ 6 และ 7) ฉันได้รับผลลัพธ์ที่ดีขึ้นหลังจากการโอเวอร์คล็อก (แต่ก็ยังไม่สมบูรณ์แบบ) และนั่นอธิบายว่าทำไม

เข้าใจแล้ว: คำอธิบายว่าทำไมทุกอย่างจึงเกิดขึ้นอย่างที่เป็นอยู่ พร้อมกราฟเพื่อสำรองข้อมูล ฉันมีการใช้งานประมาณ 60% บนสองคอร์สำหรับ API วิทยุ และค่อนข้างเสถียรในการรับแพ็กเก็ตทั้งหมด (อีกคอร์จัดการกับ softirqs ที่ประมาณ 10% ลดลงจาก 95% ที่คุณเห็นในกราฟด้านบน) ฉันรู้สึกโง่เล็กน้อยที่ไม่ได้คิดว่านักเทียบท่าทำให้ฉันช้าลง แต่ดีกว่ามากเมื่อคิดออกทั้งหมด หวังว่าโพสต์นี้จะช่วยคนอื่นได้!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา