Yüksek bant genişliği bağlantıları için (çok) büyük bir initcwnd ayarlamanın olası dezavantajları nelerdir?


9

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?

1
70 MB/sMegabit değil de dediğin zaman megabayt / s konuştuğunu doğrulayabilir misin ? Sadece açıklama arıyorum.
Andy Shinn

Evet, megabayt / s megabit değil.
Tomas

Ben olsaydım, birkaç kez 2 ile çarpmayı denerdim (10, 20, 40, 80, ...) ve tipik indirme sürelerini nasıl iyileştirdiğini görüyorum
mvp

Yanıtlar:


1

Bu şekilde yapılandırmanın beklenen dezavantajları nelerdir? Örneğin:

Will it affect other users of the same network?

İnitcwnd öğesinin değiştirilmesi aşağıdakileri etkiler:

  • Ayarları değiştiren sunucunun kullanıcıları
  • Bu kullanıcılar, ayar değişikliğinin yapılandırıldığı yolla eşleşirse.
Could it create unacceptable congestion for other connections?

Elbette.

Flood router-buffers somewhere on the path?

Alakasız değil, ancak yönlendiricileriniz olmadıkça, size daha yakın olan konulara odaklanırdım.

Increase the impact of small amounts of packet-loss?

Elbette, bunu yapabilir.

Sonuç, bunun hem kasıtlı hem de kasıtsız paket kaybı maliyetini artıracağıdır. Sunucunuz DOS için 3 yönlü el sıkışma (düşük yatırım (veri miktarı) için önemli miktarda veri çıkışı) tamamlayabilen herkes tarafından daha basittir.

Ayrıca, bu paketlerin bir demetinin yeniden iletilmesi gerekme olasılığını artıracaktır, çünkü patlamadaki ilk paketlerden biri kaybolacaktır.


Özetlemek gerekirse: initcwnd yalnızca doğru yollar için ayarlanmış özel bir sunucu için, kullanıcılar için etkileşim açısından iyi bir gelişmedir.
Tomas

0

Ne istediğini tam olarak anladığımı sanmıyorum, bu yüzden cevap vermeye çalışıyorum:

Her şeyden önce, yapmaya çalıştığınız şey alıcı taraf değil, yalnızca gönderen tarafta anlamlıdır. Yani alıcıyı değil dosya sunucusunu değiştirmeniz gerekiyor. Ne yaptığınızı varsayarsak:

İnitcwnd değerini (örneğin) 10 olarak değiştirmek, 10 paketin derhal gideceği anlamına gelir. Hepsi hedeflerine ulaşırsa, yavaş başlatma (üstel cwnd artışı) nedeniyle ilk RTT'de çok daha büyük bir pencere ile sonuçlanabilir. Bununla birlikte, paket kaybı üzerine cwnd yarıya iner ve 10 paketle patladığınızdan, önemli miktarda yeniden iletiminiz olur, böylece düşündüğünüzden daha fazla sorunla karşılaşabilirsiniz.

Daha agresif bir şey denemek ve diğer internet kullanıcılarına bir şekilde "kaba" olmak istiyorsanız, sunucu tarafında tıkanıklık kontrol algoritmasını değiştirebilirsiniz. Farklı algoritmalar cwnd'yi farklı bir şekilde işler. Sunucu tarafı yazılımınız bu bağlantı başına değişiklik yapmadığı sürece (tüm şüphelerim) bunun tüm kullanıcıları etkileyeceğini unutmayın. Buradaki fayda, initcwnd çok fazla rol oynamazken, algoritma paket kaybından sonra bile geçerli olacaktır.

/ proc / sys / net / ipv4 / tcp_congestion_control, tıkanıklık denetimi algoritmasını değiştirdiğiniz yerdir.

FWIW bu tür küçük RTT'ler (50 ms) ve orta veya büyük dosyalar için initcwnd ortalama hızınızı çok fazla etkilememelidir. Paket kaybı yoksa (yani yağ borusu) cwnd her RTT'de iki katına çıkacaktır. Bir yağ borusunda RTT = 50ms ile ilk saniyede 20 RTT sığacaksınız, yani initcwnd = 2 ile 1 saniye sonra cwnd = 2 * 2 ^ 20 ile sonuçlanacaksınız, ki bahse girebileceğinizden daha fazla üstesinden gelmek ;-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.