Belirli cevaplarla ilgileniyorum:
- 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)?
- 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?
- 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)?
- 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.