Saya belum melakukan sesuatu yang tidak biasa pada konfigurasi perangkat keras atau kernel saya (semua pengaturan default, instalasi OS baru, kernel Linux 3,11 TCP / IP stack) dan saya rata-rata sekitar 3,83 juta pesan per detik melalui TCP sementara saya hanya rata-rata 0,75 juta pesan per detik melalui UDP. Ini tampaknya benar-benar menentang apa yang saya harapkan dari kedua protokol.
Apa penyebab yang paling mungkin untuk perbedaan drastis dan bagaimana saya bisa mendiagnosisnya di Ubuntu 13.10?
#TCP RESULTS
Recv Send Send Utilization Service Demand
Socket Socket Message Elapsed Send Recv Send Recv
Size Size Size Time Throughput local remote local remote
bytes bytes bytes secs. 10^6bits/s % S % S us/KB us/KB
87380 65536 64 10.00 1963.43 32.96 17.09 5.500 2.852
#UDP RESULTS
Socket Message Elapsed Messages CPU Service
Size Size Time Okay Errors Throughput Util Demand
bytes bytes secs # # 10^6bits/sec % SS us/KB
4194304 64 10.00 7491010 0 383.5 28.97 24.751
212992 10.00 1404941 71.9 25.03 21.381
Untuk pengujian ini saya memiliki dua server pengujian yang identik dan terhubung langsung melalui kabel crossover 10G. NIC yang digunakan dalam kasus ini adalah Intel X520's dengan konfigurasi out-of-box dan terhubung ke slot PCIe 3.0 x8 pada motherboard, yang berkomunikasi dengan CPU melalui pengontrol NUMA.
sumber
netperf
tes benchmark, UDP_STREAM dan TCP_STREAM, diperbaiki untuk CPU yang sama, dan ukuran pesan 64 byte.Jawaban:
Selain tidak mendapatkan informasi terperinci tentang pengaturan pengujian Anda, tampaknya masalah utamanya adalah bahwa Anda menggunakan ukuran pesan 64 byte. Ini jauh dari MTU biasa yang terdiri dari 1500 byte dan membuat UDP sangat tidak efisien: sementara TCP menggabungkan banyak pengiriman ke dalam satu paket pada kabel (kecuali jika TCP_NODELAY diatur) untuk membuat penggunaan tautan yang efisien, setiap pesan UDP akan menghasilkan paket terpisah. Dalam angka: sekitar 23 pesan ukuran 64 byte akan digabungkan menjadi satu paket TCP ukuran MTU, sementara itu akan membutuhkan 23 paket tunggal untuk UDP untuk jumlah data yang sama. Masing-masing paket ini berarti overhead dengan mengirimkan dari host, mentransmisikan pada kabel dan menerima oleh rekan. Dan seperti yang terlihat dalam kasus Anda, sekitar 80% dari paket UDP hilang karena perangkat keras Anda tidak cukup cepat untuk mengirim dan menerima semua paket ini.
Jadi yang dapat Anda pelajari dari tolok ukur ini adalah:
Adapun harapan Anda, bahwa UDP harus lebih baik: apakah Anda pernah bertanya-tanya mengapa semua transfer file utama (ftp, http, ...) dilakukan dengan protokol berbasis TCP? Tolok ukur menunjukkan alasannya kepada Anda.
Jadi mengapa orang menggunakan UDP?
sumber