Mountpoint for Amazon S3 他リージョンからアクセスしたときのリード性能を確認してみた

海外リージョンでゲノム解析するときに便利な使い道がないか試行錯誤中
2023.08.29

Mountpoint for Amazon S3 を使えば他リージョンからでもアクセスできる共有ディレクトリとして利用できるのでは?と気になったので試してみました。

確認結果

  • リージョンをまたいでも S3 をマウントできる
  • 東京 - 東京間と、オハイオ - 東京間ではスループットが 70% 低下した
    • スループット性能はワークロードによります
  • リージョンをまたぐためデータ転送コストが発生する
    • 大規模なデータ読み込み用途で利用が想定されたツールであるためデータ転送コストに注意

気をつけたいこと

ゲノム解析の例ですと、S3 からデータを EBS へダウンロードし同じデータに対して複数パターンの解析処理をかけるケースでは S3 からのデータ転送料金が 1 度発生するだけで済みます。 一方で同様のケースを Mountpoint for Amazon S3 でマウントした S3 のディレクトリのデータを対象にすると解析処理の都度データ転送料金が発生することになります。

Inventory icons created by Freepik - Flaticon

  • データ転送速度、転送コスト改善候補サービス
    • 海外リージョンの S3 バケットへデータをレプリケーション
    • Multi-Region Access Points in Amazon S3 の利用
    • Amazon S3 Transfer Acceleration の有効化

ストレージコストや、有効化することで新たに発生するサービス利用費と相談が必要です。

他リージョンからもマウントはできるのか?

一般的な Mountpoint for Amazon S3 のマウント手順でオハイオリージョンの EC2 から東京リージョンの S3 バケットをマウントできました。

リージョンを検出する機能(Region detection)があるためユーザーが意識しなてくも良いのでしょう。Access Denied や No Such Bucket errors のメッセージがでるときは--regionフラグで明示的にリージョン指定が必要とのことです。

mountpoint-s3/doc/CONFIGURATION.md at main · awslabs/mountpoint-s3

オハイオリージョンの EC2 設定

Mountpoint for Amazon S3 検証用の EC2 に必要だったものの備忘録です。

設定内容折りたたみ
私は fish ユーザーなので作業効率を上げるためにインストールしています。

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish -y

mount-s3 コマンドのインストールは通常通りです。EC2 には必要な IAM ポリシーをアタッチした IAM ロールの設定が別途必要です。マウント用の S3 バケットと IAM ロールの作成は以下の記事で紹介しておりますので参考にしてください。

AWS ParallelCluster に Mountpoint for Amazon S3 を使って S3 バケットをマウントする方法

wget -P /tmp https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb
sudo apt-get install /tmp/mount-s3.deb -y
mount-s3 --help

`/mnt/s3`ディレクトリに S3 をマウントします。

sudo mkdir /mnt/s3
sudo mount-s3 --allow-delete --allow-other --dir-mode 0777 --auto-unmount hpc-dev-mountpoint /mnt/s3/

Mountpoint for Amazon S3 経由で S3 のデータの転送速度を計測するために fio をインストールしました。

sudo apt install fio -y

検証に使用したインスタンスのスペックです。

項目
OS Ubuntu 22.04
CPU Intel
Instance Type m6i.8xlarge
vCPU 32
Simultaneous Multi-Threading 有効
Memory 128 GiB
Network Bandwidth 12.5 Gbps
Mountpoint for Amazon S3 v1.0.0
fio v3.28

リージョンをまたぐデータ転送速度は?

Mountpoint for Amaozn S3 は大規模な読み込み負荷のあるアプリケーションの利用が想定されているファイルクライアントです。

ゲノム解析ツールからリファレンスゲノムなどのインプットファイルをリードするワークロードを想定し、fio でシーケンシャルリードの性能を測定しました。

Inventory icons created by Freepik - Flaticon

オハイオリージョンの EC2 から東京リージョンの S3 をマウントした点を除けば実行内容は以下のブログと同じです。こちらのブログでは東京リージョンの EC2 から東京リージョンの S3 バケットへのリード性能を確認しました。

実行結果

東京リージョンから東京リージョンの結果と、オハイオリージョンから東京リージョンの結果です。スループットと IOPS の値を比較しオハイオからのアクセスで低下した割合を載せました。

同じリージョンからのスループットに比べてオハイオから東京リージョン間のスループットは約 70 % の低下する結果となりました。私の想定したワークロードでは最大スループット 487 MiB/s ですので大規模な解析処理だと転送速度がボトルネックになる可能性があります。

小規模な解析処理であれば東京リージョンの S3 バケットに保存したデータを海外リージョン(今回はオハイオ)から直接読み込みしても、気にならずに便利な共有ディレクトリとして利用できるかもしれません。

注意事項は異なるリージョン間で通信しているためデータ転送料金が発生します。

従来は別リージョンで解析処理を行う場合は、S3 に保存してあるデータを EBS や、EFS などに一度ダウンロードしてから解析処理を実行していたと思います。 この場合は S3 からダウンロードしたタイミングでテータ転送料金が発生していました。

同じデータに対して複数パターンの解析処理をかけるケースでは S3 からのデータ転送料金が 1 度発生するだけで済みます。 一方で同様のケースを Mountpoint for Amazon S3 でマウントした S3 のディレクトリのデータを対象にすると解析処理の都度データ転送料金が発生することになります。

Inventory icons created by Freepik - Flaticon

リージョン間のデータ転送料金について

2023/8/29 現在の価格を元に説明します。料金を確認するときは最新の情報を公式サイトからご確認ください。

AWS リージョン間でコピーリクエストを通じて転送されるデータは、Amazon S3 料金ページで指定された料金で課金されます。同じリージョン内の Amazon EC2 (または任意の AWS のサービス) と Amazon S3 の間で転送されたデータ、例えば、米国東部 (バージニア北部) リージョン内で転送されたデータについては、データ転送料金が発生しません。ただし、異なるリージョンにある Amazon EC2 (または任意の AWS のサービス) と Amazon S3 の間、例えば、Amazon EC2 米国東部 (バージニア北部) と Amazon S3 米国西部 (北カリフォルニア) の間で転送されたデータについては、Amazon S3 の料金のページで指定される料金が課金されます。

よくある質問 - Amazon S3 |AWS

データ読み込み

東京リージョンの S3 からオハイオの EC2 でデータ読み込みすると $0.09/GB の課金が発生します。NAT Gateway 経由で通信する場合は NAT Gateway データ処理料金 $0.045/GB が追加で発生します。

本検証で fio でリードテストにより 112 GB のデータを読み込んでいました。東京 - オハイオ間のデータ転送量で $10 請求されています。

データ書き込み

オハイオの EC2 から S3 への書き込みは S3 からみるとデータインになるので $0 です。しかし、EC2 からのデータ転送量 $0.02/GB が発生します。NAT Gateway 経由で通信する場合は NAT Gateway データ処理料金 $0.045 が代わりに発生します。

本検証で fio でリードテストにより 201 GB のデータを書き込んでいました。オハイオ - 東京間のデータ転送量で $4 請求されています。読み込みをテストするためにテストファイルを生成することになるのですが、おそらくテストファイルの生成の書き込みで発生したものと思われます。

その他

Moutpoint for Amaozon S3 でファイルの読み書きする裏で S3 の API を叩かれています。そのため API のリクエスト課金が発生します。同リージョンでの通信でも共通です。

実行ログ一覧

参考までに fio のログを載せておきます。

SEQ500.conf
SEQ8M-Q128T1-500M-Read: (g=0): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
SEQ8M-Q128T8-500M-Read: (g=1): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
...
SEQ8M-Q128T16-500M-Read: (g=2): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
...
fio-3.28
Starting 25 processes
SEQ8M-Q128T1-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T8-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)
SEQ8M-Q128T16-500M-Read: Laying out IO file (1 file / 500MiB)

SEQ8M-Q128T1-500M-Read: (groupid=0, jobs=1): err= 0: pid=1573: Sun Aug 27 07:34:45 2023
  read: IOPS=5, BW=40.4MiB/s (42.4MB/s)(496MiB/12267msec)
    slat (msec): min=3, max=3997, avg=173.08, stdev=630.46
    clat (usec): min=4, max=6732.9k, avg=1349297.40, stdev=1266120.26
     lat (msec): min=3, max=10730, avg=1522.37, stdev=1727.89
    clat percentiles (usec):
     |  1.00th=[      5],  5.00th=[  10421], 10.00th=[  80217],
     | 20.00th=[ 624952], 30.00th=[ 641729], 40.00th=[ 926942],
     | 50.00th=[1061159], 60.00th=[1082131], 70.00th=[1115685],
     | 80.00th=[2701132], 90.00th=[3640656], 95.00th=[3707765],
     | 99.00th=[6744441], 99.50th=[6744441], 99.90th=[6744441],
     | 99.95th=[6744441], 99.99th=[6744441]
  lat (usec)   : 10=1.61%
  lat (msec)   : 4=1.61%, 10=1.61%, 20=1.61%, 100=4.84%, 750=24.19%
  lat (msec)   : 1000=11.29%, 2000=32.26%, >=2000=20.97%
  cpu          : usr=0.00%, sys=0.93%, ctx=499, majf=0, minf=126991
  IO depths    : 1=1.6%, 2=3.2%, 4=6.5%, 8=12.9%, 16=25.8%, 32=50.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=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=100.0%, >=64=0.0%
     issued rwts: total=62,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128
SEQ8M-Q128T8-500M-Read: (groupid=1, jobs=8): err= 0: pid=1576: Sun Aug 27 07:34:45 2023
  read: IOPS=40, BW=326MiB/s (342MB/s)(3968MiB/12166msec)
    slat (msec): min=3, max=2644, avg=164.56, stdev=463.08
    clat (usec): min=4, max=9318.2k, avg=2631151.58, stdev=1902277.90
     lat (msec): min=3, max=11216, avg=2795.71, stdev=2103.95
    clat percentiles (usec):
     |  1.00th=[      6],  5.00th=[  24773], 10.00th=[ 246416],
     | 20.00th=[ 977273], 30.00th=[1518339], 40.00th=[1920992],
     | 50.00th=[2499806], 60.00th=[2936013], 70.00th=[3103785],
     | 80.00th=[3741320], 90.00th=[4999611], 95.00th=[6677332],
     | 99.00th=[8791262], 99.50th=[9193915], 99.90th=[9328133],
     | 99.95th=[9328133], 99.99th=[9328133]
  lat (usec)   : 10=1.61%
  lat (msec)   : 4=0.81%, 10=1.21%, 20=1.01%, 50=1.21%, 100=1.21%
  lat (msec)   : 250=3.02%, 500=4.44%, 750=1.21%, 1000=5.24%, 2000=19.56%
  lat (msec)   : >=2000=59.48%
  cpu          : usr=0.00%, sys=1.00%, ctx=4004, majf=1, minf=1015938
  IO depths    : 1=1.6%, 2=3.2%, 4=6.5%, 8=12.9%, 16=25.8%, 32=50.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=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=100.0%, >=64=0.0%
     issued rwts: total=496,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128
SEQ8M-Q128T16-500M-Read: (groupid=2, jobs=16): err= 0: pid=1592: Sun Aug 27 07:34:45 2023
  read: IOPS=51, BW=415MiB/s (435MB/s)(7936MiB/19121msec)
    slat (msec): min=3, max=8251, avg=257.18, stdev=761.95
    clat (usec): min=4, max=15982k, avg=5271165.38, stdev=3748330.00
     lat (msec): min=3, max=18157, avg=5528.35, stdev=3924.38
    clat percentiles (usec):
     |  1.00th=[       6],  5.00th=[   15008], 10.00th=[  270533],
     | 20.00th=[ 1216349], 30.00th=[ 3103785], 40.00th=[ 3909092],
     | 50.00th=[ 4798284], 60.00th=[ 6073353], 70.00th=[ 7348421],
     | 80.00th=[ 8791262], 90.00th=[10938745], 95.00th=[12146705],
     | 99.00th=[13891535], 99.50th=[15233713], 99.90th=[16039019],
     | 99.95th=[16039019], 99.99th=[16039019]
  lat (usec)   : 10=1.61%
  lat (msec)   : 4=0.81%, 10=1.41%, 20=2.02%, 50=0.91%, 100=0.81%
  lat (msec)   : 250=2.42%, 500=3.43%, 750=3.53%, 1000=2.12%, 2000=3.43%
  lat (msec)   : >=2000=77.52%
  cpu          : usr=0.00%, sys=0.66%, ctx=8028, majf=2, minf=2031874
  IO depths    : 1=1.6%, 2=3.2%, 4=6.5%, 8=12.9%, 16=25.8%, 32=50.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=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=100.0%, >=64=0.0%
     issued rwts: total=992,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128

Run status group 0 (all jobs):
   READ: bw=40.4MiB/s (42.4MB/s), 40.4MiB/s-40.4MiB/s (42.4MB/s-42.4MB/s), io=496MiB (520MB), run=12267-12267msec

Run status group 1 (all jobs):
   READ: bw=326MiB/s (342MB/s), 326MiB/s-326MiB/s (342MB/s-342MB/s), io=3968MiB (4161MB), run=12166-12166msec

Run status group 2 (all jobs):
   READ: bw=415MiB/s (435MB/s), 415MiB/s-415MiB/s (435MB/s-435MB/s), io=7936MiB (8321MB), run=19121-19121msec
SEQ1G.conf
SEQ8M-Q128T1-1G-Read: (g=0): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
SEQ8M-Q128T8-1G-Read: (g=1): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
...
SEQ8M-Q128T16-1G-Read: (g=2): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
...
fio-3.28
Starting 25 processes
SEQ8M-Q128T1-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T8-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)
SEQ8M-Q128T16-1G-Read: Laying out IO file (1 file / 1024MiB)

SEQ8M-Q128T1-1G-Read: (groupid=0, jobs=1): err= 0: pid=2170: Sun Aug 27 04:44:51 2023
  read: IOPS=5, BW=42.7MiB/s (44.8MB/s)(1024MiB/23959msec)
    slat (msec): min=3, max=7127, avg=162.88, stdev=786.97
    clat (usec): min=13, max=16820k, avg=3649218.80, stdev=4649687.48
     lat (msec): min=3, max=20849, avg=3812.10, stdev=4880.32
    clat percentiles (msec):
     |  1.00th=[    4],  5.00th=[   22], 10.00th=[   43], 20.00th=[   90],
     | 30.00th=[  405], 40.00th=[  818], 50.00th=[  860], 60.00th=[ 4044],
     | 70.00th=[ 4077], 80.00th=[ 4144], 90.00th=[12684], 95.00th=[13489],
     | 99.00th=[14429], 99.50th=[16845], 99.90th=[16845], 99.95th=[16845],
     | 99.99th=[16845]
  lat (usec)   : 20=0.78%
  lat (msec)   : 4=0.78%, 10=0.78%, 20=2.34%, 50=7.03%, 100=10.16%
  lat (msec)   : 250=2.34%, 500=7.81%, 1000=23.44%, 2000=1.56%, >=2000=42.97%
  cpu          : usr=0.00%, sys=0.92%, ctx=1028, majf=0, minf=262160
  IO depths    : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8%
     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=50.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=50.0%
     issued rwts: total=128,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128
SEQ8M-Q128T8-1G-Read: (groupid=1, jobs=8): err= 0: pid=2173: Sun Aug 27 04:44:51 2023
  read: IOPS=50, BW=402MiB/s (421MB/s)(8192MiB/20382msec)
    slat (msec): min=3, max=6899, avg=136.79, stdev=394.54
    clat (usec): min=13, max=17842k, avg=5639678.25, stdev=4021975.53
     lat (msec): min=3, max=19612, avg=5776.47, stdev=4126.28
    clat percentiles (msec):
     |  1.00th=[    4],  5.00th=[  211], 10.00th=[  451], 20.00th=[ 1368],
     | 30.00th=[ 2635], 40.00th=[ 3876], 50.00th=[ 5336], 60.00th=[ 6745],
     | 70.00th=[ 8490], 80.00th=[ 9597], 90.00th=[11073], 95.00th=[12013],
     | 99.00th=[14026], 99.50th=[15637], 99.90th=[16711], 99.95th=[17113],
     | 99.99th=[17113]
  lat (usec)   : 20=0.78%
  lat (msec)   : 4=0.39%, 10=0.49%, 20=0.49%, 50=0.98%, 100=1.17%
  lat (msec)   : 250=0.98%, 500=5.37%, 750=1.66%, 1000=5.47%, 2000=7.52%
  lat (msec)   : >=2000=74.71%
  cpu          : usr=0.00%, sys=1.27%, ctx=8242, majf=0, minf=2097290
  IO depths    : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8%
     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=50.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=50.0%
     issued rwts: total=1024,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128
SEQ8M-Q128T16-1G-Read: (groupid=2, jobs=16): err= 0: pid=2187: Sun Aug 27 04:44:51 2023
  read: IOPS=58, BW=466MiB/s (488MB/s)(16.0GiB/35189msec)
    slat (msec): min=3, max=11164, avg=222.80, stdev=909.56
    clat (usec): min=12, max=32293k, avg=9725752.34, stdev=7991929.54
     lat (msec): min=3, max=34215, avg=9948.55, stdev=8122.77
    clat percentiles (msec):
     |  1.00th=[    4],  5.00th=[  271], 10.00th=[  625], 20.00th=[ 1938],
     | 30.00th=[ 3272], 40.00th=[ 4530], 50.00th=[ 6208], 60.00th=[14697],
     | 70.00th=[16576], 80.00th=[17113], 90.00th=[17113], 95.00th=[17113],
     | 99.00th=[17113], 99.50th=[17113], 99.90th=[17113], 99.95th=[17113],
     | 99.99th=[17113]
  lat (usec)   : 20=0.78%
  lat (msec)   : 4=0.39%, 10=0.34%, 20=0.29%, 50=0.24%, 100=0.29%
  lat (msec)   : 250=2.10%, 500=4.25%, 750=1.71%, 1000=2.59%, 2000=7.47%
  lat (msec)   : >=2000=79.54%
  cpu          : usr=0.00%, sys=0.80%, ctx=16487, majf=0, minf=4194567
  IO depths    : 1=0.8%, 2=1.6%, 4=3.1%, 8=6.2%, 16=12.5%, 32=25.0%, >=64=50.8%
     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=50.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=50.0%
     issued rwts: total=2048,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128

Run status group 0 (all jobs):
   READ: bw=42.7MiB/s (44.8MB/s), 42.7MiB/s-42.7MiB/s (44.8MB/s-44.8MB/s), io=1024MiB (1074MB), run=23959-23959msec

Run status group 1 (all jobs):
   READ: bw=402MiB/s (421MB/s), 402MiB/s-402MiB/s (421MB/s-421MB/s), io=8192MiB (8590MB), run=20382-20382msec

Run status group 2 (all jobs):
   READ: bw=466MiB/s (488MB/s), 466MiB/s-466MiB/s (488MB/s-488MB/s), io=16.0GiB (17.2GB), run=35189-35189msec
SEQ3G.conf
SEQ8M-Q128T1-3G-Read: (g=0): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
SEQ8M-Q128T8-3G-Read: (g=1): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
...
SEQ8M-Q128T16-3G-Read: (g=2): rw=read, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=128
...
fio-3.28
Starting 25 processes
SEQ8M-Q128T1-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T8-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)
SEQ8M-Q128T16-3G-Read: Laying out IO file (1 file / 3072MiB)

SEQ8M-Q128T1-3G-Read: (groupid=0, jobs=1): err= 0: pid=1488: Sun Aug 27 02:22:52 2023
  read: IOPS=13, BW=111MiB/s (116MB/s)(3072MiB/27670msec)
    slat (msec): min=2, max=7332, avg=67.92, stdev=477.03
    clat (usec): min=3, max=17894k, avg=2615858.48, stdev=2872727.12
     lat (msec): min=23, max=21903, avg=2683.78, stdev=3036.23
    clat percentiles (msec):
     |  1.00th=[   34],  5.00th=[  305], 10.00th=[  567], 20.00th=[ 1020],
     | 30.00th=[ 1754], 40.00th=[ 1955], 50.00th=[ 2106], 60.00th=[ 2140],
     | 70.00th=[ 2198], 80.00th=[ 2467], 90.00th=[ 4279], 95.00th=[11476],
     | 99.00th=[14429], 99.50th=[15503], 99.90th=[17113], 99.95th=[17113],
     | 99.99th=[17113]
   bw (  KiB/s): min=147456, max=720896, per=100.00%, avg=458876.00, stdev=180672.28, samples=9
   iops        : min=   18, max=   88, avg=56.00, stdev=22.05, samples=9
  lat (usec)   : 4=0.26%
  lat (msec)   : 50=1.04%, 100=0.52%, 250=2.60%, 500=4.95%, 750=3.12%
  lat (msec)   : 1000=6.77%, 2000=24.48%, >=2000=56.25%
  cpu          : usr=0.01%, sys=0.99%, ctx=3080, majf=0, minf=262160
  IO depths    : 1=0.3%, 2=0.5%, 4=1.0%, 8=2.1%, 16=4.2%, 32=8.3%, >=64=83.6%
     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=99.6%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.4%
     issued rwts: total=384,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128
SEQ8M-Q128T8-3G-Read: (groupid=1, jobs=8): err= 0: pid=1490: Sun Aug 27 02:22:52 2023
  read: IOPS=57, BW=459MiB/s (482MB/s)(24.0GiB/53496msec)
    slat (msec): min=2, max=9162, avg=130.28, stdev=307.68
    clat (nsec): min=1763, max=31853M, avg=12345802756.55, stdev=5597863933.79
     lat (msec): min=2, max=33315, avg=12476.08, stdev=5628.92
    clat percentiles (msec):
     |  1.00th=[   18],  5.00th=[  995], 10.00th=[ 2668], 20.00th=[ 6946],
     | 30.00th=[12147], 40.00th=[13355], 50.00th=[14026], 60.00th=[14832],
     | 70.00th=[15234], 80.00th=[15771], 90.00th=[16576], 95.00th=[17113],
     | 99.00th=[17113], 99.50th=[17113], 99.90th=[17113], 99.95th=[17113],
     | 99.99th=[17113]
   bw (  KiB/s): min=131072, max=1540391, per=100.00%, avg=650417.25, stdev=49025.32, samples=410
   iops        : min=   16, max=  188, avg=79.39, stdev= 5.98, samples=410
  lat (usec)   : 2=0.03%, 4=0.20%, 10=0.03%
  lat (msec)   : 4=0.13%, 10=0.36%, 20=0.33%, 50=0.39%, 100=0.20%
  lat (msec)   : 250=0.29%, 500=0.88%, 750=0.52%, 1000=1.79%, 2000=3.48%
  lat (msec)   : >=2000=91.37%
  cpu          : usr=0.01%, sys=0.55%, ctx=24624, majf=2, minf=2097302
  IO depths    : 1=0.3%, 2=0.5%, 4=1.0%, 8=2.1%, 16=4.2%, 32=8.3%, >=64=83.6%
     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=99.6%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.4%
     issued rwts: total=3072,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128
SEQ8M-Q128T16-3G-Read: (groupid=2, jobs=16): err= 0: pid=1507: Sun Aug 27 02:22:52 2023
  read: IOPS=60, BW=487MiB/s (510MB/s)(48.0GiB/100960msec)
    slat (msec): min=2, max=40040, avg=239.04, stdev=1668.80
    clat (nsec): min=1554, max=84152M, avg=21368480544.56, stdev=15305974989.36
     lat (msec): min=2, max=86077, avg=21607.52, stdev=15382.14
    clat percentiles (msec):
     |  1.00th=[   96],  5.00th=[ 1250], 10.00th=[ 3104], 20.00th=[ 7819],
     | 30.00th=[13758], 40.00th=[15368], 50.00th=[16442], 60.00th=[17113],
     | 70.00th=[17113], 80.00th=[17113], 90.00th=[17113], 95.00th=[17113],
     | 99.00th=[17113], 99.50th=[17113], 99.90th=[17113], 99.95th=[17113],
     | 99.99th=[17113]
   bw (  MiB/s): min=  256, max= 2928, per=100.00%, avg=1287.55, stdev=47.07, samples=814
   iops        : min=   32, max=  366, avg=160.94, stdev= 5.88, samples=814
  lat (usec)   : 2=0.03%, 4=0.11%, 10=0.11%
  lat (msec)   : 4=0.15%, 10=0.18%, 20=0.16%, 50=0.10%, 100=0.16%
  lat (msec)   : 250=0.42%, 500=0.86%, 750=1.03%, 1000=0.83%, 2000=2.99%
  lat (msec)   : >=2000=92.85%
  cpu          : usr=0.00%, sys=0.31%, ctx=49283, majf=0, minf=4194584
  IO depths    : 1=0.3%, 2=0.5%, 4=1.0%, 8=2.1%, 16=4.2%, 32=8.3%, >=64=83.6%
     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=99.6%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.4%
     issued rwts: total=6144,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128

Run status group 0 (all jobs):
   READ: bw=111MiB/s (116MB/s), 111MiB/s-111MiB/s (116MB/s-116MB/s), io=3072MiB (3221MB), run=27670-27670msec

Run status group 1 (all jobs):
   READ: bw=459MiB/s (482MB/s), 459MiB/s-459MiB/s (482MB/s-482MB/s), io=24.0GiB (25.8GB), run=53496-53496msec

Run status group 2 (all jobs):
   READ: bw=487MiB/s (510MB/s), 487MiB/s-487MiB/s (510MB/s-510MB/s), io=48.0GiB (51.5GB), run=100960-100960msec

おわりに

他リージョンから制約はあるものの読み書きできる共有ディレクトリとしてマウントできるのは面白かったです。転送速度、データ転送料を考慮すると実用的な使い方ではなかったという結果でした。 データ転送速度、転送コスト改善するとなると以下のサービス、設定をしたらどうなるのか気になるところです。

  • 海外リージョンの S3 バケットへデータをレプリケーション
  • Multi-Region Access Points in Amazon S3 の利用
  • Amazon S3 Transfer Acceleration の有効化

有効にした分、新たに発生する課金もあるため、コスト削減につながるのかは試算してみないとわからないです。転送速度の改善は見込めるため、海外リージョンからのアクセスを本格的に検討する機会があれば改めて検証しようと思います。

参考