Kontrol kemacetan TCP untuk latensi rendah 10GbE -> jaringan 1GbE?


11

Saya memiliki server dengan koneksi 10GbE ke switch, dan 10 klien masing-masing dengan koneksi 1GbE ke switch yang sama.

Menjalankan nuttcp secara paralel pada masing-masing klien, saya dapat mendorong 10 aliran data TCP ke server secara simultan di dekat dengan kecepatan kawat (yaitu hanya malu 100 megabyte per detik dari semua 10 klien secara bersamaan).

Namun, ketika saya membalikkan arah dan mengirim data dari server ke klien - yaitu, 10 aliran TCP, satu mengalir ke setiap klien - transmisi ulang TCP meroket dan kinerjanya turun menjadi 30, 20, atau bahkan 10 megabita per detik per klien. Saya ingin menaikkan angka-angka ini, karena pola lalu lintas ini mewakili aplikasi tertentu yang saya pedulikan.

Saya telah memverifikasi bahwa server saya mampu menjenuhkan tautan 10GbE dengan melakukan percobaan yang sama melalui koneksi 10GbE ke server yang sama. Saya telah memverifikasi bahwa tidak ada kesalahan pada salah satu port saya.

Akhirnya, ketika saya secara paksa menjepit (membatasi) ukuran jendela TCP penerima, saya bisa mendapatkan bandwidth yang agak lebih tinggi (30-40 megabyte / detik); dan jika saya menjepitnya sangat rendah, saya bisa mendapatkan transmisi ulang ke nol (dengan bandwidth sangat rendah).

Jadi saya cukup percaya diri saya melampaui buffer di switch saya, mengakibatkan hilangnya paket karena kemacetan. Namun, saya pikir kontrol kemacetan TCP seharusnya menangani ini dengan baik, akhirnya stabil pada sesuatu di atas 50% dari kecepatan kawat.

Jadi pertanyaan pertama saya sangat sederhana: Algoritme kontrol kemacetan TCP manakah yang terbaik untuk situasi saya? Ada banyak dari mereka yang tersedia, tetapi sebagian besar tampaknya ditargetkan pada jaringan lossy atau jaringan latensi tinggi bandwidth tinggi atau jaringan nirkabel ... Tidak ada yang sesuai dengan situasi saya.

Pertanyaan kedua: Apakah ada hal lain yang bisa saya coba?


1
Akan sangat membantu untuk mengetahui model saklar apa. Sakelar yang berbeda menangani antrian dengan cara yang berbeda, dan akan membantu mempersempit solusi.
scottm32768

2
Switch yang berbeda juga memiliki ukuran buffer yang berbeda, sehingga mengetahui model switch akan membantu menghilangkan masalah perangkat keras dari masalah Anda.
cpt_fink

1
Juga, model NIC, driver, versi Linux, kernel, distribusi, dll. Jawaban saya untuk Myricom atau Solarflare NIC dengan Cisco 4900M akan berbeda dari switch Dell Powerconnect dan Intel NICs.
ewwhite

Jawaban:


2
  1. Anda ingin sebuah algoritma di mana ukuran jendela tidak berkurang secara drastis ketika ada penurunan paket. Ini adalah penurunan drastis dalam ukuran jendela yang menghasilkan penurunan tiba-tiba dalam throughput TCP.

  2. Jika sakelar Anda dan server Anda mendukung kontrol aliran, coba aktifkan kontrol aliran. Seberapa baik ini bekerja hampir sepenuhnya bergantung pada silikon dan firmware Switch. Pada dasarnya, switch akan mendeteksi kemacetan jalan keluar pada port yang terhubung ke klien, menentukan dari mana paket berasal, dan mengirim frame kontrol aliran keluar port ingress (yaitu kembali ke server). Jika server memahami frame kontrol aliran, itu akan mengurangi kecepatan transmisi. Jika semuanya bekerja dengan baik, Anda akan mendapatkan throughput yang optimal dengan hampir nol tetes paket yang terjadi pada buffer egress switch.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.