前一篇「在 AWS 上面的 OpenVPN Server 效能」最後的問題就是 EC2 instance 本身的網路效能,畢竟是公司要用的,還是實際測一下數字,之後有人接手的時候也比較清楚是怎麼選這個大小的...
這邊拿的是 AWS 的 ap-southeast-1
(Singapore) 的 EC2 測試,直接在同一個 subnet 裡面開兩台一樣的機器跑 iperf 測試。
機器開機後會先跑這串指令 (除了安裝 iperf 的指令,其他的是出自我自己 wiki 上的 Ubuntu 這頁),然後再重開機:
sudo fallocate -l 512M /swapfile; sudo chmod 600 /swapfile; sudo mkswap /swapfile; sudo swapon /swapfile; echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab; echo -e "net.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr" | sudo tee /etc/sysctl.d/99-tcp.conf; sudo sysctl -p /etc/sysctl.d/99-tcp.conf; sudo apt update; sudo apt dist-upgrade -y; sudo apt install -y apache2-utils apt-transport-https build-essential curl dnsutils dstat git jq locales moreutils most mtr-tiny net-tools p7zip-full pigz prometheus-node-exporter rsync sharutils software-properties-common sysstat unrar unzip vim-nox wget zsh zsh-syntax-highlighting zstd; sudo apt install -y iperf; sudo apt clean
接下來就是一台跑 iperf -s
,另外一台跑 iperf -c 10.x.x.x -i 1 -t 3600
讓他跑一個小時看結果了。
我都有跑 tmux 再連到這些機器上,這樣可以捲回去看每一秒的傳輸速度,就可以看出來變化了,不過這邊還是簡單的只列出最高速度 (burstable) 與穩定輸出的速度 (baseline):
EC2 instance | Baseline | Burstable | vCPU | RAM | Pricing (USD$) |
---|---|---|---|---|---|
c6g.medium | 500Mbps | 10Gbps | 1 | 2GB | 0.0392 |
c6g.large | 750Mbps | 5Gbps (claimed 10Gbps) | 2 | 4GB | 0.0784 |
c6g.xlarge | 1.25Gbps | 10Gbps | 4 | 8GB | 0.1568 |
t4g.small | 125Mbps | 5Gbps | 2 | 2GB | 0.0212 |
t4g.medium | 255Mbps | 5Gbps | 2 | 4GB | 0.0424 |
t4g.large | 510Mbps | 5Gbps | 2 | 8GB | 0.0848 |
t4g.xlarge | 1Gbps | 5Gbps | 4 | 16GB | 0.1696 |
這邊沒列出來的是 burstable 可以持續的時間,但這跟你機器吃的網路資源有關,我就決定只用 baseline 來做決策了,這樣可能會多花一點錢,但會少很多麻煩。
另外這次在處理的過程有被同事提醒各種 bandwidth overhead,所以就順便查了一下資料:
- OpenVPN 本身的 overhead 大約是 5% (跑 UDP 的時候):「OpenVPN performance」。
- SSH 也有些 overhead,大約是 6% (把來回的封包都算進去):「What is the overhead of SSH compared to telnet?」。
- rsync 的部份鐵定也有 overhead,但這邊就沒找到現成的文章有統計過了。
- 另外我自己之前做實驗發現 TCP BBR 的 retransmission algorithm 還蠻激進的,會有 10% packet loss,改用預設的 CUBIC 會好很多,大約 1% 到 2% 左右。
綜合這些測試,我自己抓了 35% 的 overhead 來推估,最後是用 c6g.large
來養 VPN server。750Mbps 的實際流量大約可以包進 550Mbps 的原始流量,大約是 68MB/sec。
不過新加坡與印尼之間的 internet bandwidth 好像還是不太夠,有時候深夜跑也跑不滿... 不過之後 VPN 上的 client 會愈來愈多,應該是不需要降...