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?