【アップデート】I/O最適化されたAmazon EC2 I8gインスタンスの一般提供が開始されました! #AWSreInvent

【アップデート】I/O最適化されたAmazon EC2 I8gインスタンスの一般提供が開始されました! #AWSreInvent

Clock Icon2024.12.02

こんにちは!AWS事業本部のおつまみです。

Amazon EC2インスタンスタイプに関してアップデート情報があったので、お届けします!!

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-ec2-i8g-instances/

3行まとめ

  • AWS Graviton4プロセッサを搭載し、前世代比で最大60%性能が向上するAmazon EC2 I8gインスタンスが登場した
  • ストレージ集約型ワークロードに最適化された高性能インスタンスで、リアルタイム性を要するデータ分析などに最適である
  • 現時点ではバージニア北部およびオレゴンのみ利用可能である

これまで

これまではストレージ集約型ワークロードに特化したインスタンスとしてI4gインスタンスが提供されていました。I4gインスタンス自体は2023/5に一般提供を開始していたようです。

https://aws.amazon.com/jp/about-aws/whats-new/2023/05/amazon-ec2-i4g-storage-optimized-instances/

今回のアップデート

今回のアップデートでは、以下のように性能が向上しています。

  • AWS Graviton4プロセッサを搭載し、I4g比で最大60%の計算性能向上
  • 第3世代AWS Nitro SSDを採用し、TBあたり最大65%のリアルタイムストレージ性能向上
  • ストレージI/Oレイテンシーを最大50%低減、変動性を最大60%改善
  • 最大24xlargeサイズ、768 GiBのメモリ、22.5 TBのインスタンスストレージを提供

詳細はこちらの製品ページをご確認ください。

https://aws.amazon.com/jp/ec2/instance-types/i8g/

やってみた

インスタンスの起動

I8gとI4gインスタンスの性能を比較してみるために、各々のインスタンスで fio を 1並列でランダムリードを計測してみます。

まずは2台起動させます。

インスタンス___EC2___us-east-1

なおI8gインスタンスは現時点では、us-east-1aではサポートしていないようでした。

スクリーンショット_2024-12-01_19_38_55

ストレージをマウント

各インスタンスに接続します。
通常のインスタンスと異なり、ローカルストレージは明示的にマウントが必要です。

$ df -h
Filesystem        Size  Used Avail Use% Mounted on
devtmpfs          4.0M     0  4.0M   0% /dev
tmpfs             7.7G     0  7.7G   0% /dev/shm
tmpfs             3.1G  588K  3.1G   1% /run
/dev/nvme0n1p1    8.0G  1.7G  6.3G  22% /
tmpfs             7.7G     0  7.7G   0% /tmp
/dev/nvme0n1p128   10M  1.4M  8.7M  14% /boot/efi
tmpfs             1.6G     0  1.6G   0% /run/user/1000

$ 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 435.9G  0 disk 

一番下のnvme1n1 がローカルの NVMe ストレージです。
これをマウントします。

$ sudo mkfs -t xfs /dev/nvme1n1
meta-data=/dev/nvme1n1           isize=512    agcount=4, agsize=28564453 blks
 =                       sectsz=512   attr=2, projid32bit=1
 =                       crc=1        finobt=1, sparse=1, rmapbt=0
 =                       reflink=1    bigtime=1 inobtcount=1
data     =                       bsize=4096   blocks=114257812, imaxpct=25
 =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=55789, version=2
 =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

$ sudo mkdir /data

$ sudo mount /dev/nvme1n1 /data

$ df -h
Filesystem        Size  Used Avail Use% Mounted on
devtmpfs          4.0M     0  4.0M   0% /dev
tmpfs             7.7G     0  7.7G   0% /dev/shm
tmpfs             3.1G  588K  3.1G   1% /run
/dev/nvme0n1p1    8.0G  1.7G  6.3G  22% /
tmpfs             7.7G     0  7.7G   0% /tmp
/dev/nvme0n1p128   10M  1.4M  8.7M  14% /boot/efi
tmpfs             1.6G     0  1.6G   0% /run/user/1000
/dev/nvme1n1      436G  3.1G  433G   1% /data

fioコマンドで性能比較

次に、fioコマンドをインストールします。
fioは「Flexible I/O Tester」の略で、ストレージシステムのI/Oパフォーマンスを測定するためのベンチマークツールです。

sudo yum install -y fio

各インスタンスで fio を 1並列でランダムリードを計測してみます。

I4gインスタンス

$ sudo fio --directory=/data --name fio_test_file --direct=1 --rw=randread --bs=128k --size=1G --numjobs=1 --time_based --runtime=60 --group_reporting --norandommap
fio_test_file: (g=0): rw=randread, bs=(R) 128KiB-128KiB, (W) 128KiB-128KiB, (T) 128KiB-128KiB, ioengine=psync, iodepth=1
fio-3.32
Starting 1 process
fio_test_file: Laying out IO file (1 file / 1024MiB)
Jobs: 1 (f=1): [r(1)][100.0%][r=239MiB/s][r=1915 IOPS][eta 00m:00s]
fio_test_file: (groupid=0, jobs=1): err= 0: pid=27760: Mon Dec  2 04:27:48 2024
  read: IOPS=1964, BW=246MiB/s (257MB/s)(14.4GiB/60001msec)

clat (usec): min=140, max=1613, avg=508.40, stdev=64.06
 lat (usec): min=140, max=1613, avg=508.49, stdev=64.06
clat percentiles (usec):
 |  1.00th=[  217],  5.00th=[  461], 10.00th=[  498], 20.00th=[  502],
 | 30.00th=[  515], 40.00th=[  519], 50.00th=[  523], 60.00th=[  523],
 | 70.00th=[  529], 80.00th=[  537], 90.00th=[  545], 95.00th=[  545],
 | 99.00th=[  562], 99.50th=[  586], 99.90th=[  676], 99.95th=[  717],
 | 99.99th=[  799]
       bw (  KiB/s): min=244992, max=566528, per=100.00%, avg=251553.34, stdev=42626.78, samples=119
       iops        : min= 1914, max= 4426, avg=1965.26, stdev=333.02, samples=119
      lat (usec)   : 250=4.39%, 500=7.08%, 750=88.50%, 1000=0.03%
      lat (msec)   : 2=0.01%
      cpu          : usr=0.31%, sys=1.16%, ctx=117869, majf=0, minf=43
      IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
 submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 issued rwts: total=117861,0,0,0 short=0,0,0,0 dropped=0,0,0,0
 latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=246MiB/s (257MB/s), 246MiB/s-246MiB/s (257MB/s-257MB/s), io=14.4GiB (15.4GB), run=60001-60001msec

Disk stats (read/write):
  nvme1n1: ios=117623/7, merge=0/3, ticks=59078/1, in_queue=59079, util=98.66%

I8gインスタンス

$ sudo fio --directory=/data --name fio_test_file --direct=1 --rw=randread --bs=128k --size=1G --numjobs=1 --time_based --runtime=60 --group_reporting --norandommap
fio_test_file: (g=0): rw=randread, bs=(R) 128KiB-128KiB, (W) 128KiB-128KiB, (T) 128KiB-128KiB, ioengine=psync, iodepth=1
fio-3.32
Starting 1 process
fio_test_file: Laying out IO file (1 file / 1024MiB)
Jobs: 1 (f=1): [r(1)][100.0%][r=503MiB/s][r=4020 IOPS][eta 00m:00s]
fio_test_file: (groupid=0, jobs=1): err= 0: pid=28248: Mon Dec  2 04:30:34 2024
  read: IOPS=4108, BW=514MiB/s (538MB/s)(30.1GiB/60001msec)

clat (usec): min=53, max=1982, avg=243.11, stdev=22.82
lat (usec): min=53, max=1983, avg=243.16, stdev=22.82
clat percentiles (usec):
 |  1.00th=[  159],  5.00th=[  172], 10.00th=[  237], 20.00th=[  239],
 | 30.00th=[  247], 40.00th=[  247], 50.00th=[  249], 60.00th=[  249],
 | 70.00th=[  251], 80.00th=[  258], 90.00th=[  260], 95.00th=[  262],
 | 99.00th=[  265], 99.50th=[  265], 99.90th=[  265], 99.95th=[  265],
 | 99.99th=[  367]
       bw (  KiB/s): min=514304, max=780800, per=100.00%, avg=526002.55, stdev=53592.01,     samples=119
       iops        : min= 4018, max= 6100, avg=4109.39, stdev=418.69, samples=119
      lat (usec)   : 100=0.01%, 250=68.81%, 500=31.18%, 750=0.01%
      lat (msec)   : 2=0.01%
      cpu          : usr=0.35%, sys=1.61%, ctx=246500, majf=0, minf=42
      IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
 submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 issued rwts: total=246497,0,0,0 short=0,0,0,0 dropped=0,0,0,0
 latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=514MiB/s (538MB/s), 514MiB/s-514MiB/s (538MB/s-538MB/s), io=30.1GiB (32.3GB), run=60001-60001msec

Disk stats (read/write):
  nvme1n1: ios=245695/7, merge=0/3, ticks=58782/0, in_queue=58783, util=98.31%

I4gインスタンスとI8gインスタンスの主要メトリクスを比較した結果はこちらです。

メトリクス I4gインスタンス I8gインスタンス 差異
IOPS 1,964 4,108 2.1倍向上
帯域幅 246 MiB/s 514 MiB/s 2.1倍向上
平均レイテンシー 508.40 μs 243.11 μs 52%減少
最小レイテンシー 140 μs 53 μs 62%減少
最大レイテンシー 1,613 μs 1,982 μs 23%増加
CPU使用率 (usr) 0.31% 0.35% ほぼ同等
CPU使用率 (sys) 1.16% 1.61% わずかに増加
総I/O量 14.4 GiB 30.1 GiB 2.1倍向上
ディスク使用率 98.66% 98.31% ほぼ同等

アップデートにもあったように、以下の観点で性能向上していることが確認できました!

  • I8gインスタンスはI4gインスタンスと比較して、IOPSと帯域幅が約2.1倍向上
  • 平均レイテンシーが半分以下に改善
  • システムリソース使用率(CPU、ディスク使用率)は両インスタンスでほぼ同等
  • 最大レイテンシーはI8gインスタンスの方がやや高いものの、全体的なパフォーマンスは大幅に向上

おわりに

今回はAmazon EC2 I8gインスタンスの一般提供開始について紹介しました。

ストレージ集約型ワークロードの性能を大幅に向上させる新しいインスタンスタイプなので、低レイテンシーが求められるシステムを構築する場合など活躍できるのではないでしょうか。

最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.