TCP Lamineri

Laminar nedir?

Laminar, her RTT sırasında gönderilen toplam veri miktarını belirleyen salt Tıkanıklık Kontrolü'nden verilerin tam olarak ne zaman gönderileceğini belirleyen iletim planlamasını ayıran yeni bir TCP sıkışıklık kontrolü çerçevesidir.

İletim planlaması için varsayılan algoritma, Van Jacobson'ın paket koruma ilkesinin [Jacobson88] katı bir şekilde uygulanmasıdır. Alıcıya gelen veriler ACK'lara neden olur. Bu da, gönderenin ağa eşdeğer miktarda veri göndermesine neden olur. Birincil durum değişkeni, ağda dolaşan veri ve ACK'lerin miktarında gizlidir. Bu durum, iyileştirilmiş bir tcp_packets_in_flight() tahmincisi (top_pipe) aracılığıyla gözlemlenir. total_pipe, RFC 3517'de açıklandığı gibi "süpürge"yi temel alır ancak aynı zamanda geçerli ACK tarafından bildirilen veri miktarını ve tıkanıklık kontrolünü geçen ancak TSO gibi başka etkinlikleri bekleyen bekleyen iletimlerin miktarını da içerir.

Yeni bir değişken olan CCwin, birincil tıkanıklık kontrolü durum değişkenidir. Tıkanıklık kontrol algoritmaları, yol boyunca genel tıkanıklık seviyesini düzenlemek için CCwin'i ayarlar. CCwin, cwnd'a benzese de cwnd aşırı yüklüdür ve farklı ve bazen birbiriyle çakışan hedeflere sahip birden çok algoritma (seri müdahalesi gibi) tarafından kullanılır.

Toplam_boru hattının CCwin'den farklı olduğu durumlarda, iletim planlama algoritması her ACK'ya yanıt olarak gönderilen segment sayısını biraz ayarlar. Hem yavaş başlangıç hem de Orantılı Hız Azaltma [PRR] (hız yarıya inme yerine), iletim planlama algoritmasına yerleştirilmiştir.

Laminar çerçevesinin temel avantajı, tıkanıklık kontrolü ve iletim planlamasının ayrı alt sistemlere ayrılmasıyla, her birinin çok daha basit tasarım kısıtlamalarına tabi olması ve bu şekilde, önceki kodun düzenlemesi ile uygun olmayan birçok yeni algoritmanın geliştirilmesini kolaylaştırmasıdır.

Laminar çerçevesi, TCP tıkanıklığı kontrolünün temel tasarım felsefesini değiştirir ve potansiyel olarak yamanın ötesinde geniş kapsamlı etkileri olur. Bu yama, kullanıcıların kodla deneme yapmasına, yorum yapmasına ve gözden kaçmış olabilecek durumların keşfedilmesine yardımcı olmayı amaçlamaktadır. Dahası, bazı algoritmaların hâlâ eksik olması nedeniyle yama eksiktir. Bu, özellikle CUBIC ve Reno dışındaki tıkanıklık kontrol algoritmaları, cwnd doğrulaması, hedef metrikleri vb. olabilir. İnsanlar bu diğer algoritmalardan bazılarının yeniden düzenlenmesine yardımcı olabilseler çok harika olur.

Laminar çerçevesi ve motivasyonu, draft-mathis-tcpm-tcp-laminar adlı İnternet Taslağı'nda daha ayrıntılı bir şekilde açıklanmıştır.

Lütfen yorumlarınızı ve önerilerinizi mattmathis@google.com adresine gönderin.

Bu proje, Google'ın protokol iyileştirmeleri aracılığıyla Web'i Daha Hızlı Yapma çalışmalarının bir parçasıdır.

Uygulama Notları

Laminar temel olarak 3 işlevde uygulanır (tcp_input.c):

Tcp_cong_avoid() ve tcp_mult_decr(), CCwin durum değişkenini kullanarak IAMD tıkanıklık kontrolünü gerçekleştirir. Geri alma dışında, CCwin yalnızca bu iki işlevde değişiklik yapar. (Her iki işlev de tıkanıklık modülüne özel işleyicileri çağırır.)

Tcp_laminar_schedule(), her ACK'ya yanıt olarak ne kadar veri gönderileceğini belirler. tcp_packets_in_flight() değerinin CCwin'e yakınlaşması için biraz yukarı veya aşağı doğru ayarlanmış Van Jacobson paket korumasını uygular.

tcp_packets_in_flight() tahmincisinde, çoğu protokol etkinliğinde değişmez olmasını sağlayacak önemli değişiklikler yapılmıştır. Uygulama durur, tcp_laminar_schedule() ayarlamalar ve gerçek paket kayıpları, tcp_packets_in_flight() değerini gerektiği gibi değiştirir. ACK işleme, TSO ve diğer etkinliklerin çoğu bunu yapmaz. Kayıplar olduğunda, yayındaki gerçek paket sayısının anında değiştiğini ancak yeniden iletim makinesi bunları kayıp ve artımlar olarak işaretleyene kadar tcp_packets_in_flight() tahmin aracına yansıtılmadığını unutmayın.

Yamayı alın

Bu yama Dave Miller'ın net-next'e karşı olup 3.5-rc2 için sorunsuz bir şekilde uygulanır.
NB: Reno ve CUBIC'in güncellenmediği ve derlenmeyeceğini belirten tıkanıklık kontrol modülleri. Yapılandırmanız vegas, ölçeklenebilir, yüksek hız gibi başka tıkanıklık kontrol modülleri oluşturuyorsa öncelikle devre dışı bırakılmalıdır.