EC2の Top500 変遷まとめ
まとめてみた。
Flopsの向上はもちろんだが、年々、Efficiencyが上がっていることが読み取れる。特に、C3になってEnhanced NetworkとしてSR-IOVが使えるようになり、向上している。
cc1.4xlarge | cc2.8xlarge | c3.8xlarge | |
cores | 7,040 | 17.024 | 26,496 |
Linpak(Rmax) | 41.8TFlops | 240.1TFlops | 484.2TFlops |
Theoretical Peak(Rpeak) | 82.5TFlops | 354.1TFlops | 593.9TFlops |
Efficiency | 50.6% | 67.8% | 81.5% |
Date | 11/2010 | 11/2011 | 11/2013 |
Rank | 233 | 42 | 64 |
以下、Topp500の情報ソース
CC1.4xlarge
CC2.8xlarge
C3.8xlarge
[HPC] C3.8xlarge のRHEL6.4 HVMで SR-IOVを有効にする
CC2 (Sandy Bridge) の後継 C3 (Ivy Bridge)が追加された。
詳しくはこちらを参考のこと。
Amazon Web Services ブログ: 【AWS発表】 新世代の数値計算向けEC2インスタンス
HPCの観点から見ると、CC2.8xlarge の後継に当たるのは C3.8xlarge となる。
スベック比較は以下の通り
c3.8xlarge | cc2.8xlarge | cc1.4xlarge | |
vCPU数 | 32 | 32 | 16 |
総ECU | 108 | 88 | 33.5 |
RAM(GiB) | 60 | 60.5 | 23 |
インスタンス ストレージ |
2 x 320(SSD) | 4 x 840 | 2 x 840 |
CPU | Xeon E5-2680v2 (Ivy Bridge) |
Xeon E5-2670 (Sandy Bridge) |
Xeon X5570 (Nehalem) |
NIC | High | 10GbE | 10GbE |
その中でも特に注目すべき点は、ネットワークI/Oの改善( Enhanced Networking)で、C3はSR-IOVをサポートしている。
※SR-IOVについてはこちら。(PCI-SIG SR-IOV Primer: An Introduction to SR-IOV Technology )
SR-IOVを使うには、3つの条件が必要
- ・VPC内でHVM AMIをC3.8xlargeで起動する
- ・OS側で ixvgevf ドライバを有効にする
- ・インスタンスの属性 sriovNetSupport を有効にする(もしくは sriovNetSupportが有効になったHVM AMIで起動する)
1については割愛。2については、Amazon Linux 2013.9 では有効になっているので、気にしなくて良い。
以下、RHEL 6.4 HVM AMIで、SR-IOVを有効にする手順。
1. VPCで起動
$ ec2-run-instances ami-18a23f28 -t c3.8xlarge -s subnet-xxxxx \ -k id_rsa -g sg-xxxxxx --region us-west-2 --private-ip-address 172.16.11.204
2. OSでixvgevfドライバを入れる
ixvgevfドライバのビルドに必要な前処理
# sudo yum -y update # sudo yum -y install gcc make kernel-devel kernel-headers $sudo reboot
3.ドライバダウンロード、ビルド、インストール
$ wget "http://downloads.sourceforge.net/project/e1000/ixgbevf stable/2.11.3/ixgbevf-2.11.3.tar.gz" $ tar zxvf ixgbevf-2.11.3.tar.gz $ cd ixgbevf-2.11.3/src $ sudo make install $ sudo su - # echo "options ixgbevf InterruptThrottleRate=1,1,1,1,1,1,1,1" > /etc/modprobe.d/ixgbevf.conf # reboot
4.インスタンス停止,属性sriov変更,起動
$ ec2-stop-instances i-xxxxxx --region us-west-2
$ ec2-modify-instance-attribute --region us-west-2 --sriov simple i-xxxxxx
$ ec2-start-instances i-xxxxxx --region us-west-2
5.確認
$ /sbin/ethtool -i eth0 | grep driver driver: ixgbevf
注意
ixgbevf をセットアップする前に、 sriovNetSupportを有効にして起動してしまうと、NICが有効にならずにOSが起動してしまい、リモートからアクセスできなくなる。必ず、 上記3の手順をした後に 4をすること。
参考
Enabling Enhanced Networking on Linux Instances in a VPC - Amazon Elastic Compute Cloud
AWS CLIで Spot Instance の価格履歴を CloudWatchで見る
ということでこれ
Shell Script to bring EC2 SpotInstance Prices to CloudWatch.
やっていることは単純で、
・aws ec2 describe-spot-price-history
でヒストリを取得して、
・aws cloudwatch put-metric-data
で、CloudWatchにputしているだけ。
AWS CLI で Route53のレコードを操作する
ホストの追加や、切り替えをシステムから自動化したい場合などで使える。
参考
change-resource-record-sets — AWS CLI 1.2.0 documentation
POST ChangeResourceRecordSets - Amazon Route 53
ゾーン一覧の取得
$ aws route53 list-hosted-zones { "HostedZones": [ { "ResourceRecordSetCount": 11, "CallerReference": "C1D3F932-D850-1792-AE9E-YYYYYYYYYYYY", "Config": { "Comment": "example.com" }, "Id": "/hostedzone/ABCDXYZ", "Name": "example.com." }, { "ResourceRecordSetCount": 6, "CallerReference": "31E1727B-8557-540E-82FE-XXXXXXXXXXXX", "Config": { "Comment": "example.net" }, "Id": "/hostedzone/ZYXDCBA", "Name": "example.net." } ], "IsTruncated": false, "MaxItems": "100" }
こんな感じ
次に、ゾーンのレコードセット一覧を取得してみる
$ aws route53 list-resource-record-sets --hosted-zone-id ABCDXYZ { "IsTruncated": false, "ResourceRecordSets": [ { "ResourceRecords": [ { "Value": "ns-xxxx.awsdns-62.co.uk." }, ...... ], "Type": "NS", "Name": "example.com.", "TTL": 172800 }, { "ResourceRecords": [ { "Value": "ns-XXXX.awsdns-62.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ], "Type": "SOA", "Name": "example.com.", "TTL": 900 }, { "ResourceRecords": [ { "Value": "192.0.2.33" }, { "Value": "198.51.100.23" }, { "Value": "203.0.113.3" } ], "Type": "A", "Name": "fuga.example.com.", "TTL": 300 }, ....... ], "MaxItems": "100" }
次に、新しいレコードセットを追加する
まず、jsonファイルを用意する。この例はexample.com ゾーンに、fuga.example.net を、CNAMEとしてmefu.example.com に登録する。つまり
mefu 60 IN CNAME fuga.example.net.
のイメージ。
$ cat /home/ec2-user/create-cname.json { "Comment": "create CNAME record", "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "mefu.example.com.", "Type": "CNAME", "TTL": 60, "ResourceRecords": [ { "Value": "fuga.example.net." } ] } } ] } $ aws route53 change-resource-record-sets --hosted-zone-id ABCDXYZ --change-batch file:////home/ec2-user/create-cname.json
最後に、レコードセットを更新してみる。先ほどのCNAME mefu.example.com の内容を fuga.example.net. から、 dabo.example.net. に変更する。つまり
mefu 60 IN CNAME fuga.example.net.
を
mefu 60 IN CNAME dabo.example.net.
にするイメージ。Actionとしては、DELETEとCREATEをバッチで投げることになる。
$ cat /home/ec2-user/update-cname.json { "Comment": "create CNAME record", "Changes": [ { "Action": "DELETE", "ResourceRecordSet": { "Name": "mefu.example.com.", "Type": "CNAME", "TTL": 60, "ResourceRecords": [ { "Value": "fuga.example.net." } ] } }, { "Action": "CREATE", "ResourceRecordSet": { "Name": "mefu.example.com.", "Type": "CNAME", "TTL": 60, "ResourceRecords": [ { "Value": "dabo.example.net." } ] } } ] } $ aws route53 change-resource-record-sets --hosted-zone-id ABCDXYZ --change-batch file:////home/ec2-user/update-cname.json
AWS CLIで上限を確認する
AWSには、各種の上限(ソフトリミット)があり、上限緩和申請で上限を上げることができる。
※ 詳しくはこちら AWS: サービスの各種上限( softlimit) と上限緩和申請 - aws memo
上限緩和を申請した結果、自分のアカウントの上限が今いくつになっているか?を確認するには、サポート(ビジネス・エンタープライズ)に入ると使える Trusted Advisor で確認できる。
こちら、AWS CLIでも一部確認可能になった。実行例は以下
$ aws ec2 describe-account-attributes --region ap-northeast-1 --output text vpc-max-security-groups-per-interface 5 max-instances 20 supported-platforms EC2 VPC default-vpc none max-elastic-ips 5 vpc-max-elastic-ips 5
個別の値を取得するには
$ aws ec2 describe-account-attributes --attribute-names max-instances --region ap-northeast-1 --output text
max-instances
20
今後増えていくと思われる。
AWS CLIでEC2を起動 (エフェメラルディスク付き)
AWS CLIで、 run-instances を実行する
リファレンスはこちら:
run-instances — AWS CLI 1.1.2 documentation
Using Amazon EC2 Instances - AWS Command Line Interface
RunInstances - Amazon Elastic Compute Cloud
ポイントは、--block-device-mappings オプションの JSON記述。
$ aws ec2 run-instances \ --region us-west-2 \ --image-id ami-0358ce33 \ --key-name id_rsa \ --security-group-ids sg-c20dfdad \ --subnet-id subnet-36b5ec5d \ --private-ip-address 10.100.1.10 \ --instance-type m1.large \ --ebs-optimized \ --block-device-mappings '[ {"DeviceName":"/dev/sdb","VirtualName":"ephemeral0"}, {"DeviceName":"/dev/sdc","VirtualName":"ephemeral1"}]'
JSONの部分を整形するとこんな感じ。
[ { "DeviceName":"/dev/sdb", "VirtualName":"ephemeral0" }, { "DeviceName":"/dev/sdc", "VirtualName":"ephemeral1" } ]
このJSONをファイルに書きだして、このように実行することも可能
$ aws ec2 run-instances \ --region us-west-2 \ --image-id ami-0358ce33 \ --key-name id_rsa \ --security-group-ids sg-c20dfdad \ --subnet-id subnet-36b5ec5d \ --private-ip-address 10.100.1.10 \ --instance-type m1.large \ --ebs-optimized \ --block-device-mappings file:////home/ec2-user/mapping.json
もしくは
$ aws ec2 run-instances \ --region us-west-2 \ --image-id ami-0358ce33 \ --key-name id_rsa \ --security-group-ids sg-c20dfdad \ --subnet-id subnet-36b5ec5d \ --private-ip-address 10.100.1.10 \ --instance-type m1.large \ --ebs-optimized \ --block-device-mappings http://mybucket.s3.amazonaws.com/mapping.json
参考 Specifying Parameter Values for the AWS Command Line Interface
ちなみに、従来の ec2-run-instances だとこんな感じ
ec2-run-instances \ ami-0358ce33 \ -k id_rsa \ -g sg-c20dfdad \ --region us-west-2 \ -s subnet-36b5ec5d \ --private-ip-address 10.100.1.12 \ --ebs-optimized \ -b "/dev/sdb=ephemeral0" \ -b "/dev/sdc=ephemeral1" \ -t m1.large \
ec2周りは、まだ api-toolsの方が少し便利かも。というか、botoの方が便利かも。
AWS CLIで VPCのDNS設定を操作する
VPC Defaultのタイミングで対応した、VPCのDNSホスト名、およびDNSの名前解決機能を、AWS CLIでOn/Offする。
Amazon Web Services ブログ: 【AWS発表】Amazon EC2 アップデート - 全ての皆様にVPC (Virtual Private Cloud)を!
DNSホスト名 - default VPC内に起動されたインスタンスは全て、プライベートとパブリックなホスト名を持ちます。DNSホスト名は既存のVPCでは無効になっていますが、必要に応じて有効にできます。同じVPC内の他のインスタンスのパブリックホスト名を名前解決すると、対象インスタンスのプライベートIPが返されます。VPCの外のインスタンスのパブリックホスト名を名前解決すると、そのインスタンスのパブリックIPが返されます。
DNSの名前解決 - DNSの名前解決は全てのVPCで有効になっていますが、必要に応じてVPC内に用意されたDNSサービスの使用を無効にすることができます。
詳細はこちら Using DNS with Your VPC - Amazon Virtual Private Cloud
ということで、操作方法は以下。
DNSホスト名のOn/Offを確認する
$ aws ec2 describe-vpc-attribute --region us-west-2 \ --vpc-id vpc-f18dd49a \ --attribute enableDnsHostnames
DNS名前解決のOn/Offを確認する
$ aws ec2 describe-vpc-attribute --region us-west-2 \ --vpc-id vpc-f18dd49a \ --attribute enableDnsSupport
DNS名前解決をOnにする
$ aws ec2 modify-vpc-attribute --region us-west-2 \ --vpc-id vpc-f18dd49a \ --enable-dns-support '{"Value":true}'
DNSホスト名をOnにする
$ aws ec2 modify-vpc-attribute --region us-west-2 \ --vpc-id vpc-f18dd49a \ --enable-dns-hostnames '{"Value":true}'
参考1 コマンドリファレンス
modify-vpc-attribute — AWS CLI 1.1.2 documentation
describe-vpc-attribute — AWS CLI 1.1.2 documentation
参考2 APIリファレンス
ec2-describe-vpc-attribute - Amazon Elastic Compute Cloud
ec2-modify-vpc-attribute - Amazon Elastic Compute Cloud
参考3 従来のコマンド (api-tools)
従来のコマンドラインだと このような操作にななる
$ ec2-describe-vpc-attribute vpc-f18dd49a \ --region us-west-2 \ --dns-support $ ec2-describe-vpc-attribute vpc-f18dd49a \ --region us-west-2 \ --dns-hostnames $ ec2-modify-vpc-attribute -c vpc-f18dd49a \ --region us-west-2 \ --dns-support true $ ec2-modify-vpc-attribute -c vpc-f18dd49a \ --region us-west-2 \ --dns-hostname true
リファレンス