本教學課程說明如何計算網路傳輸量,包括在Google Cloud 內部,以及使用 Cloud Interconnect 連線的內部部署或第三方雲端位置。本文將說明如何分析結果、列出可能影響網路效能的變數,並提供一些疑難排解提示。
限制和注意事項
- 適用 Cloud Interconnect 限制。詳情請參閱 Cloud Interconnect 配額。
- NIC 限制: Google Cloud 會計算每個虛擬機器 (VM) 執行個體的頻寬,而非每個網路介面 (NIC) 或 IP 位址。VM 的機器類型會定義其最大輸出率,但只有在特定情況下才能達到該率。請參閱這份表格,瞭解每個機器類型的 vCPU 數量。
路徑中的其他裝置 (防火牆、緩衝區較小的交換器和其他廠商的裝置) 和其限制也適用。請執行下列工作,以減輕這些限制。
- 收集路徑中防火牆和交換器的網路統計資料。
- 進行 Cloud Interconnect 測試時,請盡可能在內部部署主機和 Google Edge 裝置之間略過盡可能多的裝置。
- 找出並驗證內部網路和 Google Cloud VM 之間路徑中的所有裝置,看看是否為吞吐量問題的來源。
測量網路總處理量的工具總覽
本教學課程將示範如何使用下列工具計算網路傳輸量:
iPerf3:這是網路測試工具,能夠建立 TCP/UDP 資料串流 (單執行緒或多執行緒),以及測量傳輸該資料串流的網路總處理量。
注意:建議僅在單 CPU 機器上使用 iPerf3。
Netperf:這項工具與 iPerf3 類似,但適合在多 CPU 執行個體上進行吞吐量測試,因為這些執行個體在單一 CPU 上受 CPU 限制。
tcpdump:這是指令列封包分析器,可擷取封包詳細資料和 TCP/IP 通訊,以便進行更進階的疑難排解作業。tcpdump 工具與 Wireshark 等其他工具相容。
Netstat:這是一項指令列網路公用程式,可顯示傳輸控制通訊協定 (傳入和傳出)、轉送表和多個網路介面 (網路介面控制器或軟體定義網路介面) 的網路連線,以及網路通訊協定統計資料。
mtr:網路診斷工具,可執行 traceroute 和 ping 函式。它會限制個別封包可能穿越的跳躍次數,並監聽其到期日的回應,以便在路徑上探測路由器。
使用 iPerf3 測量總處理量
請按照下列程序,測量單一 VM 執行個體的處理量。
選擇大型機型
如要執行吞吐量測試,請使用大型機器類型,例如 n1-standard-8。這個機器類型的輸出處理量上限為 16 Gbps,因此每個 VM 的輸出處理量不會干擾測試。
安裝工具
在 Linux VM 執行個體上安裝 iPerf3、mtr、netstat 和 tcpdump
如為以 Debian 為基礎的發行版,請執行下列指令:
sudo apt-get update sudo apt-get install iperf3 tcpdump mtr netstat
如為 Redhat 架構的發行版本,請執行下列指令:
yum update yum install iperf3 tcpdump mtr netstat
安裝 netperf
如為以 Debian 為基礎的發行版,請執行下列指令:
sudo apt-get install git build-essential autoconf texinfo -y git clone https://github.com/HewlettPackard/netperf.git cd netperf ./autogen.sh ./configure --enable-histogram --enable-demo=yes make cp src/netserver ~/.local/bin cp src/netperf ~/.local/bin
如為 Redhat 架構的發行版本,請執行下列指令:
sudo yum install git build-essential autoconf texinfo -y git clone https://github.com/HewlettPackard/netperf.git cd netperf ./autogen.sh ./configure --enable-histogram --enable-demo=yes make cp src/netserver ~/.local/bin cp src/netperf ~/.local/bin
執行先決條件測試
- 請確認 VLAN 連結大小設定正確無誤。詳情請參閱「修改 VLAN 連結」。
- 在連線的兩端 (每個終端機) 執行
top
或htop
指令,監控 CPU 用量。 請先使用
netstat
指令收集網路統計資料,再執行任何測試。netstat -s >> netstat.log
在另一個終端機中,執行
tcpdump
指令,然後再執行任何擷取動作,並使用snaplen
參數值128
。請在兩個端點上執行這項指令。
sudo /usr/sbin/tcpdump -s 128 -i [DEVICE_INTERFACE] host [IP_ADDRESS of remote side] -w mycap.pcap
取得來源和目的地主機的讀取和寫入記憶體大小。
$ sysctl net.ipv4.tcp_rmem $ sysctl net.ipv4.tcp_wmem $ sysctl net.core.rmem_max $ sysctl net.core.rmem_default $ net.core.wmem_max $ net.core.wmem_default $ uname -r $ cat /etc/os-release
執行 iperf3 測試
由於每個資料流的限制為 3 Gbps,建議您執行多個並行 iperf3
測試串流。建議您至少執行四次測試 (最多十次),以彌補頻寬限制並取得實用的結果。
在另一個終端機中,在連線一端 (VM 或內部機器) 上執行
iperf3
伺服器。多個串流需要多個iperf3
伺服器。使用
udp
標記執行 iPerf3 工具,以便進行 Cloud Interconnect 測試。如果透過 UDP 達成所需的傳輸量,您就需要執行進一步的疑難排解步驟。如要透過指令列執行多個
iperf3
伺服器,請執行下列指令:$ iperf3 -s -p 5101&; iperf3 -s -t 30 -p 5102&; iperf3 -s -p 5103 &
使用下列 bash 指令碼執行多個 iperf3 伺服器:
#!/bin/bash #start iperf3 server running in background for i in `seq 0 9`; do iperf3 -s -B 10.0.100.35 -t 30 -u -p 521$i & done
iperf3 client
預設會執行 10 秒,這可能不足以讓 TCP 達到最大處理量。將 DURATION
值設為至少 30 秒,以便取得更可靠的結果。
iperf3 -c [server IP address] -P [THREADS] -t [DURATION]
執行多個 iperf3 UDP 串流的 Bash 指令碼
echo "UDP iperf test - 10 streams" for i in `seq 0 9`; do iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -u -b 1G -l 1390 -t10 -p 521$i & done
執行多個 iperf3 TCP 串流的 Bash 指令碼
echo "UDP iperf test - 10 streams" for i in `seq 0 9`; do iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -b 1G -l 1390 -t10 -p 521$i & done
在 iperf3
測試執行期間,請監控兩部裝置的 CPU 負載。如果 CPU 負載接近 100%,CPU 就是一個 iperf3 執行緒的瓶頸。在這種情況下,請使用 Netperf 工具,因為它支援多個 CPU。
如果無法執行 Netperf,您可以在不同的終端機和不同連接埠上同時啟動多個 iPerf3 伺服器和用戶端。
分析測試結果
請執行下列步驟。
- 檢查
iperf3
用戶端結果的頻寬和封包遺失情形。 - 檢查
iperf3
伺服器結果,找出任何無序封包。 執行封包擷取分析。執行下列指令,將 pcap 檔案轉換成文字檔。
tcpdump -A -[PCAP-FILENAME].pcap > [TXT-FILENAME].txt
執行下列指令,取得總封包數量和無序封包數量。
grep -e "Total" -A1 pcap [TXT-FILENAME]
輸出內容如下:
gcpvm-send-5210.txt:Total UDP packets: 874032 gcpvm-send-5210.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5211.txt:Total UDP packets: 791218 gcpvm-send-5211.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5212.txt:Total UDP packets: 961510 gcpvm-send-5212.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5213.txt:Total UDP packets: 961517 gcpvm-send-5213.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5214.txt:Total UDP packets: 961501 gcpvm-send-5214.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5215.txt:Total UDP packets: 961521 gcpvm-send-5215.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5216.txt:Total UDP packets: 889932 gcpvm-send-5216.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5217.txt:Total UDP packets: 961483 gcpvm-send-5217.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5218.txt:Total UDP packets: 961479 gcpvm-send-5218.txt:Total out-of-order packets: 0, missing packets: 0 gcpvm-send-5219.txt:Total UDP packets: 961518 gcpvm-send-5219.txt:Total out-of-order packets: 0, missing packets: 0
以下分析顯示效能測試期間的封包遺失率:
$ grep -e "Total" -A1 onPrem-send-*.txt
輸出內容如下:
"Total" -A1 onPrem-send-*.txt onPrem-send-5210.txt:Total UDP packets: 858698 onPrem-send-5210.txt:Total out-of-order packets: 0, missing packets: 5408 -- onPrem-send-5211.txt:Total UDP packets: 857667 onPrem-send-5211.txt:Total out-of-order packets: 0, missing packets: 4929 -- onPrem-send-5212.txt:Total UDP packets: 857126 onPrem-send-5212.txt:Total out-of-order packets: 0, missing packets: 5349 -- onPrem-send-5213.txt:Total UDP packets: 857424 onPrem-send-5213.txt:Total out-of-order packets: 0, missing packets: 5495 -- onPrem-send-5214.txt:Total UDP packets: 857139 onPrem-send-5214.txt:Total out-of-order packets: 0, missing packets: 4692 -- onPrem-send-5215.txt:Total UDP packets: 857175 onPrem-send-5215.txt:Total out-of-order packets: 0, missing packets: 4789 -- onPrem-send-5216.txt:Total UDP packets: 857104 onPrem-send-5216.txt:Total out-of-order packets: 0, missing packets: 5196 -- onPrem-send-5217.txt:Total UDP packets: 857122 onPrem-send-5217.txt:Total out-of-order packets: 0, missing packets: 5423 -- onPrem-send-5218.txt:Total UDP packets: 857383 onPrem-send-5218.txt:Total out-of-order packets: 0, missing packets: 5283 -- onPrem-send-5219.txt:Total UDP packets: 857313 onPrem-send-5219.txt:Total out-of-order packets: 0, missing packets: 4934
前往裝置頁面,查看埠傳輸量。
如果
netstat
輸出內容顯示讀取/寫入錯誤,可能需要調整 TCP/UDP 大量流量。如果有無序封包,應在 VPN 閘道中執行封包擷取作業,以便進一步分析。 如要進一步瞭解如何在 VPN 閘道中執行封包擷取作業,請提交支援案件。
如果
iperf3
UDP 測試達到所需的傳輸量,則問題一定出在其他地方,可能需要調整 TCP。