Tôi có một máy chủ có kết nối 10GbE với một công tắc và 10 máy khách mỗi máy có kết nối 1GbE cho cùng một công tắc.
Chạy song song nuttcp trên mỗi máy khách, tôi có thể đồng thời đẩy 10 luồng dữ liệu TCP đến máy chủ ở tốc độ gần với tốc độ dây (tức là chỉ cần 100 megabyte mỗi giây từ cả 10 máy khách).
Tuy nhiên, khi tôi đảo ngược hướng và gửi dữ liệu từ máy chủ đến các máy khách - tức là 10 luồng TCP, một luồng sẽ đến từng máy khách - tốc độ truyền lại TCP tăng vọt và hiệu suất giảm xuống 30, 20 hoặc thậm chí 10 megabyte mỗi giây mỗi khách hàng. Tôi muốn tăng các số này lên, vì mẫu lưu lượng này là đại diện cho một số ứng dụng tôi quan tâm.
Tôi đã xác minh rằng máy chủ của tôi có khả năng bão hòa liên kết 10GbE bằng cách thực hiện cùng một thử nghiệm qua kết nối 10GbE với một máy chủ tương tự. Tôi đã xác minh rằng không có lỗi trên bất kỳ cổng nào của tôi.
Cuối cùng, khi tôi buộc (giới hạn) kích thước cửa sổ TCP của người nhận, tôi có thể nhận được băng thông cao hơn một chút (30-40 megabyte / giây); và nếu tôi kẹp nó cực thấp, tôi có thể truyền lại về 0 (với băng thông thấp đến mức lố bịch).
Do đó, tôi tin tưởng một cách hợp lý rằng tôi đang vượt qua các bộ đệm trong chuyển đổi của mình, dẫn đến mất gói do tắc nghẽn. Tuy nhiên, tôi nghĩ rằng kiểm soát tắc nghẽn của TCP được cho là sẽ giải quyết vấn đề này một cách độc đáo, cuối cùng ổn định ở mức trên 50% tốc độ dây.
Vì vậy, câu hỏi đầu tiên của tôi rất đơn giản: Thuật toán điều khiển tắc nghẽn TCP nào sẽ tốt nhất cho tình huống của tôi? Có rất nhiều trong số chúng có sẵn, nhưng chúng dường như chủ yếu nhắm vào các mạng bị mất hoặc mạng có độ trễ cao băng thông cao hoặc mạng không dây ... Không ai trong số đó áp dụng cho tình huống của tôi.
Câu hỏi thứ hai: Có điều gì khác tôi có thể thử không?