レイテンシを最小限に抑えたい
皆さんはEC2間の通信のレイテンシを最小限に抑える方法はないか気になったことはありますか。
基幹システムを構築する際にレイテンシを最小限に抑えたい。そんな方のご参考になればと思います。
全く関係ないですが、リニアが完成すると東京と大阪リージョンを1時間程度で移動できるらしいですね。
10TBのハードディスクを抱えれば、10TB/h = 2.78GB/sの速度が出ることになります。(強い)
Network Manager でレイテンシを調べる
そもそもAZ間(距離の離れたデータセンタ間)のレイテンシが長いのは、感覚的に理解できると思います。
Network Manager > インフラストラクチャのパフォーマンスで、実際のレイテンシを見たところ、AZ跨ぐと1ms以上になりそうです。
では、同一AZであれば、レイテンシが短いのではと調べてみると、apne1-az1内では0.3ms程度に抑えられるようです。AZ跨ぐ構成から1/3になってて感動です。
足りない!足りない!速さが足りない!
では0.3msより短くならないのかと考えたときに、プレイスメントグループが思い当りました。
プレイスメントグループ(クラスタ配置)は、同一サーバラック内にインスタンスを配置し、もっと低いレイテンシを実現するものです。
通常通り起動したEC2インスタンスとプレイスメントグループ(クラスタ配置)で起動したEC2インスタンス上で、ping(ICMP)とiperf(TCP)を使ってレイテンシを計測します。
同一AZ内で起動する
ping(ICMP)
64 bytes from 172.16.3.171: icmp_seq=6 ttl=127 time=0.147 ms
64 bytes from 172.16.3.171: icmp_seq=7 ttl=127 time=0.136 ms
64 bytes from 172.16.3.171: icmp_seq=8 ttl=127 time=0.128 ms
iperf3(TCP)
"max_rtt" : 900
"min_rtt" : 872
"mean_rtt": 887
プレイスメントグループ(クラスタ配置)で起動する
ping(ICMP)
64 bytes from 172.16.3.171: icmp_seq=6 ttl=127 time=0.134 ms
64 bytes from 172.16.3.171: icmp_seq=7 ttl=127 time=0.132 ms
64 bytes from 172.16.3.171: icmp_seq=8 ttl=127 time=0.139 ms
iperf3(TCP)
"max_rtt" : 889
"min_rtt" : 870
"mean_rtt": 878
あまり変わらないですね。気持ち短くなってますでしょうか。
プレイスメントグループ(クラスタ配置)はそこまで効果がないようですが、レイテンシにシビアなワークロードでは、採用しないよりはマシかと思います。
足りない!足りない!速さが足りない!(2回目)
このままでは終われないので、更に調査を進めてみると、ENA Expressが発表されており、更にレイテンシを短くできるようだ。
ちなみにENA Expressの土台となっているSRDは、AWSがデータセンターネットワーク向けに開発したトランスポート層のプロトコルで、Nitro Cardで動作しているようです。
では、計測してみます。
ENA Express 有効化して起動する
ping(ICMP)
64 bytes from 172.16.3.171: icmp_seq=6 ttl=127 time=0.136 ms
64 bytes from 172.16.3.171: icmp_seq=7 ttl=127 time=0.124 ms
64 bytes from 172.16.3.171: icmp_seq=8 ttl=127 time=0.129 ms
iperf3(TCP)
"max_rtt" : 405
"min_rtt" : 372
"mean_rtt": 386
ICMPは特に変化はないようです。それもそうで、SRDはトランスポート層で動作するため、ICMPのようにネットワーク層の上で操作するプロトコルは関係ないです。
通常通信の大部分のトラフィックを占めるであろうTCP通信については、半分ほどになっていますね。完璧です。
私が思いつく限りTCP RTT 0.386msが限界でしたが、皆さんもレイテンシの最短に挑戦して結果をお知らせ頂けると嬉しいです!