ฉันมีเซิร์ฟเวอร์ที่มีการเชื่อมต่อ 10GbE ไปยังสวิตช์และลูกค้า 10 รายที่มีการเชื่อมต่อ 1GbE ไปยังสวิตช์เดียวกัน
ใช้ nuttcp แบบขนานบนไคลเอนต์แต่ละตัวฉันสามารถส่งข้อมูล TCP 10 สตรีมไปยังเซิร์ฟเวอร์พร้อมกันที่ความเร็วสายไฟ (เช่นเพียงแค่ขี้อาย 100 เมกะไบต์ต่อวินาทีจากไคลเอนต์ทั้ง 10 พร้อมกัน)
อย่างไรก็ตามเมื่อฉันย้อนกลับทิศทางและส่งข้อมูลจากเซิร์ฟเวอร์ไปยังไคลเอนต์ - นั่นคือ 10 TCP สตรีมหนึ่งคนไปยังไคลเอนต์แต่ละคน - TCP retransmissions skyrocket และประสิทธิภาพลดลงถึง 30, 20 หรือแม้แต่ 10 เมกะไบต์ต่อวินาที ต่อลูกค้าหนึ่งราย ฉันต้องการทำให้ตัวเลขเหล่านี้สูงขึ้นเนื่องจากรูปแบบการรับส่งข้อมูลนี้เป็นตัวแทนของแอปพลิเคชันบางอย่างที่ฉันสนใจ
ฉันได้ตรวจสอบแล้วว่าเซิร์ฟเวอร์ของฉันสามารถเชื่อมโยงลิงค์ 10GbE ด้วยการทดสอบเดียวกันผ่านการเชื่อมต่อ 10GbE กับเซิร์ฟเวอร์ที่คล้ายกัน ฉันได้ตรวจสอบแล้วว่าไม่มีข้อผิดพลาดในพอร์ตใด ๆ ของฉัน
ในที่สุดเมื่อฉันบังคับกวาด (จำกัด ) ขนาดหน้าต่าง TCP ของผู้รับฉันสามารถรับแบนด์วิดท์ได้ค่อนข้างสูง (30-40 เมกะไบต์ / วินาที); และถ้าฉันแคลมป์ต่ำมากฉันก็จะสามารถส่งสัญญาณกลับมาที่ศูนย์ได้ (โดยแบนด์วิดท์ต่ำอย่างน่าหัวเราะ)
ดังนั้นฉันมีความมั่นใจพอสมควรว่าฉันกำลังทับบัฟเฟอร์ในสวิตช์ของฉันส่งผลให้เกิดการสูญเสียแพ็กเก็ตเนื่องจากความแออัด อย่างไรก็ตามฉันคิดว่าการควบคุมความแออัดของ TCP นั้นควรจะจัดการกับสิ่งนี้ได้อย่างแน่นอนในที่สุดก็คงความเสถียรที่ความเร็วสูงกว่า 50% ของสายไฟ
ดังนั้นคำถามแรกของฉันง่ายมาก: อัลกอริทึมการควบคุมความแออัดของ TCP ใดจะเหมาะที่สุดสำหรับสถานการณ์ของฉัน มีให้ใช้งานมากมาย แต่ดูเหมือนว่าพวกเขาส่วนใหญ่จะถูกกำหนดเป้าหมายที่เครือข่ายที่สูญเสียหรือเครือข่ายที่มีแบนด์วิดท์สูงหรือเครือข่ายไร้สายที่มีความเร็วสูงหรือไม่มี ... สิ่งใดที่ตรงกับสถานการณ์ของฉัน
คำถามที่สอง: มีอะไรอีกบ้างที่ฉันลองได้บ้าง