現行世代全18種類EC2インスタンスのHW情報をコマンドで比較してみた

2017.12.29

「やだ・・・EC2インスタンスタイプ・・・多すぎ?」

AWSの根幹をなすと言っても過言ではないEC2ですが、その歴史の長さ故、インスタンスタイプも現行世代だけで、18種類にまで増えております。増えたもんすなぁ・・・

そんな多種多様なインスタンスタイプ、使い分けについては、全て公式ドキュメントに記載されていますが、実際中身のハードウェア情報はどうなっているんだろうという気持ちになったハマコー。全インスタンスタイプのEC2を起動してみて、一括でHW情報の取得コマンドを流してみました。

いろいろ調べていく中で、最新世代のKVMベースのインスタンスでは、出力内容がかなり異なっていたり、いろいろ発見があったので、その内容を共有します。

はぁー、こりゃこりゃ。

実行対象のインスタンスタイプ(18種類)

今回、ハードウェア内容調査対象にしたインスタンスタイプはこちら。現行世代の全18種類を調査対象としています。起動するだけでもある程度は料金がかかるので、スペックは一番下のものを採用。後、re:Invent2017で発表されたばかりのi3.metal(ベアメタル)はプレビュー期間中なので、調査対象外です。

インスタンス種類一覧

  • 汎用
    • t2.nano
    • m5.large
    • m4.large
    • m3.medium
  • コンピューティング最適化
    • c5.large
    • c4.large
    • c3.large
  • メモリ最適化
    • x1e.xlarge
    • x1.16xlarge
    • r4.large
    • r3.large
  • 高速コンピューティング
    • p3.2xlarge
    • p2.xlarge
    • g3.4xlarge
    • f1.2xlarge
  • ストレージの最適化
    • h1.2xlarge
    • i3.large
    • d2.xlarge

HW情報取得のために実行したシェル

全てのインスタンスタイプで実行したシェルがこちら。最初にインスタンスタイプを出力した後、各ハードウェアの調査コマンドを実行しています。

detail-hardware.sh

#!/bin/bash
echo '---instance-type-------'
curl http://169.254.169.254/latest/meta-data/instance-type
echo 
echo '---dmidecode-------'
sudo dmidecode

echo '---cpuinfo-------'
echo 'cat /proc/cpuinfo'
cat /proc/cpuinfo

echo '---diskinfo-------'
echo 'df -hT'
sudo  df -hT

echo '---diskinfo-------'
echo 'sudo  fdisk -l'
sudo  fdisk -l

echo '---nvmelist-------'
echo 'nvme list'
sudo nvme list
  • dmidecode

    HW情報の詳細取得にdmidecodeコマンドを利用。 dmidecodeは、ハードウェア情報をDMI(SMBIOS)から取得して人間に読みやすい形で出力してくれます。

    参考:dmidecode

    便利ですね。自分は正直、こんなのあるの全然知りませんでした・・・オプション指定は様々ありますが、今回はオプション指定無しで実行し、全ての情報を取得しています。

  • cat /proc/cpuinfo

    CPU情報の取得には、定番のcat /proc/cpuinfoを利用します。/procディレクトリは特殊な存在で、物理的に存在しているわけではないが、Linuxシステムについての詳細な情報が格納されています。

  • df -hT

    ディスク内容確認のために、df -hTを利用します。-Tでファイルシステムを表示できます。

  • fdisk -l

    ディスクの詳細情報確認のため、fdisk -lを利用します。

  • nvme list

    次世代SSD接続規格、NVMEの情報を確認します。これだけ唐突に固有HWの確認っぽいですが、最新世代のインスタンスでは既にこれが採用され始めているので、その情報も取得してみようじゃないかという試みです。

    参考:次世代SSDの接続規格「NVMe」とは(前) :Computerworld

比較結果全テキスト

上記コマンドを全インスタンスで実行した結果は、GitHubにあげておきました。

HamadaKoji/ec2-instance-details-investigation

マニアックな詳細気になる方はこちらを適語参照ください。

全テキストをブログに書いてしまうとさすがに見づらいので、以降では、各項目ごとにインスタンスタイプで代表的に違う点をピックアップしながら解説していきます。

比較結果一覧「dmidecode System Information」

dmidecodeSystem Information部分の比較結果がこちら。

m5.large、c5.large

System Information
        Manufacturer: Amazon EC2
        Product Name: XX.large
        Version: Not Specified
        Serial Number: XXXXXXXX-6521-9dc0-9790-5c3c2f75b689
        UUID: XXXXXXXX-6521-9DC0-9790-5C3C2F75B689
        Wake-up Type: Power Switch
        SKU Number: Not Specified
        Family: Not Specified

上記以外のインスタンス

System Information
        Manufacturer: Xen
        Product Name: HVM domU
        Version: 4.2.amazon
        Serial Number: ec2c7a4a-1d9a-6556-b8d1-0a3b81da3ecb
        UUID: EC2C7A4A-1D9A-6556-B8D1-0A3B81DA3ECB
        Wake-up Type: Power Switch
        SKU Number: Not Specified
        Family: Not Specified

一番の注目は、なんといってもm5.largeとc5.largeで採用されているManufactgurerと、ProductNameの値。これらのインスタンスは、先日のre:Invent2017の前後で発表されたばかりのインスタンス(参考:NITRO世代(C5、M5)へのEC2インスタンスタイプ変更を試してみた(Amazon Linux編) #reinvent | Developers.IO)で、新しいHypervisor、KVMが採用されています。

従来のインスタンスでは、ProductNameはXenと表示されていたのですが、これがAmazonの独自仕様ぽく表示され、また、Product Nameにもインスタンスタイプが表示されるようになっています。

これは、KVMそのものを利用しているわけではなく、KVMを元にしたAmazon独自拡張のEC2用ハイパーバイザーを採用しているからのようです。いろいろやっとりますな。

Amazon公式ページの記載。

Q: C5 インスタンスの基礎となるハイパーバイザーとは何ですか?

C5 インスタンスは、コア KVM テクノロジーに基づいた新しい EC2 ハイパーバイザーを使用します。引用:よくある質問 - Amazon EC2(仮想サーバー) | AWS

また、上記には記載していませんが、C5とM5インスタンスでは、dmidecodeのChassis Information、Asset Tagで、インスタンスIDが取得できるようになっています。HW情報にインスタンスタイプが入っているのも違和感を感じますが、ここらへんも独自拡張の影響なんですかね。

従来ずっと利用されてきたXenから、Amazo独自仕様のハイパーバイザーへの進化は、EC2内部構造の非常に大きな進化と言えそうです。

比較結果一覧「dmidecode Memory」

dmidecode Memoryの結果一覧はこちら。

インスタンスタイプ モデル Memory Array
汎用 t2.nano Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 512 MB
Error Information Handle: Not Provided
Number Of Devices: 1
m5.large -
m4.large Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 8 GB
Error Information Handle: Not Provided
Number Of Devices: 1
m3.medium Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 3840 MB
Error Information Handle: Not Provided
Number Of Devices: 1
コンピューティング最適化 c5.large -
c4.large Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 3840 MB
Error Information Handle: Not Provided
Number Of Devices: 1
c3.large Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 3840 MB
Error Information Handle: Not Provided
Number Of Devices: 1
メモリ最適化 x1e.xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 122 GB
Error Information Handle: Not Provided
Number Of Devices: 8
x1.16xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 976 GB
Error Information Handle: Not Provided
Number Of Devices: 61
r4.large Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 15616 MB
Error Information Handle: Not Provided
Number Of Devices: 1
r3.large Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 15625 MB
Error Information Handle: Not Provided
Number Of Devices: 1
高速コンピューティング p3.2xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 61 GB
Error Information Handle: Not Provided
Number Of Devices: 4
p2.xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 61 GB
Error Information Handle: Not Provided
Number Of Devices: 4
g3.4xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 122 GB
Error Information Handle: Not Provided
Number Of Devices: 8
f1.2xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 122 GB
Error Information Handle: Not Provided
Number Of Devices: 8
ストレージの最適化 h1.2xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 32 GB
Error Information Handle: Not Provided
Number Of Devices: 2
i3.large Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 15616 MB
Error Information Handle: Not Provided
Number Of Devices: 1
d2.xlarge Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 31232 MB
Error Information Handle: Not Provided
Number Of Devices: 2

dmidecodeコマンドでは、CPUやメモリの情報も取得できるのですが、何故かC5とM5インスタンスではdmidecodeでそれらの情報が出力されていませんでした。Hypervisor起因なのかどうかはわかりません。謎だ。

各インスタンス最小スペックで起動しているんですが、メモリ最適化インスタンスx1.16xlargeのDevicesが61になっているのは目を引きます。最小でvCPU64なのでなかなか利用するには敷居が高いインスタンスですね。X1e、X1ともにRAMあたりの料金が最も安価なインスタンスとなっています。

EC2インスタンスが秒課金になったので、メモリ4TBのx1e.32xlargeも一瞬起動してみたいもんです・・・ 一体この世でどれぐらいの台数起動してるんでしょうかね。恐れ入ります。東京リージョン、すんなり起動するんだろうか。

CPU比較結果一覧

cat /proc/cpuinfoの結果はこちら。

インスタンスタイプ モデル cpuinfo
汎用 t2.nano Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
m5.large Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
m4.large Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
m3.medium Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
コンピューティング最適化 c5.large Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
c4.large Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz
c3.large Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
メモリ最適化 x1e.xlarge Intel(R) Xeon(R) CPU E7-8880 v3 @ 2.30GHz
x1.16xlarge Intel(R) Xeon(R) CPU E7-8880 v3 @ 2.30GHz
r4.large Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
r3.large Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
高速コンピューティング p3.2xlarge Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
p2.xlarge Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
g3.4xlarge Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
f1.2xlarge Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
ストレージの最適化 h1.2xlarge Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
i3.large Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
d2.xlarge Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz

こうやって並べてみると、KVM搭載のC5とM5の特別感が、改めて極まりますな!

Xeon Platinumに関してはIntel公式ページには正式なスペック情報が開示されていないようでしたが、Xeon Platinum - Intel - WikiChipというサイトで、その概要が窺い知れます。

また、メモリ最適化インスタンスのx1eとX1には、Intel® Xeon® Processor E7-8880 v3 (45M Cache, 2.30 GHz) Product Specificationsが採用されており、高周波高集積のE7が採用されているのがわかります。

その他は、全てE5のv2、v3、v4が採用されています。

ディスク比較結果一覧

ディスク関連コマンドについても、大きくM5、C5、F1インスタンスと、それ以外で内容が異なりました。

m5.large、c5.large、f1.2xlarge

---diskinfo-------
df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  3.8G   44K  3.8G   1% /dev
tmpfs          tmpfs     3.8G     0  3.8G   0% /dev/shm
/dev/nvme0n1p1 ext4      7.8G  1.1G  6.6G  15% /
---diskinfo-------
sudo  fdisk -l

Disk /dev/nvme0n1: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt


#         Start          End    Size  Type            Name
 1         4096     16777182      8G  Linux filesyste Linux
128         2048         4095      1M  BIOS boot parti BIOS Boot Partition
---nvmelist-------
nvme list
Node             SN                   Model                                    Version  Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- -------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     vol0b3359315800e9e97 Amazon Elastic Block Store               1.0      1           0.00   B /   8.59  GB    512   B +  0 B   1.0     

ディスクデバイス名にnvmeインターフェースが採用されていることがわかります。従来のEBSのデバイス名は/dev/xvda1と表示されていましたが、/dev/nvme0n1p1と明らかにデバイス名が異なっていますね。逆に、Dial label typeの値などは全く同じです。

ルートボリュームのファイルシステムなどは、従来通りext4で変わりません。

C5、M5、F1以外のインスタンス

---diskinfo-------
df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  236M   56K  236M   1% /dev
tmpfs          tmpfs     245M     0  245M   0% /dev/shm
/dev/xvda1     ext4      7.8G  1.1G  6.6G  15% /
---diskinfo-------
sudo  fdisk -l

Disk /dev/xvda: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt


#         Start          End    Size  Type            Name
 1         4096     16777182      8G  Linux filesyste Linux
128         2048         4095      1M  BIOS boot parti BIOS Boot Partition
---nvmelist-------
nvme list
No NVMe devices detected.

ディスクサイズ以外は全て同じ結果です。nvme listは何も表示されず、従来通りのディスク内容が表示されているのがわかります。

まとめ

というわけで、現行世代EC2インスタンス18種類(ベアメタル除く)のHW情報を出力して、主要項目を比較してみました。自分も理解が大分曖昧だったんですが、コマンドの内容を調べながら各インスタンスの特徴を改めて棚卸しすることで、改めて理解が深まったので良かったです。むっちゃ時間かかったけど・・・

数が大分増えたEC2ファミリーですが、比較を通して、それぞれのインスタンスの特徴がおぼろげながら伝わると良いかなと思います。

全出力結果はこちらに挙げているので、お暇な方はご覧いただければ、いろいろ捗るかもね!

HamadaKoji/ec2-instance-details-investigation

それでは、今日はこのへんで。濱田(@hamako9999)でした。

EC2インスタンスの使い分けについての参考資料

各EC2インスタンスのユースケース等使い分け方の方針については、Blackbelt資料のこちらが参考になります。

(余談)この記事を書こうと思ったきっかけ

弊社大瀧のこちらの記事([新機能] Amazon EC2のコンピューティング最適化インスタンスC5が利用可能に | Developers.IO)がきっかけです。

この記事でdmidecodeコマンド自体を知り、「どうせなら、全インスタンスで実行して比較してみればええやん」という思いたちから書いてみました。同僚の記事に刺激を受けることはよくあることです。感謝!!