GRO (genel alma yükü) daha gelişmiş NIC'lerde nasıl çalışır?


14

Belirli cevaplarla ilgileniyorum:

  1. GRO'lı NIC, TCP ACK veya başka paketler düzenler / oluşturur (veya bu özellik alıcı / gönderen TCP yığınları için şeffaf mıdır)?
  2. NIC'nin "yapıştırılmış segmentleri" TCP yığınına geçirmesi gerektiğinde bir zaman aşımı / olay olmalıdır? Onlar neler?
  3. Paket yönlendirme kurulumunda - GRO özelliği alıcı ACK'larını da okumaya çalışıyor mu (neden bunu soruyorum aşağıya bakın)?
  4. GRO ve diğer NIC boşaltma özelliklerini (TSO, LSO ...) wikipedia ve linux man sayfalarından daha iyi açıklayan herhangi bir kaynak gerçekten takdir edilecektir.

Daha fazla detay:

Bir IPSec uygulamasıyla ilgili bir performans sorununu gideriyorum. Sorun şu ki, kullanılabilir bant genişliği 4 VPN tünelinde eşit olarak dağılmıyor (yaklaşık 200MBps / 200MBps / 1MBps / 1MBps olarak dağıtılır; Her VPN tüneli tek bir TCP bağlantısını kapsar). PCAP'ta arada bir web sunucusunun ~ 2 saniye boşta kaldığını görüyorum (ACK bekleniyor). Web sunucusu onaylanmamış segmentleri yeniden gönderdiğinde indirme işlemi devam eder.

PCAP'tan iç kesimlerim, NIC GRO özelliğinin paketleri birbirine yapıştırması, ancak bazen bunları TCP yığınına zamanında geçirmemesi ve bu da sorunlara neden olmasıdır.

Bu VPN sunucusunda TCP bağlantılarını sonlandıran arabirimler bulunmadığından ziyade yalnızca paketleri iletir. Sonra GRO'u devre dışı bırakmaya çalıştım ve bundan sonra trafiğin tüm tünellere eşit olarak dağıldığını gördüm. Ayrıca TCP pencere ölçeklendirme Web sunucusunda devre dışı bırakıldığında, bant genişliği GRO etkinken bile dağıtılır (bu yüzden soru # 3'üm vardı).

Ubuntu 10.04 sunucusunda (64 bit) 2.6.32-27 linux kullanıyorum. NIC, Intel 82571EB'dir. Tüm arabirimler (HTTP istemcisi, VPN istemcisi, VPN Sunucusu, Web sunucusu) doğrudan 1Gbit Ethernet kablolarıyla zincir halinde bağlanır.

Yanıtlar:


15

Bu makaleyi inanılmaz faydalı buldum: JLS2009: Genel alma boşaltma . GRO'nun nasıl çalıştığına dair harika bir genel bakış sunar.

  1. Bazı bağdaştırıcılar bunu yapabilir, ancak ilişkili sürücüler de bunun farkında olmalıdır. Ayrıca, sürücülerin kendisi bunu yazılımda yapabilir. Bu, Çekirdek TCP / IP yığınına girmeden önce olduğu gibi, çekirdek alanı TCP / IP yığınına tam olarak girildiğinde, paketler yeniden sonuçlandırılmıştır.
  2. Zaman aşımı, GRO spesifikasyonu tarafından çok küçük bir sayı olan bir TCP / IP 'tik' (Zaman Damgası alanının artışı) olarak tanımlanır, ancak hızlı ağlarda yine de birden fazla paket alınabilir.
  3. GRO, ileticinin alıcı tarafında devreye girecek ve aslında GRO, daha açgözlü LRO yöntemi, ileticilere paketleri vidalamayı durduracak şekilde oluşturuldu.
  4. Yukarıda bahsettiğim makale gerçekten yardımcı oluyor.

Ethtool olabilir belirli arayüzleri üzerinde / devre dışı GRO etkinleştirmek mümkün. Sürüme bağlıdır.


1
Sorumu güncelledim. Görünüşe göre tüm boşaltma özellikleri bağlamında 1 numaraya cevap verdiniz (tek başına IMHO GRO, ACK üretmez - sadece bir TCP / IP kenesi için tüm paketleri "yapıştırır" ve ardından OS'ye işler). Teşekkür ederim!
user389238
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.