CloudWatch で EBS の I/O レイテンシーを確認できるようになりました
はじめに
Amazon CloudWatch に EBS ボリュームの新しいメトリクスが追加され。読み取りと書き込みのレイテンシーをモニタリングできます。
なにが嬉しいのか
従来は CloudWatch のメトリクスから EBS の I/O レイテンシーを確認するには Metric Math を使用して計算する必要がありました。
引用: Amazon の Amazon CloudWatch メトリクス EBS - Amazon EBS
今回のアップデートにより、レイテンシーを直接表示するメトリクスが追加され、パフォーマンスモニタリングするための手間が減りました。これは嬉しい。
新メトリクスの概要
Amazon CloudWatch に以下 2 つの新しいメトリクスが追加されています。
VolumeAvgReadLatency
:読み取り操作の 1 分平均レイテンシーVolumeAvgWriteLatency
:書き込み操作の 1 分平均レイテンシー
Nitro 世代のインスタンスにアタッチされたのすべてのボリュームタイプをサポートしています。
ただし、ECS/Fargate のタスクにアタッチされたボリュームはサポートされていません。
負荷テストによる I/O レイテンシー変化を観測してみた
fio を使用して EBS(gp3)へ負荷をかけて I/O レイテンシーの変化を観測してみます。
検証環境
EC2インスタンス仕様
項目 | 仕様 |
---|---|
Instance Type | c7i.2xlarge |
vCPU | 8 |
Memory | 16GB |
OS | Amazon Linux 2023 |
EBSボリューム仕様
項目 | gp3 |
---|---|
サイズ | 50GB |
IOPS | 3,000 |
スループット | 125 MB/s |
負荷テスト方法
fio を使用して EBS に対して小さいファイルの読み書きを行い負荷をかけました。
[global]
ioengine=libaio
direct=1
time_based=1
runtime=300
norandommap=1
randrepeat=0
directory=/data/gp3-1
group_reporting=1
runtime=180
norandommap=1
[stress-test]
description=Random mixed read/write test for high latency
rw=randrw
rwmixread=70
bs=4k
iodepth=32
numjobs=8
size=6G
実行結果
負荷をかけることで、I/O レイテンシーの悪化が新メトリクスによって確認できました。
時系列でのレイテンシー変化も容易に確認できます。
最大と最小値を表示した様子。
まとめ
既存のスループット、IOPS のメトリクスに加え、I/O レイテンシーのメトリクスが追加されたことで、簡単にパフォーマンスモニタリングできるようになりました。以下のようなユースケースに対応できるのではないでしょうか。
- 1 分単位でのリアルタイムなパフォーマンスモニタリング
- 読み取り/書き込み別のボトルネック調査
- 長期的なトレンド分析からのキャパシティプランニング
おわりに
そのうち Compute Optimizer のレコメンデーションも I/O レイテンシーのメトリクスを加味した結果を返してくれるようになるのではないかと思いながら検証していました。