Ubuntu

為什麼在 Ubuntu 伺服器上 UDP 比 TCP 慢?

  • January 15, 2014

我通過 1Gb LAN 上的 iperf 在兩個 Ubuntu 伺服器 (12.04) 之間傳輸數據。

iperf -s    <->     iperf -c <addr> -n2G
TCP speed = 925 Mbits/sec

iperf -su   <->     iperf -uc<addr> -b1G -n2G
UDP speed = 810 Mbits/sec
Jitter = 0.016 ms
Lost = 0 .. 0.01%

我預計 UDP 比 TCP 快得多。誰能解釋一下為什麼 UDP 在 Ubuntu Server 上比 TCP 慢?

每個幀在發送時都會經過幾個緩衝區:應用程序緩衝區、協議緩衝區、軟體介面緩衝區和硬體介面緩衝區。當您開始通過發送高速數據對堆棧施加壓力時,您將填滿這些緩衝區並阻塞或失去數據。您還有可能影響績效的及時性和輪詢策略。例如,通過使用更大的緩衝區並減少輪詢頻率,您可以獲得更好的性能,同時犧牲延遲。

TCP 針對高速批量傳輸進行了優化,而 UDP 針對 Linux 核心中的低延遲進行了優化。這會影響緩衝區大小以及如何輪詢和移交數據。除此之外,您經常需要為 TCP 解除安裝到硬體。與 UDP 相比,我希望 TCP 的性能要好得多。

請注意,通過 UDP 發送高速數據通常不是一個好主意,除非您實現自己的擁塞控制。TCP 保護您的網路免受擁塞崩潰的影響。當您有少量數據或高時效要求時,請使用 UDP。

引用自:https://serverfault.com/questions/432101