Düşük gecikmeli 10GbE -> 1GbE ağı için TCP tıkanıklık kontrolü?


11

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ı?


1
Hangi anahtar modelini bilmek faydalı olacaktır. Farklı anahtarlar kuyruğu farklı şekillerde ele alır ve bir çözümün daraltılmasına yardımcı olur.
scottm32768

2
Ayrıca farklı anahtarların farklı arabellek boyutları vardır, bu nedenle anahtar modelini bilmek, donanım sorunlarını sorununuzdan gidermenize yardımcı olur.
cpt_fink

1
Ayrıca, NIC modelleri, sürücüler, Linux sürümü, çekirdek, dağıtım vb.
ewwhite

Yanıtlar:


2
  1. Bir paket düşüşü olduğunda pencere boyutunun önemli ölçüde azaltılmadığı bir algoritma istiyorsunuz. TCP trafiğindeki ani düşüşe neden olan pencere boyutundaki büyük düşüş.

  2. Anahtarınız ve sunucunuz akış kontrolünü destekliyorsa akış kontrolünü etkinleştirmeyi deneyin. Bunun ne kadar iyi çalıştığı neredeyse tamamen Switch'in silikon ve bellenimine bağlıdır. Temel olarak, anahtar bir istemciye bağlı olan port üzerindeki çıkış tıkanıklığını tespit edecek, paketlerin nereden geldiğini belirleyecek ve akış kontrol çerçevelerini giriş portundan (yani sunucuya geri) gönderecektir. Sunucu akış kontrol çerçevelerini anlarsa, iletim hızını azaltır. Her şey yolunda giderse, anahtarın çıkış tamponunda meydana gelen neredeyse sıfır paket damlası ile optimum verim elde edersiniz.

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.