Score:2

จะจำลองสิ่งที่เกิดขึ้นภายในแพ็กเก็ตบัฟเฟอร์ของสวิตช์อย่างง่ายได้อย่างไร

ธง ro

ฉันกำลังแก้ไขกรณีของแพ็กเก็ต UDP ที่หายไปในสวิตช์กิกะบิตแบบ store-and-forward และฉันต้องการเห็นภาพว่าเกิดอะไรขึ้นภายในสวิตช์เพื่อทำความเข้าใจสาระสำคัญของปัญหาให้ดียิ่งขึ้น

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

ปัญหาคือ: จากการคำนวณง่ายๆ ของฉัน บัฟเฟอร์ควรมีขนาดใหญ่พอที่จะรองรับกรณีที่ฉันกำลังตรวจสอบ สตรีมข้อมูลหนึ่งส่งชุดข้อมูลขนาด 25 kB (แบ่งเป็น 1514 B แพ็กเก็ต) ทุก ๆ 1.56 มิลลิวินาที ส่วนอีกชุดหนึ่งส่งชุดข้อมูลขนาด 60 kB ทุก ๆ 1 มิลลิวินาที ตอนนี้แม้แต่สวิตช์โซโหอย่าง Netgear GS105E ก็มีบัฟเฟอร์ขนาด 128 kB ดังนั้น คณิตศาสตร์อย่างง่าย (25+60 < 128) จึงบอกว่าควรใช้งานได้แม้ว่าสตรีมจะเข้ามาพร้อมกัน (เนื่องจากไม่มีการรับส่งข้อมูลอื่นที่สำคัญ)

การทดสอบจริงแสดงให้เห็นว่าแพ็กเก็ตจำนวนมากจากสตรีมทั้งสองหายไปในสวิตช์บางตัว (ดูเหมือนว่าจะถูกผูกไว้กับขนาดบัฟเฟอร์ แต่ไม่ใช่เฉพาะกับมัน) ในการจำลองของฉัน ฉันไม่สามารถทำให้บัฟเฟอร์เติมเกินเมื่อตั้งค่าเป็น 128 kB

ฉันบันทึกภาพเคลื่อนไหวนี้สำหรับบัฟเฟอร์ขนาด 24 kB ซึ่งมีการเติมข้อมูลมากเกินไป อย่างไรก็ตาม คุณจะเห็นได้ง่ายๆ ว่าการเพิ่มบัฟเฟอร์เพียงไม่กี่ไบต์จะช่วยแก้ปัญหาได้ และแพ็กเก็ตทั้งหมดจะผ่านไป

ฉันได้ทำให้ง่ายขึ้นเล็กน้อยในการจำลองนี้ แพ็กเก็ตทั้งหมดมี QoS เหมือนกัน (ซึ่งเป็นกรณีจริงด้วย) ดังนั้นฉันจึงละทิ้งคิว QoS จากการจำลองและถือว่าการรับส่งข้อมูลทั้งหมดมีความสำคัญเท่าเทียมกัน ต่อไป ฉันละทิ้งการจัดการหน่วยความจำของบัฟเฟอร์ ฉันสามารถจินตนาการได้ว่ามันเป็นส่วนสำคัญของปัญหา แต่ฉันจะแปลกใจถ้าการลดความซับซ้อนด้วยการจัดสรรที่สมบูรณ์แบบของฉันจะผิดมากกว่า 10% จากกรณีจริง ฉันยังแสร้งทำเป็นว่าสวิตช์รู้ความยาวของเฟรมเมื่อได้รับไบต์แรก เพื่อที่จะสำรองหน่วยความจำที่จำเป็นทั้งหมดในตอนเริ่มต้น เนื่องจากฉันไม่พบเอกสารใดๆ เกี่ยวกับขนาดของคิวขาเข้า/ขาออกของพอร์ต ฉันถือว่าพวกเขาทั้งหมดถูกวางไว้ในบัฟเฟอร์แพ็กเก็ตที่ใช้ร่วมกัน และพวกเขาสามารถใช้ส่วนใหญ่ของบัฟเฟอร์ได้ตามต้องการ (แม้ว่าฉันคิดว่าผู้ร้ายอาจเป็น ที่ไหนสักแห่งที่นี่)ฉันได้ตั้งค่าความล่าช้าในการประมวลผลของแต่ละแพ็กเก็ตเป็น 512 ns (ความล่าช้าในการแพร่กระจายของแพ็กเก็ต 64 B)

ฉันไม่แน่ใจว่ามันมีบทบาทหรือไม่ แต่สตรีมประกอบด้วยแพ็กเก็ต UDP ที่แยกส่วน (เช่น 25 kB ระเบิดเป็นแพ็กเก็ต UDP เดียวที่แยกส่วนเป็น 17 IP แฟรกเมนต์) สตรีมที่สองสร้างการระเบิดเป็นแพ็กเก็ต UDP ขนาด 20 kB 2 หรือ 3 แพ็กเก็ต โดยแต่ละแพ็กเก็ตแบ่งเป็น 14 IP แฟรกเมนต์

คำสั่ง Iperf 3.7 ในการทำซ้ำสตรีมให้คล้ายกับของจริงคือ:

iperf3 -c sink -u -b 128M -t 600 -l 25256 --pacing-timer 1560
iperf3 -c sink -u -b 400M -t 600 -l 20k --pacing-timer 1,000

คุณมีความคิดอื่นใดที่ฉันลืมคำนึงถึงซึ่งอาจทำให้การจำลองห่างไกลจากความเป็นจริงหรือไม่? ขอบคุณสำหรับความช่วยเหลือ!

ซอร์สโค้ดสำหรับแอนิเมชันอยู่ที่ https://gist.github.com/peci1/a0346538acc6c289b2c6d596b184ad21 .

การจำลองการไหลของข้อมูลผ่านสวิตช์

นี่คือตารางผลลัพธ์ของฉันจากการทดลองจริง สตรีมข้อมูลคงที่ - 128 Mbps ในแพ็กเก็ต UDP 25 kB ทุกๆ 1.56 ms ฉันกำลังเปลี่ยนพารามิเตอร์ของสตรีมที่สองโดยพยายามค้นหาขีดจำกัดที่แพ็กเก็ตของสตรีมแรกจะเริ่มสูญหายโดยสวิตช์ ฉันกำลังเปลี่ยน -l (ความยาว) พารามิเตอร์ที่ระบุขนาดของแพ็กเก็ต UDP และ -ข พารามิเตอร์ (แบนด์วิธ) ระบุแบนด์วิธที่ควรสร้างแพ็กเก็ตเหล่านี้ --pacing-จับเวลา ถูกตั้งค่าเป็น 1,000 เสมอสำหรับสตรีมที่สอง คุณจะเห็นว่า D-Link และ Netgear GS105 ไม่สามารถรับมือกับการระเบิดขนาด 60 kB ได้เลย GS108 ทำได้ดีกว่า GS105 มาก ในขณะที่มีชิปสวิตช์เกือบเหมือนกัน ("ตระกูลเดียวกัน" ต่างกันแค่จำนวนพอร์ตและบัฟเฟอร์ที่ใหญ่กว่าเล็กน้อย)

สวิตช์ ขนาดบัฟเฟอร์ [kB] ปริมาณการใช้งานสูงสุด 1.5kB ระเบิด ปริมาณการใช้งานสูงสุด 20kB ระเบิด ปริมาณการใช้งานสูงสุด 60kB ระเบิด
Gigablox ทนทาน (VSC7512) 220 825 Mbps 825 Mbps 825 Mbps
Gigablox (RTL8367N-VB-CG) 250 730 Mbps 750 Mbps 790 Mbps
ดีลิงค์ DIS-100G-5W (QCA8337N-AL3C) 128 110 Mbps 1 เมกะบิตต่อวินาที ทุกการระเบิดจะสูญเสียแพ็กเก็ต
ไซเซล XGS 1210-12 (RTL9302B) 1500 800 Mbps 830 Mbps 830 Mbps
เน็ตเกียร์ GS310-TP (RTL8380M) 520 830 Mbps 830 Mbps 835 Mbps
เน็ตเกียร์ GS308T (RTL8380M) 520 830 Mbps 835 Mbps 835 Mbps
เน็ตเกียร์ GS108 v3 (BCM53118) 192 630 Mbps 660 Mbps 710 Mbps
เน็ตเกียร์ GS105E (BCM53114) 128 120 Mbps 1 เมกะบิตต่อวินาที ทุกการระเบิดจะสูญเสียแพ็กเก็ต
Renkforce RF-4270245 ? 740 Mbps 760 Mbps 800 Mbps
ไมโครติ๊ก RB260GS (AR8327) 128 835 Mbps 835 Mbps 835 Mbps
จูนิเปอร์ EX2300 4 กิกะไบต์? 800 Mbps 830 Mbps 830 Mbps

(คำถามนี้ถูกย้ายจาก https://networkengineering.stackexchange.com/questions/78529/how-to-simulate-what-happens-inside-the-packet-buffer-of-a-simple-switch ซึ่งถูกทำเครื่องหมายว่านอกเรื่อง)

paladin avatar
id flag
ขนาด MTU สำหรับแพ็คเกจ Ethernet คือ 1500Bytes ไม่ใช่ 1514Bytes ดูที่ --> https://en.wikipedia.org/wiki/Maximum_transmission_unit#MTUs_for_common_media
paladin avatar
id flag
PS หากคุณส่งแพ็คเกจที่มีขนาด MTU 1514Bytes ผ่านอีเธอร์เน็ตจริง ๆ แพ็คเกจเหล่านั้นจะถูกแยกออกเป็น 2 แพ็คเกจ (1500Bytes + 14Bytes) ซึ่งช่วยลดบัฟเฟอร์ของสวิตช์ของคุณลงครึ่งหนึ่งอย่างมีประสิทธิภาพ
Martin Pecka avatar
ro flag
1514 รวมค่าโสหุ้ยแล้ว ขนาดแพ็คเก็ต IP คือ 1500 ไบต์
paladin avatar
id flag
ฉันเพิ่งอ่านเจอว่า `iperf` ไม่ได้ทำงานอย่างแม่นยำ 100% ฟังก์ชันการทำงานขึ้นอยู่กับฮาร์ดแวร์ที่คุณใช้ หากคุณต้องการผลลัพธ์ที่แม่นยำยิ่งขึ้น ให้ใช้ค่า `--pacing-timer` ที่น้อยลง กล่าวโดยสรุป `iperf` ไม่สามารถรับประกันว่าจะได้อัตราบิตที่ต้องการ
Martin Pecka avatar
ro flag
@paladin ขอบคุณสำหรับข้อมูลครับ ฉันตรวจสอบคุณสมบัติบิตเรตและแพ็กเก็ตสตรีมที่ฝั่งรับแล้ว และเป็นไปตามที่คาดไว้
Zac67 avatar
ru flag
ฉันสามารถสร้างโมเดลต่างๆ ได้ แต่ *คุณไม่สามารถจำลองสิ่งที่เกิดขึ้นภายในสวิตช์ได้อย่างแท้จริงโดยไม่มีข้อมูลรายละเอียด* เกี่ยวกับการนำไปใช้งาน นักพัฒนาและผู้ขายหลายรายอาจใช้วิธีแก้ไขปัญหานี้แตกต่างกันมาก บัฟเฟอร์อาจถูกจัดสรรให้กับพอร์ตแบบคงที่ ฯลฯ เว้นแต่คุณจะโชคดีมาก คุณจะไม่ได้รับข้อมูลนั้นเลย ตามนั้น คำถามของคุณนำไปสู่การเดาเท่านั้นซึ่งนอกหัวข้อที่นี่ หากสวิตช์ไม่ทำงานให้ใช้สวิตช์ที่ดีกว่า หากคุณมีข้อกำหนดเฉพาะ *มาก* ให้ติดต่อผู้จำหน่ายก่อนหรือประเมินในห้องปฏิบัติการ
Martin Pecka avatar
ro flag
@ Zac67 ขอบคุณสำหรับข้อมูลเชิงลึกของคุณ นี่คือสิ่งที่ฉันกลัว (และฉันหวังว่าจะมี "วิธีการมาตรฐาน" สองสามอย่างที่ผู้ขายสามารถเลือกได้...)"ถ้าสวิตช์ใช้ไม่ได้ ให้ใช้อันที่ดีกว่า" นั่นคือสิ่งที่ฉันต้องการจริงๆ แต่โดยหลักการแล้ว ฉันต้องการวิธีประเมินพฤติกรรมก่อนที่จะซื้อสวิตช์ หรืออย่างน้อยก็คาดเดาพฤติกรรมของมัน.. .
Zac67 avatar
ru flag
@MartinPecka น่าเศร้าที่คุณจะไม่พบสิ่งนั้นด้วยการสร้างแบบจำลองทางทฤษฎี แต่เพียงแค่ถามผู้ขายเกี่ยวกับกรณีการใช้งานของคุณหรือโดยการทดสอบอย่างเข้มงวด

โพสต์คำตอบ

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