Bir anahtara 10GbE bağlantısı olan bir sunucum ve aynı anahtara 1GbE bağlantısı olan 10 istemcim var.
İstemcilerin her birinde paralel olarak nuttcp çalıştırarak, 10 TCP veri akışını aynı anda kablo hızına yakın bir anda sunucuya gönderebilirim (yani aynı anda 10 istemciden saniyede 100 megabayt utangaç).
Ancak, yönü tersine çevirdiğimde ve sunucudan istemcilere veri gönderdiğimde (yani, her istemciye bir tane olacak şekilde 10 TCP akışı) TCP yeniden iletimleri hızlanır ve performans saniyede 30, 20 hatta 10 megabayta düşer müşteri başına. Bu sayıları almak istiyorum, çünkü bu trafik deseni benim önem verdiğim bazı uygulamaları temsil ediyor.
Sunucumun, aynı deneyi benzer bir sunucuya 10GbE bağlantısı üzerinden gerçekleştirerek 10GbE bağlantısını doyurabildiğini doğruladım. Bağlantı noktalarımdan herhangi birinde hata olmadığını doğruladım.
Son olarak, alıcının TCP pencere boyutunu zorla sıkıştırdığımda (sınırlandırdığımda), bant genişliğini biraz daha yükseltebilirim (30-40 megabayt / sn); ve eğer çok düşük bir şekilde sıkıştırırsam, yeniden aktarımları sıfıra getirebilirim (bant genişliği gülünç derecede düşükken).
Bu nedenle, anahtarımdaki arabellekleri bozduğumdan eminim ve tıkanıklık nedeniyle paket kaybına neden oluyorum. Bununla birlikte, TCP'nin tıkanıklık kontrolünün bununla iyi başa çıkması gerektiğini düşündüm, sonunda kablo hızının% 50'sinin üzerinde bir şeyde stabilize oldu.
İlk sorum çok basit: Durumum için hangi TCP tıkanıklığı kontrol algoritması daha iyi olurdu? Bunların bir tonu var, ancak çoğunlukla kayıplı ağlara veya yüksek bant genişliğine sahip yüksek gecikmeli ağlara veya kablosuz ağlara hedeflenmiş gibi görünüyorlar ... Bunların hiçbiri benim durumum için geçerli değil.
İkinci soru: Deneyebileceğim başka bir şey var mı?