Linux'ta (3.5 çekirdekli) TCP parametreleriyle denemeler yapıyorum. Temel olarak bu bağlantı ile ilgili:
Sunucu: Veri merkezinde Gigabit uplink, gerçek bant genişliği (uplink'leri paylaşması nedeniyle) başka bir veri merkezinden test edildiğinde yaklaşık 70 MB / s'dir.
Müşteri: 200mbit fiber'e bağlı Gigabit yerel lan. Bir test dosyası getirildiğinde aslında 20 MB / sn.
Gecikme: Yaklaşık 50 ms gidiş dönüş.
Uzak sunucu, 10 ila 100mb aralığındaki dosyalar için dosya sunucusu olarak kullanılır. 10 initcwnd kullanıldığında, bu dosyalar için aktarım süresinin TCP yavaş başlatma işleminden büyük ölçüde etkilendiğini fark ettim, 10mb'yi yüklemek için 3,5 saniye sürdü (en yüksek hıza ulaşıldı: 3,3 MB / s) çünkü yavaş başlıyor ve sonra rampa yapıyor maksimum hıza ulaşılmadan tamamlanır. Amacım, bu dosyaların minimum yükleme sürelerini ayarlamaktır (bu nedenle en yüksek ham verim veya en düşük gidiş-dönüş gecikmesi değil, bir dosyayı yüklemek için gereken gerçek süreyi azaltırsa her ikisini de feda etmeye hazırım)
Bu yüzden, ideal initcwnd'nin ne olması gerektiğini belirlemek için basit bir hesaplama yapmayı denedim, diğer bağlantıları ve diğerleri üzerindeki olası etkileri görmezden geldim. Bant genişliği-gecikme ürünü 200 Mbit / s * 50ms = 10 Mbit veya 1.310.720 bayttır. İnitcwnd'nin MSS birimleri olarak ayarlandığı ve MSS'nin 1400 bayt olduğu varsayılarak, aşağıdakilerin ayarlanması gerekir: 1.310.720 / 1400 = 936
Bu değer varsayılandan çok uzaktır (Linux'ta 10 * MSS, Windows'ta 64kb), bu yüzden bunu böyle ayarlamak iyi bir fikir gibi gelmez. Bu şekilde yapılandırmanın beklenen dezavantajları nelerdir? Örneğin:
- Aynı ağdaki diğer kullanıcıları etkiler mi?
- Diğer bağlantılar için kabul edilemez tıkanıklık yaratabilir mi?
- Taşkın yönlendirici arabellekleri yolun herhangi bir yerinde mi?
- Az miktarda paket kaybının etkisini artırmak mı istiyorsunuz?
70 MB/s
Megabit değil de dediğin zaman megabayt / s konuştuğunu doğrulayabilir misin ? Sadece açıklama arıyorum.