這篇的後續可以參考「Amazon EC2 的網路效能」這篇。
最近在在調整跑在 Amazon EC2 上 OpenVPN server 的效能,要想辦法把 network throughput 拉高,當作在導入 WireGuard 之前的 workaround,但看起來還是頗有用,記錄一下可以調整的部份...
在還沒灌大量流量前是用 t3a.nano
(開 Unlimited mode),然後會觀察到的瓶頸是 OpenVPN 的 daemon 吃了 100% CPU loading,最高速度卡在 42MB/sec 左右。
第一個想到的是看看 OpenVPN server 有沒有可以使用多 CPU 的方式,但查了資料發現 OpenVPN server 無法使用 threading 或是 fork 之類的方法善用多顆 CPU,所以就開始想其他方法...
接著看到我們目前用的是 AES-256-CBC
了,網路上很多文章都有提到 AES-128-CBC
會快一些,但我們的 OpenVPN client 已經是設死都用 AES-256-CBC
了,這個就沒辦法了...
而第一個可行的解法是把 AMD-based 的 t3a.nano
換成 ARM-based 的 t4g.nano
,還是 100% 的 CPU loading,但直接多了 50%+ 的效能,到了 69MB/sec。
第二個解法是找資料時發現的 fast-io
參數,加上去以後可以再快一些,到 77MB/sec。
有了這兩個 workaround 應該就堪用了,接下來是發現在傳大量資料跑一陣子後速度會掉下來,於是開了兩台 t4g.nano
用 iperf 對測了一下,發現會逐步掉速:
- 前 15 秒可以直接到 5Gbps,就是 AWS 網頁上宣稱的最高速度,接下來降到 800Mbps 左右。
- 到 180 秒左右後降到 300Mbps。
- 到 210 秒左右後回到 800Mbps。
- 到 300 秒左右後降到 500Mbps。
- 到 300 秒左右後降到 300Mbps。
- 到 1260 秒左右後降到 30Mbps,後面就一直維持這個速度了。
看起來 network bandwidth credit 是分階段的,但 30Mbps 真的有點低...
在換成四倍大的 t4g.small
測試後發現也只能到 40MB/sec 左右 (比較疑惑的是,居然不是四倍?),目前上了 c6g.medium
,但看起來網路的部份也還是有瓶頸,在 46MB/sec 左右,要再想一下下一步要怎麼調整...
但以目前看到的情況總結,如果能用 ARM 架構就儘量用,效率與價錢真的是好 x86-64 不少...