Amazon EC2 インスタンスストアの詳細なパフォーマンス統計が取得可能になりました
はじめに
2025 年 9 月、Amazon EC2 のインスタンスストアボリュームで詳細なパフォーマンス統計情報が取得できるようになりました。これまで EBS ボリュームのみで利用可能だった機能がインスタンスストアにも拡張されました。取得方法を検証したので紹介します。
何ができるようになったか
インスタンスストアボリュームの詳細なパフォーマンス統計が最短 1 秒間隔で取得可能になりました。
- I/O 操作の統計情報(読み込み/書き込みの操作数とバイト数)
- レイテンシーヒストグラム(I/O 操作の応答時間の分布)
- パフォーマンス限界の超過時間(IOPS やスループットの上限超過時間)
- キュー長(現時点での I/O リクエスト待機数)
インスタンスストアは特定のインスタンスで一時的な高速ストレージとして利用できます。これまで詳細なパフォーマンス情報を取得できませんでした。今回のアップデートでボトルネックの特定が容易になりました。
詳細なパフォーマンス統計情報の取得方法について
詳細なパフォーマンス統計情報は 2 つの取得方法が提供されています。1 つは nvme-cli コマンドによる確認です。もう 1 つは CloudWatch Agent を利用したカスタムメトリクスでの継続的なモニタリングです。インスタンスを停止するとこの統計情報は失われるため、長期的なモニタリングには CloudWatch Agent の利用を推奨します。
検証環境の準備
インスタンスストアのセットアップ
まず、インスタンスストアを持つ EC2 インスタンスを起動し、ボリュームをマウントします。今回は m8gd.large を使用しました。OS は Amazon Linux2023 です。
ボリュームの確認とマウント
# デバイスの確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:2 0 8G 0 part /
└─nvme0n1p128 259:3 0 10M 0 part /boot/efi
nvme1n1 259:1 0 109.9G 0 disk # これがインスタンスストア
# ファイルシステムの作成とマウント
sudo mkfs.ext4 /dev/nvme1n1
sudo mkdir -p /scratch
sudo mount /dev/nvme1n1 /scratch
sudo chown ec2-user:ec2-user /scratch
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 1.6G 588K 1.6G 1% /run
/dev/nvme0n1p1 8.0G 1.9G 6.2G 23% /
tmpfs 3.8G 0 3.8G 0% /tmp
/dev/nvme0n1p128 10M 1.4M 8.7M 14% /boot/efi
tmpfs 777M 0 777M 0% /run/user/0
/dev/nvme1n1 108G 24K 103G 1% /scratch # マウントされました
1. nvme-cli コマンドで取得する方法
nvme-cliのインストール
sudo yum install nvme-cli -y
統計情報の確認
sudo nvme amzn stats /dev/nvme1n1
このコマンドを実行すると、以下の情報が表示されます。
- Total Ops: 読み書き操作の総数
- Total Bytes: 読み書きしたデータの総量
- Total Time: 操作にかかった総時間(マイクロ秒)
- Performance Exceeded: パフォーマンス制限を超過した時間
- Queue Length: 現在のキュー長
- I/O Latency Histogram: レイテンシーの分布
$ sudo nvme amzn stats /dev/nvme1n1
Total Ops:
Read: 336
Write: 18832
Total Bytes:
Read: 5791744
Write: 2388171776
Total Time (us):
Read: 19206
Write: 65522020
EC2 Instance Local Storage Performance Exceeded (us):
IOPS: 0
Throughput: 2413727
Queue Length (point in time): 1
Read IO Latency Histogram
=================================
Lower Upper IO Count
=================================
[0 - 1 ] => 0
[1 - 2 ] => 0
[2 - 4 ] => 0
[4 - 8 ] => 0
[8 - 16 ] => 0
[16 - 32 ] => 94
[32 - 64 ] => 75
[64 - 128 ] => 85
[128 - 256 ] => 41
[256 - 512 ] => 40
[512 - 1024 ] => 1
[1024 - 2048 ] => 0
[2048 - 4096 ] => 0
[4096 - 8192 ] => 0
[8192 - 16384 ] => 0
[16384 - 32768 ] => 0
[32768 - 65536 ] => 0
[65536 - 131072 ] => 0
[131072 - 262144 ] => 0
[262144 - 524288 ] => 0
[524288 - 1048576 ] => 0
[1048576 - 2097152 ] => 0
[2097152 - 4194304 ] => 0
[4194304 - 8388608 ] => 0
[8388608 - 16777216] => 0
[16777216 - 33554432] => 0
[33554432 - 67108864] => 0
[67108864 - 18446744073709551615] => 0
=================================
Write IO Latency Histogram
=================================
Lower Upper IO Count
=================================
[0 - 1 ] => 0
[1 - 2 ] => 0
[2 - 4 ] => 0
[4 - 8 ] => 0
[8 - 16 ] => 0
[16 - 32 ] => 33
[32 - 64 ] => 10
[64 - 128 ] => 866
[128 - 256 ] => 2540
[256 - 512 ] => 4362
[512 - 1024 ] => 5229
[1024 - 2048 ] => 2870
[2048 - 4096 ] => 446
[4096 - 8192 ] => 136
[8192 - 16384 ] => 16
[16384 - 32768 ] => 69
[32768 - 65536 ] => 1980
[65536 - 131072 ] => 275
[131072 - 262144 ] => 0
[262144 - 524288 ] => 0
[524288 - 1048576 ] => 0
[1048576 - 2097152 ] => 0
[2097152 - 4194304 ] => 0
[4194304 - 8388608 ] => 0
[8388608 - 16777216] => 0
[16777216 - 33554432] => 0
[33554432 - 67108864] => 0
[67108864 - 18446744073709551615] => 0
=================================
2. CloudWatch Agent を利用した方法
Systems Manger を利用して CloudWatch Agent のセットアップします。
IAMロールの設定
EC2 インスタンスに以下のマネージドポリシーをアタッチする必要があります。
- AmazonSSMManagedInstanceCore
- Systems Manager を通じて CloudWatch Agent をインストール・管理するために必要
- CloudWatchAgentServerPolicy
- CloudWatch Agent が CloudWatch へメトリクスを送信するために必要
CloudWatch Agent設定ファイルの作成
インスタンスストアのメトリクスを収集する設定ファイルを作成します。
{
"agent": {
"metrics_collection_interval": 60
},
"metrics": {
"namespace": "CWAgent",
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
},
"diskio": {
"resources": ["*"],
"measurement": [
"instance_store_total_read_ops",
"instance_store_total_write_ops",
"instance_store_total_read_bytes",
"instance_store_total_write_bytes",
"instance_store_total_read_time",
"instance_store_total_write_time",
"instance_store_performance_exceeded_iops",
"instance_store_performance_exceeded_tp",
"instance_store_volume_queue_length"
],
"metrics_collection_interval": 60
}
}
}
}
Systems Manager パラメータストアへの登録
aws ssm put-parameter \
--name "AmazonCloudWatch-InstanceStore" \
--type "String" \
--value file://cloudwatch-config.json \
--overwrite \
--tier "Standard" \
--description "CloudWatch Agent configuration with InstanceStore"
CloudWatch Agentのインストールと設定
Systems Manager Run Command を使用して、CloudWatch Agent をインストールし、設定を適用します。
- AWS-ConfigureAWSPackageで CloudWatch Agent をインストール
以下のキャプチャの設定値を参考に、CloudWatch Agent をインストールします。
- AmazonCloudWatch-ManageAgentで設定ファイルを適用
パラメータストアに登録した設定ファイルを CloudWatch Agent に適用します。
EC2 インスタンスへ設定は以上です。IAM ロール(IAM ポリシー)の設定と、CloudWatch Agent のインストール、設定ファイルの追加のみです。
負荷テストとメトリクスの確認
fio ツールを使用してディスク負荷を発生させ、メトリクスを確認します。
# fioのインストール
sudo yum install fio -y
# ランダムな読み書きテスト(10分間)
fio --name=random-rw --ioengine=posixaio \
--rw=randrw --bs=4k --direct=1 --size=1G --numjobs=16 \
--time_based --runtime=600 --filename=/scratch/testfile
CloudWatch でグラフを確認すると以下のメトリクスが表示されます。
- I/O 操作の統計情報(読み込み/書き込みの操作数とバイト数)
- パフォーマンス限界の超過時間(IOPS やスループットの上限超過時間)
- キュー長(現時点での I/O リクエスト待機数)
補足: CloudWatch Agent に必要な権限とは
CloudWatch Agent に必要な権限とはなにかと検証していたのですが、特別な設定を入れなくても CloudWatch の設定ファイルさえ間違いなければ問題なく取得可能でした。nvme-cli
コマンドのインストールも不要でした。
Additionally, the CloudWatch agent binary requires ioctl permissions for NVMe driver devices to collect metrics from attached instance store volumes.
Collect Amazon EC2 instance store volume NVMe driver metrics - Amazon CloudWatch
まとめ
EC2 インスタンスストアの詳細なパフォーマンス統計が取得可能になりました。nvme-cli コマンドと CloudWatch Agent の 2 つの方法が提供されています。今回のアップデートで I/O パフォーマンスの可視化とボトルネックの特定が容易になりました。
おわりに
高速ストレージとしてインスタンスストアを活用して、パフォーマンスに問題を抱えたときに利用してみるとよいのではないでしょうか。私はよく ParallelCluster で中間ファイルの書き出しにインスタンスストアを利用しているため、パフォーマンスに問題を感じたら使ってみようと思います。