Saya tertarik pada jawaban tertentu:
- Apakah NIC dengan GRO mengedit / membuat TCP ACK atau paket lain (atau apakah fitur ini transparan untuk penerima / pengirim tumpukan TCP)?
- Harus ada batas waktu / peristiwa ketika NIC harus meneruskan "segmen terpaku" ke tumpukan TCP? Apakah mereka?
- Dalam pengaturan penerusan paket - apakah fitur GRO juga mencoba membaca ACK penerima (lihat mengapa saya menanyakan hal ini)?
- Setiap sumber yang menjelaskan GRO dan juga fitur-fitur pembongkaran NIC lainnya (TSO, LSO ...) lebih baik daripada halaman manual wikipedia dan linux akan sangat dihargai.
Keterangan lebih lanjut:
Saya memecahkan masalah kinerja dengan satu implementasi IPSec. Masalahnya adalah bandwidth yang tersedia tidak terdistribusi secara merata di semua 4 terowongan VPN (didistribusikan sekitar 200MBps / 200MBps / 1MBps / 1MBps; Setiap terowongan VPN mengenkapsulasi koneksi TCP tunggal). Di PCAP sesekali saya melihat bahwa server web menganggur seperti ~ 2 detik (menunggu ACK). Mengunduh resume ketika server web mentransmisikan kembali segmen yang tidak diakui.
Batasan batin saya dari PCAP adalah bahwa fitur NIC GRO menempelkan paket-paket bersama tetapi kadang-kadang tidak meneruskannya ke TCP stack secara tepat waktu dan itulah yang menyebabkan masalah.
Karena server VPN ini tidak memiliki antarmuka yang mengakhiri koneksi TCP melainkan hanya meneruskan paket. Kemudian saya mencoba untuk menonaktifkan GRO dan setelah itu saya mengamati bahwa lalu lintas didistribusikan secara merata di semua terowongan. Juga ketika penskalaan jendela TCP dinonaktifkan pada Webserver, maka bandwidth juga didistribusikan bahkan dengan GRO diaktifkan (itulah sebabnya saya punya pertanyaan # 3).
Saya menggunakan linux 2.6.32-27 di server Ubuntu 10.04 (64-bit). NIC adalah Intel 82571EB. Semua antarmuka (klien HTTP, klien VPN, VPN Server, Webserver) terhubung langsung secara berantai dengan kabel Ethernet 1Gbit.