Linux-Networking

衡量覆蓋網路性能的正確方法

  • April 29, 2017

我目前正在檢查不同 Docker 覆蓋網路的性能(尤其是 UDP 吞吐量)。我通過在與 Docker 覆蓋網路連接的兩台主機之間創建點對點連接來做到這一點,然後iperf在 Docker 容器內執行以檢查吞吐量。我注意到每次我iperf作為客戶端執行以將數據發送到iperf作為伺服器執行的另一個容器時,客戶端主機的 CPU 使用率達到 100%。我通過執行在此處找到的以下命令得到了該結果:

top -bn1 | grep "Cpu(s)" | \
      sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
      awk '{print 100 - $1"%"}'

所以,在我看來,我的吞吐量測試的限制因素似乎是我的主機的 CPU 容量,因為它以 100% 的速度執行並且無法產生更多的流量來使網路連接飽和。我想知道這是否是一個iperf特定問題,所以我想使用不同的工具執行相同的測試,但不確定哪種替代方案最好。主機正在執行 Ubuntu。例如,我發現qperf和。uperf``netpipe

此外,更一般地說,我開始想知道吞吐量性能的瓶頸通常是什麼。不總是CPU容量或鏈路的頻寬嗎?哪些是與覆蓋網路沒有直接關係的因素。

這是否意味著應用程序(或覆蓋網路)的吞吐量僅取決於傳輸一定數量的數據需要多少 CPU 週期,以及它如何壓縮數據以適應網路(如果這將成為瓶頸)。

UDP 受 CPU 和頻寬限制。它發送數據包而不保證它們被發送、傳輸或接收。

  • 如果發送方 CPU 太忙,則永遠不會發送數據包。
  • 如果頻寬跟不上,數據包會在傳輸過程中被丟棄。
  • 如果接收器 CPU 太忙或沒有準備好處理傳入的網路數據,它就會失去。
  • 如果應用程序沒有足夠快地從作業系統中提取數據包(並處理它們),它們就會失去。

一般來說,UDP 的性能是沒有意義的。沒有什麼能阻止您嘗試每秒發送 1 億個數據包。這會使發送方的 CPU 和網路飽和,而接收方可能什麼也得不到。

如果你真的想測試UDP,那是一個相當長的話題,值得一本書。首先,您需要監控錯誤率以及實際發送/接收的數據。

您應該使用 TCP 進行測試以測量主機之間的可用頻寬。iperf應該能夠做到這一點。

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