Bandwidth

如何在兩台主機之間傳輸大文件時找到瓶頸

  • August 26, 2013

我們經常需要在兩台主機之間傳輸巨大的文件(超過 50 GB),而傳輸速率似乎永遠無法達到網路的預期吞吐量。有幾個點可能是瓶頸,但它們的每一個理論上限都遠遠超過了實際的傳輸速率。這是一個典型的設置:

筆記型電腦 –> 802.11n –> AP –> CAT 6 電纜 –> 10/100 Mbits 路由器 –> 台式機

在這方面,瓶頸顯然是路由器,它將傳輸速率限制在 100 Mbits/sec。即使這樣,我也很少看到傳輸速率(使用 scp)超過 9.5 MB/s,即 76 Mbits/sec,或者僅為理論最大限制的 76%。

接入點真的有 24% 的成本,還是有其他限制速度的東西?它可能是磁碟 I/O(儘管 SATA 的額定速度為 1.5 Gbps),也可能是主機板上磁碟和 NIC 之間的任何東西(我如何測量它?)。

有沒有辦法確定(*)瓶頸在哪裡?如果我不能從 100 Mbps 路由器獲得超過 76 Mbps,將網路升級到千兆位會增加吞吐量,還是因為瓶頸在其他地方而仍然可以獲得 76 Mbps?

(*) 或者至少在某種程度上足以說服老闆同意投資升級網路的那一部分

你的問題是你一次測試太多東西:

  • 磁碟讀取速度
  • SSH 加密
  • 無線的
  • SSH解密
  • 磁碟寫入速度

既然您提到了 SSH,我將假設這是一個 unix 系統…

您可以通過簡單的方法排除磁碟讀取速度的任何問題

dd if=yourfile of=/dev/null #or
pv yourfile > /dev/null

在接收端你可以做一個簡單的磁碟寫測試

dd if=/dev/zero of=testfile bs=1M count=2000 # or
dd if=/dev/zero bs=1M count=2000 | pv > testfile

dd 並不是真正的“基準”,但由於 scp 使用順序 IO,它足夠接近

您還可以通過執行類似的操作來測試 SSH

dd if=/dev/zero bs=1M count=100 | ssh server dd of=/dev/null # or
dd if=/dev/zero bs=1M count=100 | pv | ssh server dd of=/dev/null

最後,為了排除SSH是瓶頸,可以使用nc來測試網路性能

server$ nc -l 1234 > /dev/null
client$ dd if=/dev/zero bs=1M count=100 | pv | nc server 1234 # or
client$ dd if=/dev/zero bs=1M count=100 | nc server 1234

如果您真的想正確測試網路,請安裝和使用類似 iperf 的東西,但 nc 是一個好的開始。

我將從 nc 測試開始,因為這將排除大多數事情。您還應該在不使用無線的情況下執行測試。802.11n 可以輕鬆地最大化 100mbit 埠,但前提是您正確設置了它。

(Ubuntu >= 12.04 預設為 netcat-openbsd。nc -l -p 1234 > /dev/null如果您使用的是 netcat-traditional,可能是您想要的)。

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