Apa kerugian yang mungkin terjadi untuk mengatur initcwnd (sangat) besar untuk koneksi bandwidth tinggi?

9

Saya telah bereksperimen dengan parameter TCP di Linux (dengan kernel 3.5). Pada dasarnya mengenai hubungan ini:

Server: Gigabit uplink di datacenter, bandwidth sebenarnya (karena berbagi uplink) sekitar 70 MB / s ketika diuji dari datacenter lain.

Klien: Gigabit lan lokal terhubung ke serat 200mbit. Mengambil file uji sebenarnya mencapai 20 MB / s.

Latensi: Sekitar 50 ms pulang pergi.

Server jarak jauh digunakan sebagai server file untuk file dalam kisaran 10 hingga 100mb. Saya perhatikan bahwa menggunakan initcwnd dari 10 waktu transfer untuk file-file ini sangat dipengaruhi oleh TCP slow-start, mengambil 3,5 detik untuk memuat 10mb (kecepatan tertinggi tercapai: 3,3 MB / s) karena mulai lambat dan kemudian landai tetapi selesai sebelum kecepatan maksimum tercapai. Tujuan saya adalah menyetel waktu buka minimum file-file itu (jadi bukan throughput mentah tertinggi atau latensi pulang pergi terendah, saya bersedia mengorbankan keduanya jika itu mengurangi waktu aktual yang diperlukan untuk memuat file)

Jadi saya mencoba perhitungan sederhana untuk menentukan apa yang seharusnya initcwnd ideal, mengabaikan koneksi lain dan kemungkinan dampak pada orang lain. Bandwidth-delay-product adalah 200 Mbit / s * 50ms = 10 Mbit atau 1.310.720 byte. Menimbang bahwa initcwnd diatur dalam unit MSS dan dengan asumsi MSS adalah sekitar 1400 byte ini akan memerlukan pengaturan: 1.310.720 / 1400 = 936

Nilai ini sangat jauh dari standar (10 * MSS di Linux, 64 kb di Windows), jadi rasanya tidak baik untuk mengaturnya seperti ini. Apa kerugian yang diharapkan dari mengonfigurasinya seperti ini? Misalnya:

  • Apakah ini akan memengaruhi pengguna lain dari jaringan yang sama?
  • Bisakah itu membuat kemacetan yang tidak dapat diterima untuk koneksi lain?
  • Banjir router-buffer di suatu tempat di jalan?
  • Meningkatkan dampak jumlah-paket yang kecil?
Tomas
sumber
1
Bisakah Anda mengonfirmasi bahwa Anda berbicara megabita / detik saat Anda mengatakan 70 MB/sdan bukan megabita ? Hanya mencari klarifikasi.
Andy Shinn
Ya, megabyte / s bukan megabit.
Tomas
Jika saya jadi Anda, saya akan mencoba mengalikannya 2 kali beberapa kali (10, 20, 40, 80, ...) dan lihat bagaimana cara meningkatkan waktu unduhan khas Anda
mvp

Jawaban:

1

Apa kerugian yang diharapkan dari mengonfigurasinya seperti ini? Misalnya:

Will it affect other users of the same network?

Mengubah initcwnd akan memengaruhi:

  • Pengguna server dengan pengaturan berubah
  • JIKA para pengguna cocok dengan rute yang diubah oleh pengaturan.
Could it create unacceptable congestion for other connections?

Tentu.

Flood router-buffers somewhere on the path?

Bukan tidak relevan, tetapi kecuali mereka router Anda, saya akan fokus pada masalah yang lebih dekat dengan Anda.

Increase the impact of small amounts of packet-loss?

Tentu, ini bisa dilakukan.

Hasilnya adalah ini akan meningkatkan biaya packet loss, baik disengaja dan tidak disengaja. Server Anda lebih mudah untuk DOS oleh siapa saja yang mampu menyelesaikan jabat tangan 3-arah (sejumlah besar data keluar untuk investasi rendah (jumlah data) di).

Ini juga akan meningkatkan kemungkinan sekelompok paket tersebut perlu ditransmisikan kembali karena salah satu paket pertama dalam burst akan hilang.

Slartibartfast
sumber
Ok, jadi untuk meringkas: Untuk server pribadi dengan initcwnd ditetapkan hanya untuk rute yang benar itu adalah peningkatan yang baik untuk interaktivitas bagi pengguna.
Tomas
0

Saya rasa saya tidak sepenuhnya mengerti apa yang Anda minta jadi inilah upaya untuk merespons:

Pertama-tama, apa yang Anda coba lakukan hanya masuk akal di pihak pengirim dan bukan pihak penerima. Yaitu Anda harus mengubah file server dan bukan penerima. Dengan asumsi itulah yang Anda lakukan:

Mengubah initcwnd menjadi (misalnya) 10 berarti 10 paket akan hilang dengan segera. Jika semuanya mencapai target Anda, Anda mungkin berakhir dengan jendela yang jauh lebih besar di RTT pertama karena slow-start (kenaikan cwnd eksponensial). Namun, saat kehilangan paket, cwnd akan dibelah dua dan karena Anda penuh dengan 10 paket, Anda akan memiliki sejumlah besar transmisi ulang sehingga Anda mungkin berakhir dengan lebih banyak masalah daripada yang Anda pikirkan.

Jika Anda ingin mencoba sesuatu yang lebih agresif dan entah bagaimana "kasar" kepada pengguna Internet lain daripada Anda dapat mengubah algoritma kontrol kemacetan di sisi server. Algoritma yang berbeda menangani cwnd dengan cara yang berbeda. Ingatlah bahwa ini akan memengaruhi semua pengguna kecuali perangkat lunak sisi server Anda mengubah per-koneksi ini (yang saya sangat ragukan). Manfaatnya di sini adalah bahwa algoritma akan berlaku bahkan setelah kehilangan paket sementara initcwnd tidak akan banyak berperan.

/ proc / sys / net / ipv4 / tcp_congestion_control adalah tempat Anda mengubah algoritma kontrol kemacetan.

FWIW untuk RTT kecil (50 ms) dan untuk file menengah atau besar, initcwnd seharusnya tidak terlalu mempengaruhi kecepatan rata-rata Anda. Jika tidak ada paket loss maka (mis. Pipa gemuk) cwnd akan berlipat ganda di setiap RTT. Dengan RTT = 50ms pada pipa gemuk Anda akan cocok dengan 20 RTT di detik pertama, artinya dengan initcwnd = 2 Anda akan berakhir dengan cwnd = 2 * 2 ^ 20 setelah 1 detik, yang saya yakin lebih dari yang Anda bisa menangani ;-)

V13
sumber