ネットワーク性能が20GbpsのEC2 m4.16xlargeが使用可能になりました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

先程20Gbpsのネットワーク性能を発揮するm4.16xlargeが使用可能になったのでレポートします。

Expanding the M4 Instance Type – New M4.16xlarge

m4.16xlarge

m4.16xlargeは昨年発表されたM4ファミリーのEC2の上位タイプとなります。今まではm4.10xlargeまででしたので全体的スペックが160%となっています。ネットワークやEBS性能はm4.10xlargeの2倍になっています。

タイプ 仮想CPU メモリ (GB) ストレージ ネットワーク EBS最適化 備考
スループット (Mbps) 最大IOPS (16KB) 最大帯域幅 (MB/s)
m4.large 2 8 EBSのみ 450 3,600 56.25 既存
m4.xlarge 4 16 EBSのみ 750 6,000 93.75 既存
m4.2xlarge 8 32 EBSのみ 1,000  8,000 125 既存
m4.4xlarge 16 64 EBSのみ 2,000 16,000 250 既存
m4.10xlarge 40 160 EBSのみ 10 Gbps 4,000 32,000 500 既存
m4.16xlarge 64 256 EBSのみ 20 Gbps 10,000 64,000 1,250 New!

大きなポイントは、CPUがIntel(R) Xeon(R) CPU E5-2686 v4、Elastic Network Adapter(ENA)に対応、という2点です。

m4.16xlargeを起動する

以下の環境でm4.16xlargeを起動しました。

CPU情報

まずはCPU情報を確認します。CPUのモデル名はIntel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHzとなっています。

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
stepping        : 1
microcode       : 0xb000014
cpu MHz         : 1853.835
cache size      : 46080 KB
physical id     : 0
siblings        : 32
core id         : 0
cpu cores       : 16
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq monitor est ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm ida fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt
bugs            :
bogomips        : 4600.06
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

・
・
・

メモリ情報

次にメモリ情報を確認します。認識しているメモリのサイズは264146432 kBとなっています。

$ cat /proc/meminfo
MemTotal:       264146432 kB
MemFree:        263367748 kB
MemAvailable:   263339388 kB
Buffers:           11244 kB
Cached:           121256 kB
SwapCached:            0 kB
Active:           127724 kB
Inactive:          19084 kB
Active(anon):      14336 kB
Inactive(anon):       56 kB
Active(file):     113388 kB
Inactive(file):    19028 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         14404 kB
Mapped:            11712 kB
Shmem:                64 kB
Slab:             104528 kB
SReclaimable:      36120 kB
SUnreclaim:        68408 kB
KernelStack:        8464 kB
PageTables:         2204 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    132073216 kB
Committed_AS:     111904 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       12288 kB
DirectMap2M:     2084864 kB
DirectMap1G:    267386880 kB

ネットワーク

以下のドキュメントを元にENAの対応状況を確認します。

VPC 内の Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化

カーネルモジュール (ena)

Amazon Linuxを使用しているため標準で導入されています。

$ modinfo ena
filename:       /lib/modules/4.4.19-29.55.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version:        1.0.2
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
srcversion:     EB49676051BBF026315D272
alias:          pci:v00001D0Fd0000EC21sv*sd*bc*sc*i*
alias:          pci:v00001D0Fd0000EC20sv*sd*bc*sc*i*
alias:          pci:v00001D0Fd00001EC2sv*sd*bc*sc*i*
alias:          pci:v00001D0Fd00000EC2sv*sd*bc*sc*i*
depends:
intree:         Y
vermagic:       4.4.19-29.55.amzn1.x86_64 SMP mod_unload modversions
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable)
			  0 - Automatically choose according to device capability (default)
			  1 - Don't push anything to device memory
			  3 - Push descriptors and header buffer to device memory (int)
parm:           enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int)
parm:           enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int)
parm:           numa_node_override_array:Numa node override map
 (array of int)
parm:           numa_node_override:Enable/Disable numa node override (0=disable)
 (int)

Amazon Linux以外のLinuxディストリビューションの場合は、以下の内容に基いてenaモジュールを導入してください。

Windows Serverの場合は、OS設定は特にありません。

インスタンス属性 (enaSupport)

インスタンスで拡張ネットワーキングenaSupport属性の状態を確認します。
m4.16xlargeであるため有効になっています。

$ aws ec2 describe-instances --instance-id i-12345678901234567 --query Reservations[].Instances[].EnaSupport --region ap-northeast-1
[
    true
]

イメージ属性 (enaSupport)

イメージ属性を確認します。
ところがAuthFailureが出力されてしまいます。ドキュメントによると、自分のアカウントに属していないイメージの場合はAuthFailureが出力する場合があるようです。今回はパブリックイメージを使用しているため権限がなかったようです。Amazon LinuxであるためenaSupportが設定されていると判断して先に進めます。

$ aws ec2 describe-image-attribute --image-id ami-1a15c77b --attribute enaSupport --region ap-northeast-1

An error occurred (AuthFailure) when calling the DescribeImageAttribute operation: Not authorized for image:ami-1a15c77b

ネットワークインターフェイスドライバ

インターフェイスの状態を確認します。以下のようにドライバはenaとなっています。

$ ethtool -i eth0
driver: ena
version: 1.0.2
firmware-version:
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

ネットワークパフォーマンスを確認する

ENAのパフォーマンスを計測してみます。計測にはiPerfを使用します。使用方法の詳細はこちらのブログエントリを参照ください。

以下の環境で計測を行いました。

  • MTU:9001 (ドキュメントの内容より
  • 対抗インスタンス:m4.16xlarge (m4.16xlargeのENAのパフォーマンスを計測するため)
  • プレイスメントグループ:あり

以下のコマンドを実行し、10回試行しました。

サーバ側

サーバ側は普通にTCPで待ち受けます。

$ iperf -s
クライアント側

クライアント側は1並列と5並列で実行します。

$ iperf -c 192.0.2.1
$ iperf -c 192.0.2.1 -P 5
結果

1並列の計測結果は以下になります。
平均で9.40Gbpsの帯域幅となっています。

インターバル 転送量 帯域幅
0.0-10.0 sec 10.9 GBytes 9.34 Gbits/sec
0.0-10.0 sec 10.7 GBytes 9.23 Gbits/sec
0.0-10.0 sec 11.0 GBytes 9.44 Gbits/sec
0.0-10.0 sec 11.1 GBytes 9.52 Gbits/sec
0.0-10.0 sec 10.8 GBytes 9.30 Gbits/sec
0.0-10.0 sec 11.0 GBytes 9.44 Gbits/sec
0.0-10.0 sec 10.8 GBytes 9.24 Gbits/sec
0.0-10.0 sec 10.9 GBytes 9.33 Gbits/sec
0.0-10.0 sec 11.2 GBytes 9.58 Gbits/sec
0.0-10.0 sec 11.1 GBytes 9.57 Gbits/sec

5並列の計測結果は以下になります。
全て20.6Gbpsとなっています。ENAの限界まで速度を出せています。

インターバル 転送量 帯域幅
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec
0.0-10.0 sec 24.0 GBytes 20.6 Gbits/sec

さいごに

今までENAはx1.32xlargeのみで使用可能でした。x1.32xlargeは費用が高いため高スループットなネットワーク環境が必要な場合でも利用には二の足を踏んでいたと思います。しかしm4.16xlargeが出たため3割以下の価格で20Gbpsのインスタンスを利用できるようになりました。CPUもBroadwellアーキテクチャのXeon E5-2686 v4となっており高いパフォーマンスが期待できます。 HPC環境などでは丁度よいインスタンスではないでしょうか。