現行世代全18種類EC2インスタンスのHW情報をコマンドで比較してみた
「やだ・・・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情報取得のために実行したシェル
全てのインスタンスタイプで実行したシェルがこちら。最初にインスタンスタイプを出力した後、各ハードウェアの調査コマンドを実行しています。
#!/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」
dmidecodeのSystem 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 ハイパーバイザーを使用します。
また、上記には記載していませんが、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コマンド自体を知り、「どうせなら、全インスタンスで実行して比較してみればええやん」という思いたちから書いてみました。同僚の記事に刺激を受けることはよくあることです。感謝!!